我有一个使用 Maven“快速启动”模板构建的 java 项目。结构看起来像
src
main
java
myapp
HelloWorld.java
Run Code Online (Sandbox Code Playgroud)
HelloWorld.java 被声明在包“myapp”下
在 pom.xml 中,仅包含 junit。
现在,在运行 Maven 编译后,我在下面得到了一个类文件
target
classes
myapp
HelloWorld.class
Run Code Online (Sandbox Code Playgroud)
但在我 cd 到 target/classes/myapp 后,然后执行
java -cp . HelloWorld
Run Code Online (Sandbox Code Playgroud)
我得到 NoClassDefFoundError,我按照如何从命令行执行 java .class 进行操作
我试过
java -cp . myapp.HelloWorld (myapp is the package)
Run Code Online (Sandbox Code Playgroud)
我仍然得到“无法找到或加载主类”
我的问题是:我使用“-cp .”设置类路径,那么为什么我仍然无法运行该类?和Maven有什么关系吗?
我知道我不需要使用命令行,我只是好奇。
-cp。向 Java 表明您希望它在当前目录中查找类。要实现此功能,您需要使用:
java -cp target/classes myapp.HelloWorld
Run Code Online (Sandbox Code Playgroud)
(请注意,“myapp”是定义 HelloWorld 类的包,并在类的第一行声明,如下所示
package myapp;
Run Code Online (Sandbox Code Playgroud)
)
通过使用上面的 java 命令,您不需要 cd 进入 target/classes/myapp 目录。如果你想 cd 进入目标/类,你可以使用以下命令:
java -cp . myapp.HelloWorld
Run Code Online (Sandbox Code Playgroud)
更新:示例项目内容:
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
Run Code Online (Sandbox Code Playgroud)
运行 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
Run Code Online (Sandbox Code Playgroud)
编译后,我能够 cd 到 app/target/classes 并运行 java -cp 。myapp.HelloWorld
如果您仍然遇到问题,您可以发布您的示例类和 pom.xml 吗?
| 归档时间: |
|
| 查看次数: |
4649 次 |
| 最近记录: |