Java Maven无法找到或加载主类

时间:2018-11-14 09:12:19

标签: java maven

我刚刚开始学习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>

2 个答案:

答案 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

enter image description here

答案 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...,这就是javajar都找不到的原因。