Maven:使用命令行运行java类文件

use*_*641 1 java maven

我有一个使用 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有什么关系吗?

我知道我不需要使用命令行,我只是好奇。

Rob*_*t K 5

-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 吗?