我正在尝试在 IntelIj 中设置一个项目。我面临一些与 IntelIj 中的项目结构设置相关的问题。虽然我能够修复它。但我仍然很困惑为什么它不能使用默认设置?
我面临以下错误:-
为什么会出现这种情况?
为了解决这个问题,我在模块编译器输出路径中选择了另一个选项,并保留默认选项。
虽然解决了上述问题,但却引发了另一个问题 -
ClassNotFoundException
它解决了问题。
我在终端中看到的一个区别是在运行 main 方法时使用了
-classpath
。
请注意,Java 和 IntelIj 均未安装在
C
驱动器中,而是安装在 D
驱动器中。不知道这是否会导致任何问题。
还有一个问题:- 在我的 IntelIj 中,为什么我需要手动将目录设置为源根目录?
请帮助我理解为什么会发生这种情况。我希望得到详细的解释。 谢谢。
Java 的一般工作方式是将源代码保存到
.java
文件中,然后将其编译为 .class
文件(通常位于与源文件不同的目录中)。
您必须告诉 Java 编译器以及 IntelliJ 源文件的位置(源根目录)以及当源
.java
文件编译为 .class
文件时要使用哪个目录。
虽然这在只有一个模块的 IntelliJ 项目中可能显得多余,但是 IntelliJ 项目通常包含多个模块,并且在模块级别将
.java
源文件和已编译的 .class
文件分开通常是很好的做法,恕我直言。
无论如何,IntelliJ 让您选择,从而产生以下选项:
给定一个具有单个模块的项目:
my-project
+ my-module
+ src
+ com
+ mycompany
+ myproject
+ mymodule
+ Main.java
IntelliJ 允许您指定创建
.class
文件的位置,位于:
项目级别 - 此选项通常不是您想要的,因为所有模块中的所有
.class
文件最终都将位于该根目录下(在 production
或 test
目录中)。例如,指定在项目级别创建 .class
文件的位置将导致:
my-project
+ out
+ production
+ com
+ mycompany
+ myproject
+ mymodule
+ Main.class
运行如下:
java -cp my-project/out/production com.mycompany.myproject.mymodule.Main
模块级别 - 这通常是您想要的选项,因为
.class
文件可以相对于模块存储(尽管这在具有一个模块的项目中可能显得多余,但恕我直言,这仍然是一种很好的做法)。例如,指定在项目级别创建 .class
文件的位置将导致:
my-project
+ my-module
+ out
+ com
+ mycompany
+ myproject
+ mymodule
+ Main.class
运行如下:
java -cp my-project/my-module/out com.mycompany.myproject.mymodule.Main
本质上,创建模块的原因是隔离代码库的各个部分,因此在模块级别指定输出目录是一个很好的做法。