Maven的打包插件maven-assembly-plugin介绍
2017-02-23 14:07
465 查看
使用maven打包时,maven-jar-plugin插件会在target目录下生成可执行的xxx-0.0.1-SNAPSHOT.jar文件,但是一般生产程序部署时需要打包自定义的格式包,这种情况就可以使用maven-assembly-plugin插件。
下面我们看一看这个插件的使用方法。
说明:
打包后的包名是否包含assembly的id名,assembly的配置在后面介绍
引用的assembly配置文件,可以用多个,即可以同时打包多个格式的包
phase加入package后,则在执行maven package时就可以调用maven-assembly-plugin插件定义的打包方式
本例子是生成一个名为Service-fat-jar.tgz的压缩包,解压后里面只有一个jar文件:service-0.0.1-SNAPSHOT.jar。
可以看出service-0.0.1-SNAPSHOT.jar文件是直接从target目录下拷贝然后输出到当前包中的。(service-0.0.1-SNAPSHOT.jar文件前面说到过是maven-jar-plugin插件自动生产的)
本例子是生成一个名为Service-bin.tgz的压缩包。
是指把项目依赖的所有包都打包输出到某个路径(本例中为lib目录); 并且会把maven-jar-plugin插件自动生成的service-0.0.1-SNAPSHOT.jar也导入到lib中。
本次需求是需要把该jar排除掉,于是使用exclude标签。
dependencySet中使用exclude标签中过滤的名字有点坑,不能直接写文件名。比如写
匹配的名字规则:
groupId:artifactId:type:classifier ( artifact.getDependencyConflictId() )
groupId:artifactId ( ArtifactUtils.versionlessKey( artifact ) )
groupId:artifactId:type:classifier:version ( artifact.getId() )
可参照https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html
可以自定义导入的文件的路径和别名,上述例子是把target目录下的service-0.0.1-SNAPSHOT.jar.original文件打包到本次包的lib目录并且更改名字为service-0.0.1-SNAPSHOT.jar
assembly还有很多语法可以根据项目需要去自定义,具体每个标签的定义可以参照官方文档:
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
下面我们看一看这个插件的使用方法。
1. 首先需要在maven工程配置文件pom.xml中配置
例子:<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.4</version> <configuration> <finalName>Service</finalName> <appendAssemblyId>true</appendAssemblyId> <descriptors> <descriptor>src/assembly/assembly.xml</descriptor> <descriptor>src/assembly/assembly-fat-jar.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
说明:
<appendAssemblyId>
打包后的包名是否包含assembly的id名,assembly的配置在后面介绍
<descriptor>
引用的assembly配置文件,可以用多个,即可以同时打包多个格式的包
<execution>
phase加入package后,则在执行maven package时就可以调用maven-assembly-plugin插件定义的打包方式
2. assembly-fat-jar.xml文件配置
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>fat-jar</id> <formats> <format>tgz</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <baseDirectory>Service</baseDirectory> <files> <file> <source>target/service-0.0.1-SNAPSHOT.jar</source> <outputDirectory>.</outputDirectory> </file> </files> </assembly>
本例子是生成一个名为Service-fat-jar.tgz的压缩包,解压后里面只有一个jar文件:service-0.0.1-SNAPSHOT.jar。
可以看出service-0.0.1-SNAPSHOT.jar文件是直接从target目录下拷贝然后输出到当前包中的。(service-0.0.1-SNAPSHOT.jar文件前面说到过是maven-jar-plugin插件自动生产的)
3. assemblyr.xml文件配置:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>bin</id> <formats> <format>tgz</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <baseDirectory>Service</baseDirectory> <dependencySets> <dependencySet> <outputDirectory>/lib</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <unpack>false</unpack> <scope>runtime</scope> <excludes> <exclude>*:service:*</exclude> </excludes> </dependencySet> </dependencySets> <fileSets> <fileSet> <outputDirectory></outputDirectory> <includes> <include>/conf/**</include> </includes> </fileSet> </fileSets> <files> <file> <source>target/service-0.0.1-SNAPSHOT.jar.original</source> <outputDirectory>./lib</outputDirectory> <destName>service-0.0.1-SNAPSHOT.jar</destName> </file> </files> </assembly>
本例子是生成一个名为Service-bin.tgz的压缩包。
<dependencySet>标签
是指把项目依赖的所有包都打包输出到某个路径(本例中为lib目录); 并且会把maven-jar-plugin插件自动生成的service-0.0.1-SNAPSHOT.jar也导入到lib中。
本次需求是需要把该jar排除掉,于是使用exclude标签。
dependencySet中使用exclude标签中过滤的名字有点坑,不能直接写文件名。比如写
<exclude>service-0.0.1-SNAPSHOT.jar</exclude>是不生效的。
匹配的名字规则:
groupId:artifactId:type:classifier ( artifact.getDependencyConflictId() )
groupId:artifactId ( ArtifactUtils.versionlessKey( artifact ) )
groupId:artifactId:type:classifier:version ( artifact.getId() )
可参照https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html
<file>标签
可以自定义导入的文件的路径和别名,上述例子是把target目录下的service-0.0.1-SNAPSHOT.jar.original文件打包到本次包的lib目录并且更改名字为service-0.0.1-SNAPSHOT.jar
assembly还有很多语法可以根据项目需要去自定义,具体每个标签的定义可以参照官方文档:
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
相关文章推荐
- idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打包
- Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解
- 使用maven-assembly-plugin打包,assembly的语法介绍(同时打多个包、排除依赖包、文件更改别名、自定义路径)
- maven java项目打包发布插件 maven-assembly-plugin
- maven-assembly-plugin 插件打包一个bug手动解决方式
- Maven build插件之Maven-assembly-plugin自定义打包
- Maven常用插件介绍:Maven-assembly-plugin插件
- Maven 教程(20)— 使用maven-assembly-plugin插件来定制化打包
- 利用maven-assembly-plugin插件 打包
- maven-assembly-plugin打包插件配置
- Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解
- maven 自定义打包插件maven-assembly-plugin不完全记录
- maven父子项目使用assembly插件打包
- Java技术--maven的assembly插件打包(依赖包归档)
- maven插件介绍之tomcat7-maven-plugin
- 使用maven-assembly-plugin打包dubbo接口
- 使用maven-shade-plugin插件打包可运行jar
- 源码打包插件:maven-source-plugin
- Maven Assembly插件介绍
- Maven打包包含依赖的可执行Jar – Maven Assembly Plugin