我使用IntelliJ IDEA生成一个带有maven-assembly-plugin
的jar文件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<mainClass>test.LeanFTest</mainClass>
</manifest>
</archive>
<finalName>${project.artifactId}-fatjar-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>
它不起作用,在执行过程中不断地询问依赖关系。我无法使用jar文件,所以我将项目导入Eclipse,并使用内置的jar导出选项。这个罐子很好用。我找不到这些jar文件之间的区别。
原因可能是Eclipse正在清单文件中生成一个"类路径:"条目。尝试通过添加以下内容来更新.pom文件中的assembly conf:
<addClasspath>true</addClasspath>
默认情况下,maven汇编插件不会捆绑您自己的jar独立运行所需的所有依赖项。
所以你需要在下面的插件配置下添加这个:
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
结果,插件标签变成:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<mainClass>test.LeanFTest</mainClass>
</manifest>
</archive>
<finalName>${project.artifactId}-fatjar-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef> <!-- the secret -->
</descriptorRefs>
</configuration>
</plugin>
您可以运行:
java -jar path/to/LeanFTest.jar
直接运行程序。