maven-assembly-plugin 打包可执行jar(fat jar)和配置文件与jar同时打包部署

java程序要打包可执行的jar,可以利用maven-assembly-plugin插件;

1)如果是需要将程序所有依赖的jar打包到同一个jar中,可以在pom.xml添加如下依赖:

[java]  view plain  copy
  1. <plugin>  
  2.     <groupId>org.apache.maven.plugins</groupId>  
  3.     <artifactId>maven-assembly-plugin</artifactId>  
  4.     <version>3.0.0</version>  
  5.     <configuration>  
  6.         <descriptorRefs>  
  7.             <descriptorRef>jar-with-dependencies</descriptorRef>  
  8.         </descriptorRefs>  
  9.         <!-- MainClass in mainfest make a executable jar -->  
  10.         <archive>  
  11.           <manifest>  
  12.             <mainClass>com.xxx.MainClass</mainClass>  
  13.           </manifest>  
  14.         </archive>  
  15.     </configuration>  
  16.     <executions>  
  17.       <execution>  
  18.         <id>make-assembly</id>  
  19.                                      <!-- bind to the packaging phase -->  
  20.         <phase>package</phase>  
  21.         <goals>  
  22.             <goal>single</goal>  
  23.         </goals>  
  24.       </execution>  
  25.     </executions>  
  26. </plugin>  
使用上述方法,用jar-with-dependencies作为<descriptorRef>标签的值,则表示使用了maven自带的归档格式来生成带包含所有依赖的jar压缩包。
执行maven package后则生成包含所有依赖库的可执行Jar包,直接执行生成的jar包:java -jar xxx.jar则可执行程序。

需要注意的是必须要在mainClass中指定主类的路径。

2)程序运行所需的配置文件与可执行jar同时打包部署

大部分程序运行时都会有依赖的配置文件,有时候会需要将配置文件与fat jar一起打包部署,本例子用的是自定义的maven assembly xml来实现的:

pom.xml:

[java]  view plain  copy
  1. <plugin>  
  2.     <artifactId>maven-assembly-plugin</artifactId>  
  3.     <version>3.0.0</version>  
  4.     <configuration>  
  5.         <appendAssemblyId>true</appendAssemblyId>  
  6.         <archive>  
  7.             <manifest>  
  8.                 <mainClass>com.xxx.MainClass</mainClass>  
  9.             </manifest>  
  10.         </archive>  
  11.         <descriptors>  
  12.             <descriptor>src/assembly/assembly-fat-jar.xml</descriptor>  
  13.             <descriptor>src/assembly/assembly-conf.xml</descriptor>  
  14.         </descriptors>  
  15.     </configuration>  
  16.     <executions>  
  17.         <execution>  
  18.             <id>make-assembly</id> <!-- this is used for inheritance merges -->  
  19.             <phase>package</phase> <!-- bind to the packaging phase -->  
  20.             <goals>  
  21.                 <goal>single</goal>  
  22.             </goals>  
  23.         </execution>  
  24.     </executions>  
  25. </plugin>  
上面 maven-assembly-plugin插件的配置说明: maven打包根据两个自定义的描述文件来配置最终打包生产的文件结构:

assembly-fat-jar.xml:

[java]  view plain  copy
  1. <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"  
  2.           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.           xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">  
  4.     <!-- TODO: a jarjar format would be better -->  
  5.     <id>jar-with-dependencies</id>  
  6.     <formats>  
  7.         <format>jar</format>  
  8.     </formats>  
  9.     <includeBaseDirectory>false</includeBaseDirectory>  
  10.     <dependencySets>  
  11.         <dependencySet>  
  12.             <outputDirectory>/</outputDirectory>  
  13.             <useProjectArtifact>true</useProjectArtifact>  
  14.             <unpack>true</unpack>  
  15.             <scope>runtime</scope>  
  16.         </dependencySet>  
  17.     </dependencySets>  
  18. </assembly>  

这个配置将在程序的target目录生成xxx--jar-with-dependencies.jar可执行程序,相当于前面例子<descriptorRef>jar-with-dependencies</descriptorRef>的功能,这个jar在下面的配置中打包会用到。


assembly-conf.xml:

[java]  view plain  copy
  1. <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"  
  2.           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.           xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">  
  4.     <id>fat-jar</id>  
  5.     <formats>  
  6.         <format>tgz</format>  
  7.     </formats>  
  8.     <includeBaseDirectory>true</includeBaseDirectory>  
  9.     <baseDirectory>pojectDirectory</baseDirectory>  
  10.     <fileSets>  
  11.         <fileSet>  
  12.             <includes>  
  13.                 <include>conf/**</include>  
  14.                 <include>sampleData/**</include>  
  15.             </includes>  
  16.         </fileSet>  
  17.     </fileSets>  
  18.     <files>  
  19.     <file>  
  20.     <source>target/xxx-jar-with-dependencies.jar</source>  
  21.     <outputDirectory>lib</outputDirectory>  
  22.     </file>  
  23.     </files>  
  24. </assembly>  
这个配置将产生名字为xxx-fat-jar.tgz的压缩包,即程序最终打包的包。包含三个目录:conf/ 、sampleData/ 、lib/ 。

其中<include>conf/**</include>和<include>sampleData/**</include>是程序中需要被打包的配置文件目录,可根据需要修改。

<file><source>target/xxx--jar-with-dependencies.jar</source><outputDirectory>lib</outputDirectory></file>这段是将前面生产的jar打包到压缩文件中的lib目录下。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Maven-assembly-plugin是一个用于打包的插件,可以将项目中的多个模块合并成一个可执行JAR包或者WAR包。然而,有时候我们可能需要对已经打包好的JAR或者WAR包进行进一步的处理或者外部打包。以下是关于maven-assembly-plugin外部打包的解答。 首先,我们需要确保已经正确配置maven-assembly-plugin,并且在项目的pom.xml文件中已经定义好了自定义的assembly描述文件(assembly.xml)。 在进行外部打包之前,我们需要先将项目进行构建和打包。在项目根目录下通过命令行输入"mvn clean install"命令来构建项目,并且将项目打包JAR或者WAR文件。 接下来,在项目根目录下创建一个新的文件夹(例如,external_package),用于存放外部打包的文件。 然后,可以通过以下命令来进行外部打包: mvn assembly:assembly -Ddescriptor=assembly.xml -DoutputDirectory=/path/to/external_package 在上面的命令中,-Ddescriptor参数用于指定assembly描述文件所在的路径以及文件名称,-DoutputDirectory参数用于指定外部打包文件存放的路径。 执行完上述命令后,maven-assembly-plugin会根据assembly.xml文件的定义,在指定的路径下生成外部打包文件。 通过以上步骤,我们就可以实现maven-assembly-plugin的外部打包功能。需要注意的是,我们在进行外部打包之前,需要先正确配置打包项目,并且确保已经定义了正确的assembly描述文件。 外部打包可以用于将项目的可执行文件(如JAR或者WAR文件)与其它资源(如配置文件或者依赖库)合并打包成一个单独的压缩文件,方便部署和分发。它可以帮助我们将项目打包成一个易于使用和发布的形式,简化部署流程,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值