Java 无法从父目录的子目录导入
Java cannot import from child of parent directory
好的,所以我正在制作一个 Java 程序,我有以下目录设置:
- 我的计划
|__ 引擎
|______ 实用程序
|__________ Important.java
|
|__ 来源
|______ 主要
|__________ MainApp.java
里面 MainApp.java 我有一个导入语句:
import Engine.utils.Important;
我也试过了
import utils.Important;
无济于事。
我错过了什么愚蠢的东西吗?为什么我无法从 MainApp 导入 Important?
我是运行Windows10,cmdjava-versionreturns如下:
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
谢谢
快速编辑:也试过MyProgramme.Engine.utils.Important;
第二次编辑:我得到的错误是 java: package Engine does not exist
由于您只是初学者,请将 utils 文件夹移动到 src。
然后将它用作 import utils.Smth;
,你应该没问题。
也可以考虑使用一些开发编辑器。例如 IntelliJ、Eclipse 或 NetBeans。
导入项目,你会没事的:)
手动调整类路径对您来说不是一个好主意。
您现在可能希望在您的项目中进行模块化,但您不知道如何很好地使用包。仔细阅读。
如果您已经了解所有这些内容,您应该阅读 gradle 或 maven。简而言之,这些工具将多个项目合二为一。但在项目的早期阶段,这将是一个重大的过度工程,并导致大量的开发开销。
只要您的 class 路径设置正确,您的第一个 (import Engine.utils.Important;
) 就可以了。您需要确保 class 路径包括 Engine
目录的父目录和 main
目录的父目录(假设您的 Main
class 在包 main
,而不是 src.main
,这很奇怪)。
*nix 示例:
如果您的层次结构的顶层是 ~/temp
,则确保您的 class 路径包括 ~/temp
和 ~/temp/src
。例如,这很好用:
javac -cp ~/temp:~/temp/src src/main/Main.java
Windows 示例:
或者在 Windows 上,如果您假设您的基本目录是 C:\Temp
,那么:
javac -cp C:\temp;C:\temp\src src\main\Main.java
假设
以上假设Important.java
有
package Engine.utils;
并且Main.java
有
package main;
旁注:Java 中的压倒性约定是包名全部小写。所以 engine
而不是 Engine
.
好的,所以我正在制作一个 Java 程序,我有以下目录设置:
- 我的计划
|__ 引擎
|______ 实用程序
|__________ Important.java
|
|__ 来源
|______ 主要
|__________ MainApp.java
里面 MainApp.java 我有一个导入语句:
import Engine.utils.Important;
我也试过了
import utils.Important;
无济于事。 我错过了什么愚蠢的东西吗?为什么我无法从 MainApp 导入 Important?
我是运行Windows10,cmdjava-versionreturns如下:
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
谢谢
快速编辑:也试过MyProgramme.Engine.utils.Important; 第二次编辑:我得到的错误是 java: package Engine does not exist
由于您只是初学者,请将 utils 文件夹移动到 src。
然后将它用作 import utils.Smth;
,你应该没问题。
也可以考虑使用一些开发编辑器。例如 IntelliJ、Eclipse 或 NetBeans。 导入项目,你会没事的:) 手动调整类路径对您来说不是一个好主意。
您现在可能希望在您的项目中进行模块化,但您不知道如何很好地使用包。仔细阅读。
如果您已经了解所有这些内容,您应该阅读 gradle 或 maven。简而言之,这些工具将多个项目合二为一。但在项目的早期阶段,这将是一个重大的过度工程,并导致大量的开发开销。
只要您的 class 路径设置正确,您的第一个 (import Engine.utils.Important;
) 就可以了。您需要确保 class 路径包括 Engine
目录的父目录和 main
目录的父目录(假设您的 Main
class 在包 main
,而不是 src.main
,这很奇怪)。
*nix 示例:
如果您的层次结构的顶层是 ~/temp
,则确保您的 class 路径包括 ~/temp
和 ~/temp/src
。例如,这很好用:
javac -cp ~/temp:~/temp/src src/main/Main.java
Windows 示例:
或者在 Windows 上,如果您假设您的基本目录是 C:\Temp
,那么:
javac -cp C:\temp;C:\temp\src src\main\Main.java
假设
以上假设Important.java
有
package Engine.utils;
并且Main.java
有
package main;
旁注:Java 中的压倒性约定是包名全部小写。所以 engine
而不是 Engine
.