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

Maven:使用命令行运行java类文件,java,maven,Java,Maven,我有一个使用Maven quickstart模板构建的java项目。结构看起来像 src main java myapp HelloWorld.java HelloWorld.java被声明为在包myapp下 在pom.xml中,只包含junit 现在,在我运行maven compile之后,我在下面得到了一个类文件 target classes myapp HelloWorld.class 但是在我cd到target/clas

我有一个使用Maven quickstart模板构建的java项目。结构看起来像

src
  main
    java
      myapp
        HelloWorld.java
HelloWorld.java被声明为在包myapp下

在pom.xml中,只包含junit

现在,在我运行maven compile之后,我在下面得到了一个类文件

target
  classes
    myapp
      HelloWorld.class
但是在我cd到target/classes/myapp之后

java -cp . HelloWorld
我没有发现任何错误,我是根据

我试过了

java -cp . myapp.HelloWorld    (myapp is the package)
我仍然无法找到或加载主类

我的问题是:我使用-cp设置了类路径,那么为什么我仍然不能运行这个类呢?这和Maven有什么关系吗


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

-cp。向Java指示您希望它在当前目录中查找类。要使此功能正常工作,您需要使用:

java -cp target/classes myapp.HelloWorld 
请注意,myapp是HelloWorld类在其中定义的包,在类的第一行声明为

package myapp;

通过使用上述java命令,您不需要将cd放入target/classes/myapp目录。如果要将cd刻录到目标/类中,可以改用以下命令:

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

-cp。向Java指示您希望它在当前目录中查找类。要使此功能正常工作,您需要使用:

java -cp target/classes myapp.HelloWorld 
请注意,myapp是HelloWorld类在其中定义的包,在类的第一行声明为

package myapp;

通过使用上述java命令,您不需要将cd放入target/classes/myapp目录。如果要将cd刻录到目标/类中,可以改用以下命令:

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

我假设您需要指定包名,即转到target/classes并运行java-cp。我的应用程序。HelloWorld@PetterFriberg,我读了所有这些问题,但解决方案对我不起作用,这就是我问这个问题的原因,我知道因为这个问题,获得否决票有很大的变化。我只想有人花3分钟来复制它,我真的对这个看似简单的问题感到沮丧。问题就像链接的问题一样:你需要小心包装声明。HelloWorld是myapp包下的一个类。因此,要运行它,您不能将cd刻录到myapp中。您应该将cd刻录到根文件夹(此处为target/classes)并调用java myapp\HelloWorld。也就是说,您最好从Maven默认在target下创建的项目中创建一个JAR,cd到basedir,并使用JAR的java-JAR target\name启动JAR。jar@Tunaki,您的建议行得通,但是您能解释一下为什么使用java-cp吗。可以在这里工作吗?我假设您需要指定包名-即转到target/classes并运行java-cp。我的应用程序。HelloWorld@PetterFriberg,我读了所有这些问题,但解决方案对我不起作用,这就是我问这个问题的原因,我知道因为这个问题,获得否决票有很大的变化。我只想有人花3分钟来复制它,我真的对这个看似简单的问题感到沮丧。问题就像链接的问题一样:你需要小心包装声明。HelloWorld是myapp包下的一个类。因此,要运行它,您不能将cd刻录到myapp中。您应该将cd刻录到根文件夹(此处为target/classes)并调用java myapp\HelloWorld。也就是说,您最好从Maven默认在target下创建的项目中创建一个JAR,cd到basedir,并使用JAR的java-JAR target\name启动JAR。jar@Tunaki,您的建议行得通,但是您能解释一下为什么使用java-cp吗。在这里工作?我试过了,没用。我的意思是,从理论上讲,这应该是可行的,但我想这与maven有关。你能创建一个简单的项目并尝试一下吗?java-cp target/classes myapp.HelloWorld可以工作,但是在我制作cd之后,然后使用java-cp。myapp.HelloWorld,它无法加载主类您将cd刻录到哪里?我只是运行了一个示例应用程序,并用项目的“结构”更新了我的答案。我知道我弄错了什么概念,我将cd放入最内部的目录中。因为我的java文件放在一个包下,所以我不应该这样做。非常感谢。我试过了,没用。我的意思是,从理论上讲,这应该是可行的,但我想这与maven有关。你能创建一个简单的项目并尝试一下吗?java-cp target/classes myapp.HelloWorld可以工作,但是在我制作cd之后,然后使用java-cp。myapp.HelloWorld,它无法加载主类您将cd刻录到哪里?我刚刚运行了一个示例应用程序,并进行了更新
我对这个项目的回答是“结构”。我知道我错了什么概念,我把cd放进了最里面的目录。因为我的java文件放在一个包下,所以我不应该这样做。非常感谢。