Maven构建错误:无法找到或加载主类

时间:2017-03-09 06:52:50

标签: java maven jar

我在jar中的maven上构建项目后遇到问题。

我制作包并创建.jar文件:

mvn package
运行我的jar文件后

java -jar artifactId.jar

并收到错误:

Error: Could not find or load main class com.emercit.app.App

如果我在目标目录中运行类,我会收到类似的错误:

cd target/classes/com/emercit/app
java App
Error: Could not find or load main class App

我在App类中的代码:

package com.emercit.app;

public class App extends Application {

   /**

     Program code

  **/

    }

public static void main (String[] args) {


    //Init form
   Thread myThready = new Thread(() -> {
        launch(args);
    });
    myThready.start();

    }
 }

我在pom.xml中的构建属性:

 <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>


        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>false</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.emercit.app.App</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>
                            ${project.build.directory}/lib
                        </outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3 个答案:

答案 0 :(得分:0)

使用此插件构建jar并指定主类,这将在生成的jar中添加正确的META-INF。

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>com.barclaycard.blackboxtester.Application</Main-Class>
                                        <Build-Number>123</Build-Number>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

答案 1 :(得分:0)

您的设置与我的设置类似,只是您需要将POM文件中的此参数更改为值“true”。

<addClasspath>true</addClasspath>

如果没有它,你必须在命令行中包含依赖项,而不是。 Java不会仅仅因为它们位于目录中而找到jar。此命令将在带有JAR的MANIFEST.MF文件中添加“类路径”。

生成的MANIFEST.MF文件将包含类似这样的行(取自我的一个开源项目)。你的jar依赖性当然会有所不同。

Class-Path: calendar-2.2.3.jar algebrain-2.2.3.jar commons-codec-1.9.j
 ar argument-4.3.8.jar slf4j-api-1.7.13.jar slf4j-log4j12-1.7.13.jar l
 og4j-1.2.17.jar

答案 2 :(得分:0)

创建任何mavenized项目时的文件结构应该 src / main / java 并且包应该包含在类文件中 另外,它会抛出错误无法找到或加载主类