罗列笔者认为比较有用的一些maven打包插件,方便后续查阅html
springboot自带的maven插件,可用于简单的JAR/WAR方式打包,官方地址为https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.htmljava
简单的应用以下web
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--当使用springboot构建服务,则该配置可省略--> <version>2.1.4.RELEASE</version> </plugin>
当执行mvn clean package命令的时候,其会默认执行该插件的repackage任务。其会在target目录下生成如下两个文件spring
> ls target/*.jar > target/demo-springboot-web-0.0.1-SNAPSHOT.jar target/demo-springboot-web-0.0.1-SNAPSHOT.jar.original
其中demo-springboot-web-0.0.1-SNAPSHOT.jar.original文件,用户可将.original后缀去掉即可获得用户本身编写的项目包。apache
而demo-springboot-web-0.0.1-SNAPSHOT.jar文件每每比上面那个文件要大的多,其实其内部已经将用户编写的项目所相关的依赖都打进去了,百闻不如一见。
springboot
由图中可知,相应的依赖均被打入至\BOOT-INF\lib目录,而相应的源码则被编译放置到\BOOT-INF\classes目录。服务器
上述打出的JAR包,由\META-INF\MANIFEST.MF文件的属性Main-Class可知具体的启动由springboot官方编写的org.springframework.boot.loader.JarLauncher类来启动,且其会去加载Start-Class属性指定的类来做为真正的启动类。而用户层的调用则可执行命令java -jar demo-springboot-web-0.0.1-SNAPSHOT.jar
即可app
而用户若是想个别指定相应的main-class即可使用如下配置maven
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--当使用springboot构建服务,则该配置可省略--> <version>2.1.4.RELEASE</version> <configuration> <archive> <manifest> <mainClass>com.example.demo.DemoSpringApplication</mainClass> </manifest> </archive> </configuration> </plugin>
apache开发的maven插件,可用于复杂方式打包,好比支持ZIP、TAR等方式的输出,有助于集成。官方地址为http://maven.apache.org/plugins/maven-assembly-plugin/plugin-info.htmlspring-boot
英文单词assembly带有组装的意思,其功能比较强大,通常用户都比较青睐的工具。
简单的应用以下
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> </plugin>
假若咱们直接使用mvn clean package命令,你会发现毫无有用的包打出来,看来是须要添加一些配置才能。
1.官方提供了默认的装配方式,好比jar-with-dependencies
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> <descriptorRefs> </configuration> <!--bind goal to package--> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> <goals> </execution> </executions> </plugin>
这时候可以使用mvn clean package进行打包了,仍是以上述的项目为例,打包后的文件出如今target目录
> ls target\*.jar > target/demo-springboot-web-0.0.1-SNAPSHOT.jar target/demo-springboot-web-0.0.1-SNAPSHOT-jar-with-denpendencies.jar
与spring-boot-maven插件打包相似,前者为项目源码,后者为相应的依赖包。简单看下相应的依赖包状况
由上图可知相应的源码也被打进包中,全部的依赖包的代码都会打进了该包中。固然用户若是想指定相应的启动类,则采起archive配置便可。
2.使用最多的仍是用
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> *** <build> <finalName>demoWeb</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--若是指定为true,则表示打出来的jar包为可执行jar包,直接能够在*nix服务器上执行./${name}.jar即可运行。--> <!--官方注释不建议使用java -jar等方式调用打出来的包,当此配置为true时--> <executable>true</executable> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> <configuration> <descriptors> <descriptor>src/main/assembly/descriptor.xml</descriptor> </descriptors> </configuration> <!--bind to package phase--> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
descriptor.xml
<?xml version="1.0" encoding="UTF-8"?> <assembly> <!-- 可自定义,这里指定的是项目环境 --> <id>release</id> <!-- 打包的类型,若是有N个,将会打N个类型的包 --> <formats> <format>tar.gz</format> <!--<format>zip</format>--> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <!-- 0755->即用户具备读/写/执行权限,组用户和其它用户具备读写权限; 0644->即用户具备读写权限,组用户和其它用户具备只读权限; --> <!-- 将src/main/assembly/bin目录下的全部文件输出到打包后的bin目录中 --> <fileSet> <directory>${basedir}/src/main/assembly/bin</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> <includes> <include>**.sh</include> <include>**.bat</include> </includes> </fileSet> <!-- 指定输出resource中的配置文件到conf目录中 --> <fileSet> <directory>${basedir}/src/main/resource</directory> <outputDirectory>conf</outputDirectory> <fileMode>0644</fileMode> <includes> <include>*.*</include> <include>**/**</include> </includes> </fileSet> <!-- 将项目启动jar打包到./目录中 --> <fileSet> <directory>${basedir}/target</directory> <outputDirectory>.\</outputDirectory> <fileMode>0755</fileMode> <includes> <include>${project.name}-${project.version}.jar</include> </includes> </fileSet> </fileSets> </assembly>
通过上述的配置即可指定打包成相应的.tar.gz压缩包,默认打包出来的格式为${project.name}-${project.version}-${assembly.id}.tar.gz,也可经过如下配置进行更改
<plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <finalName>${project.artifactId}-${project.version}</finalName> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>src/main/assembly/descriptor.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin>