Maven exec有效,但是java -jar不起作用

时间:2018-07-17 13:33:14

标签: java maven jar executable-jar maven-jar-plugin

我有一个只有一个依赖项的简单Maven项目。我可以安装它并通过Exec Maven Plugin在命令行中运行它:

mvn exec:java -D"exec.mainClass"="com.MyClass"

打包后,maven在我的目录中生成一个.jar文件。在Maven JAR Plugin的帮助下,我明确了自己的main方法类。看起来像:

...
Created-By: Apache Maven 3.3.1
Build-Jdk: 1.8.0_66
Main-Class: com.MyClass

现在,我想使用java命令像常规Java可执行文件一样运行此.jar文件,但是在执行以下操作之后:

java -jar myFile.jar

它给出了关于我唯一的依赖项的错误java.lang.NoClassDefFoundError

如何使Maven将所有依赖项添加到我的可执行jar文件中?

2 个答案:

答案 0 :(得分:1)

您可以使用Apache Maven Assembly Plugin来创建具有所有依赖项的jar,因此pom.xml应该类似于以下内容:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>mypackage.myclass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

我希望它能帮助您,再见。

答案 1 :(得分:1)

一种实现此目标的方法是使用Apache Maven Shade Plugin

  

此插件提供了将工件打包到   uber-jar,包括其依赖性和阴影-即重命名-   一些依赖项的软件包。

对于具有许多依赖项的大型项目,此插件具有一些优点。此处对此进行了说明:Difference between maven plugins ( assembly-plugins , jar-plugins , shaded-plugins)

在我的项目中,我使用以下配置:

nullptr