maven构建可部署的包
在生成环境中,我们通常都是把项目通过maven打包成jar或者war包给别人用或者进行部署,但是有时候我们可能需要对开源框架进行二次定制或者自己写一些通用的中间件给团队其它成员使用,这个时候需要我们把项目打包成tar.gz这种格式,因为一般生产环境都是部署在Linux:比如这个是我写的一个全局ID中间件项目,结构如下
具体提供服务的项目部署结构:
最终我们在Linux解压的时候,一般可能是这个样子的
好了,那么怎么实现上面这种打包形式?
我们需要使用maven的组合打包,进行组合构建,通过assembly.xml来实现
1 在父pom.xml的同级目录增加一个assembly.xml
2 编写assembly.xml,其实内容很简单就是根据自己的需要,指定要包含的打包模块有哪些,哪些模块是打成jar,哪些模块是打包成tar.gz,比如这个使我的配置内容
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> <id>release</id> <!-- 指定格式化的级别 --> <formats> <format>dir</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <!---指定打包包含的模块--> <moduleSets> <moduleSet> <includes> <include>com.suning.trace:trace_service</include> <include>com.suning.trace:trace_rest</include> <include>com.suning.trace:trace_rest_netty</include> </includes> <!-- 指定jar输出的目录 --> <binaries> <outputDirectory>lib</outputDirectory> <unpack>false</unpack> </binaries> </moduleSet> </moduleSets> <fileSets> <!-- output bin --> <fileSet> <outputDirectory>bin</outputDirectory> <directory>${basedir}/trace_rest/target/</directory> <includes> <include>trace_rest-*-bin.tar.gz</include> </includes> </fileSet> <fileSet> <outputDirectory>bin</outputDirectory> <directory>${basedir}/trace_rest_netty/target/</directory> <includes> <include>trace_rest_netty-*-bin.tar.gz</include> </includes> </fileSet> <!-- output src --> <fileSet> <outputDirectory>src</outputDirectory> <directory>${basedir}/trace_service/target/</directory> <includes> <include>trace_service-*-sources.jar</include> </includes> </fileSet> </fileSets> </assembly>
然后需要在父pom.xml增加一个plugin来引用这个文件
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.4</version> <configuration> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> </plugin>
3 根据你需要打包成tar.gz的模块再增加独立的assembly.xml配置文件,比如我的模块是trace_rest_netty,这个里面的内容比较简单,主要指定格式化打包格式和你要把一些指定的脚本输出到指定的目录,比如我的脚本都会被输入到bin目录里面
<assembly> <id>bin</id> <!--格式化打包格式--> <formats> <format>tar.gz</format> </formats> <!--是否包含基目录--> <includeBaseDirectory>true</includeBaseDirectory> <!--输出目录lib保存所有依赖的必要jar--> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <scope>runtime</scope> </dependencySet> </dependencySets> <!--指定所有的相关脚本输出到bin目录--> <fileSets> <fileSet> <outputDirectory>bin</outputDirectory> <directory>${basedir}/src/main/scripts/</directory> <fileMode>755</fileMode> </fileSet> <fileSet> <outputDirectory>/</outputDirectory> <includes> <include>${basedir}/README.MD</include> </includes> </fileSet> </fileSets> </assembly>
结构如下
最后也需要在该模块下面的pom.xml去引入这个配置文件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2.1</version> <configuration> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>到此为止基本上配置文件就OK了,最后使用mvn install 命令就可以生成自己自己想要的各种jar包