如何使用IntelliJ编译Java项目并在终端中运行(NoClassDefFoundError)

时间:2018-09-22 13:39:01

标签: java intellij-idea

我喜欢IntelliJ,因为它易于使用且具有出色的IDE功能。但是,由于我的项目的性质,在IntelliJ中构建了所有内容之后,我想通过终端运行相关的.class文件。我的结构如下:

out/
|
|-production/
|  |
|  |-AILab2/
|     |
|     |-TTT/
|     |  |--Main.class
|     |  |--Constants.class
|     |  |--Deadline.class
|     |  |--pipe|
|     |  |--etc...
|     |
|     |-TTT3
|        |--Constants.class
|        |--Deadline.class
|        |--etc...
src
|
|-TTT
|  |--Main.java
|  |--Constants.java
|  |--Deadline.java
|  |--etc...
|
|-TTT3
   |--Constants.java
   |--Deadline.java
   |--etc...

进入终端运行时,请执行以下操作:

~/IdeaProjects/AILab2/out/production/AILab2/TTT$ java Main init verbose < pipe | java Main > pipe
Error: Could not find or load main class Main
Caused by: java.lang.NoClassDefFoundError: TTT/Main (wrong name: Main)
Error: Could not find or load main class Main
Caused by: java.lang.NoClassDefFoundError: TTT/Main (wrong name: Main)

我已经在网上搜索过,但我不知道此错误的原因。我以相同的方式运行了以前的项目,但是这次不起作用。感谢帮助。

编辑:将终端命令更改为包含TTT会导致出现相同消息:

$ java TTT.Main init verbose < pipe | java TTT.Main > pipe
Error: Could not find or load main class TTT.Main
Caused by: java.lang.ClassNotFoundException: TTT.Main
Error: Could not find or load main class TTT.Main
Caused by: java.lang.ClassNotFoundException: TTT.Main

1 个答案:

答案 0 :(得分:1)

该类的名称必须包含程序包(TTT.Main),并且您必须在父目录(包含TTT文件夹的目录)中调用Java。

请放心:它始终像这样工作。 “以前曾经这样工作”的唯一解释是:那时您的班级不在单独的程序包中!

除此之外,您还必须学习如何在类路径中找到类。例如,从这里https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html开始阅读。