bia*_*nca 109 jar maven maven-assembly-plugin
我有一个代码库,我想分发为jar.它还依赖于外部jar,我想在最后的jar中捆绑它.
我听说这可以用maven-assembly-plug-in,但我不明白怎么做.有人能指点我一些例子.
现在,我正在使用胖罐捆绑最后的罐子.我想用maven实现同样的目的.
Jig*_*shi 131
注意:如果您是一个spring-boot应用程序,请阅读答案的结尾
将以下插件添加到您pom.xml
的最新版本可以在https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-assembly-plugin找到
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>CHOOSE LATEST VERSION HERE</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
Run Code Online (Sandbox Code Playgroud)
配置此插件后,运行mvn package将生成两个jar:一个只包含项目类,另一个包含所有依赖项,后缀为"-jar-with-dependencies"的fat jar.
如果你想classpath在运行时正确设置,那么还要添加以下插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
对于spring boot应用程序,只需使用以下插件(选择合适的版本)
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<mainClass>${start-class}</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
phl*_*tos 54
你可以使用maven-shade-plugin.
在构建中配置shade插件后,该命令mvn package将创建一个包含所有依赖项的jar.
ggr*_*des 39
也许你想要maven-shade-plugin,捆绑依赖,最小化未使用的代码和隐藏外部依赖,以避免冲突.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<createDependencyReducedPom>true</createDependencyReducedPom>
<dependencyReducedPomLocation>
${java.io.tmpdir}/dependency-reduced-pom.xml
</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>com.acme.coyote</pattern>
<shadedPattern>hidden.coyote</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
参考文献:
use*_*330 10
实际上,添加
<archive>
<manifest>
<addClasspath>true</addClasspath>
<packageName>com.some.pkg</packageName>
<mainClass>com.MainClass</mainClass>
</manifest>
</archive>
Run Code Online (Sandbox Code Playgroud)
对maven-jar-plugin的声明不会为清单文件添加主类条目.我不得不将它添加到maven-assembly-plugin中,以便在清单中获取它
您可以使用onejar-maven-plugin进行打包.基本上,它将您的项目及其依赖项组装为一个jar,不仅包括您的项目jar文件,还包括所有外部依赖项作为"罐子罐",例如
<build>
<plugins>
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
注1:项目主页上提供了配置选项.
注2:由于某种原因,onejar-maven-plugin项目未在Maven Central发布.但是jolira.com跟踪原始项目并将其发布到groupId com.jolira.
如果您想使用maven- assembly-plugin ,请阅读。
正如其他答案已经概述的那样, maven-shade-plugin似乎提供了更多功能,并且是构建 fat jar 的推荐插件,但如果您想使用 maven-assemble-plugin,以下插件配置将起作用。
@jmj 的答案解释说,可以使用附加的 maven-jar-plugin 设置正确的类路径,但这只会将类路径添加到原始 jar 而不是 fat jar。该信息必须直接包含在 maven- assembly-plugin 的配置部分中。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.package.YourMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
当您现在运行时maven package,将创建您的普通 jar 和 fat jar,并且您可以使用 来运行 fat jar java -jar yourJar.jar。
| 归档时间: |
|
| 查看次数: |
97442 次 |
| 最近记录: |