使用maven构build一个胖jar子
我有一个代码库,我想分发为jar。 它也依赖于外部的jar子,我想在最后的jar子里捆绑。
我听说这可以使用maven-assembly-plug-in
来完成,但是我不明白。 有人可以给我一些例子。
现在,我正在使用胖jar来捆绑最后的jar子。 我想用maven实现同样的function。
添加以下插件到您的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>
configuration好这个插件后,运行mvn package
会产生两个jar:一个只包含项目类,另一个包含所有依赖后缀的“jar -with-dependencies”。
如果你想在运行时设置正确的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>
你可以使用maven-shade-plugin 。
在你的构build中configuration阴影插件后,命令mvn package
将创build一个合并到其中的所有依赖的单个jar。
也许你想要maven-shade-plugin
,bundle依赖关系,最小化未使用的代码并隐藏外部依赖以避免冲突。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</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>
参考文献:
您可以使用onejar-maven插件进行打包。 基本上,它把你的项目和它的依赖关系组装成一个jar包,不仅包括你的项目jar文件,还包括所有的外部依赖关系,例如“jarjar”
<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>
注1:configuration选项在项目主页上可用。
注2:由于某种原因,onejar-maven-plugin项目不在Maven Central发布。 不过, jolira.com会跟踪原始项目并将其发布到groupId com.jolira
。
实际上,join了
<archive> <manifest> <addClasspath>true</addClasspath> <packageName>com.some.pkg</packageName> <mainClass>com.MainClass</mainClass> </manifest> </archive>
对maven-jar-plugin的声明不会将main类条目添加到清单文件中。 我不得不将它添加到maven-assembly-plugin中,以便在清单中获取它
另一种方法是使用maven 树荫插件来构build一个uber-jar
。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version> Your Version Here </version> <configuration> <!-- put your configurations here --> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin>