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.