我使用Maven"快速启动"模板。结构看起来像
src
main
java
myapp
HelloWorld.java
HelloWorld.java被声明为包#34; myapp"
在pom.xml中,只包含junit。
现在,在我运行maven编译之后,我在
下获得了一个类文件target
classes
myapp
HelloWorld.class
但在我cd到目标/ classes / myapp之后,并且
java -cp . HelloWorld
我得到NoClassDefFoundError,我根据How to execute a java .class from the command line
做了我试过
java -cp . myapp.HelloWorld (myapp is the package)
我仍然无法找到或加载主要课程"
我的问题是:我使用" -cp。"设置类路径,然后为什么我仍然无法运行该类?它与Maven有什么关系吗?
我知道我不需要使用命令行,我只是很好奇。
答案 0 :(得分:4)
-cp。向Java表明您希望它在类的当前目录中查找。要使其工作,您需要使用:
java -cp target/classes myapp.HelloWorld
(请注意,“myapp”是您定义HelloWorld类的包,并在类的第一行声明为
package myapp;
)
通过使用上面的java命令,您无需cd进入target / classes / myapp目录。如果要进入目标/类,可以使用以下命令:
java -cp . myapp.HelloWorld
更新:示例项目内容:
app/
app/pom.xml
app/src/
app/src/main/
app/src/main/java/
app/src/main/java/myapp/
app/src/main/java/myapp/HelloWorld.java
运行mvn clean install后,结构变为:
app/
app/pom.xml
app/src/
app/src/main/
app/src/main/java/
app/src/main/java/myapp/
app/src/main/java/myapp/HelloWorld.java
app/target/
app/target/classes/
app/target/classes/test-1.0.0.jar
app/target/classes/myapp/
app/target/classes/myapp/HelloWorld.class
编译之后,我能够cd到app / target / classes,并运行java -cp。 myapp.HelloWorld
如果您仍遇到问题,可以发布样本类和pom.xml吗?