3

我正在尝试在 Windows7 上构建一个 maven java 程序,而我的 java -version 是 1.7。我收到此错误:

尝试执行 Maven 生成的 Jar 时出现“错误:无法找到或加载主类 com.mycompany.App”

即使com/mycompany/App.class存在于 Jar 中并且它有一个 main 方法。这是我的META-INF/MANIFEST.MF样子:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: me
Build-Jdk: 1.7.0_03
Main-Class: com.mycompany.App
Class-Path: C:/Users/me/.m2/repository/com/mycompany/commons/2.1-SNAPSHOT/commons-2.1-SNAPSHOT.jar

我正在尝试使用以下方法执行 jar:

java -jar mycompany-2.1-SNAPSHOT.jar 12:141678 1

我的清单文件末尾有一个空行。我正在使用 Maven 3.0.5 并使用 mvn 包来生成 jar 文件。这是我的 pom.xml 的一部分:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <classpathLayoutType>repository</classpathLayoutType>
                    <classpathPrefix>${settings.localRepository}</classpathPrefix>
                    <mainClass>com.mycompany.App</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>

有人可以帮助我了解导致此错误的原因吗?

4

2 回答 2

1

如果您从清单中删除除 mainClass 之外的所有内容,它应该可以工作。如果您尝试创建一个包含所有类路径依赖项的可执行 jar 文件,您可能希望使用程序集插件或 shade 插件而不是 jar 插件。

于 2013-06-07T12:24:06.237 回答
0
  • 假设您已经检查过这些文件是否存在:

./mycompany-2.1-SNAPSHOT.jar

C:/Users/me/.m2/repository/com/mycompany/commons/2.1-SNAPSHOT/commons-2.1-SNAPSHOT.jar

  • 工件是否包含com/mycompany/App.class?

jar -tf mycompany-2.1-SNAPSHOT.jar

  • 使用该选项运行 java-verbose:class可以显示如何解析类路径以加载(或不加载)每个类。

笔记

您可能会在构建时收到警告,因为没有为插件指定版本:

    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    ...
于 2013-06-07T02:32:22.057 回答