我刚刚开始学习Java,但是几乎每个步骤都有问题... 至少我想使this super simple getting started tutorial正常工作(来自Maven官方页面):)
我已经完成了本教程中的所有步骤,并且已经构建了项目,但是无法运行它。
因此,在mvn package
之后,我有了BUILD SUCCESSFUL
,但是当我尝试通过此命令jar
启动java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
文件时,会发生错误:
Error: Could not find or load main class com.mycompany.app.App
Caused by: java.lang.ClassNotFoundException: com.mycompany.app.App
如何解决?
java版本“ 11.0.1”(2018-10-16 LTS)
Apache Maven 3.6.0
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
项目结构是由该命令自动创建的,如docs中所示
my-app
|-src
| |-main
| |-java
| |-com
| |-mycompany
| |-app
| |-App.java
|-pom.xml
|-target
还有App.java
代码:
package com.mycompany.app;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
和pom.xml
文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>maven-test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-test</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
</project>
我还必须添加以下行来使mvn package
命令起作用:
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
答案 0 :(得分:1)
您可以使用以下4个命令重试:
> mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
> cd my-app
> mvn package
> java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
答案 1 :(得分:1)
根据jar
命令的输出(注释中的NoSuchFileException
),似乎您正在从maven以外的某个目录运行java
命令项目。 @Sgrillon的答案之所以有效,是因为他将目录更改为my-app
,然后从同一目录运行mvn package
命令,然后运行java
命令。然后target/my-app-1.0-SNAPSHOT.jar
就在那里(由maven生成),并且可以由java
命令找到并将其包括在其类路径(-cp
)中
这不是Java或Maven问题,而是文件路径问题。
编辑:我刚刚在您的pom.xml
上意识到您的工件被命名为maven-test
<artifactId>maven-test</artifactId>
在这种情况下,罐子应该是target/maven-test-1.0-SNAPSHOT.jar
而不是my-app...
,这就是java
和jar
都找不到的原因。