文章目录
- 1. 一般常见的打包方式如下(全量包FatJar)
- 2. 增量包(ThinJar)
1. 一般常见的打包方式如下(全量包FatJar)
- FatJar打包时,所有依赖的jar包会一并打包,并且打包好的jar可以直接使用java -jar执行,一般来说整个可执行jar包大约会有几十上百兆不等。
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><addDefaultImplementationEntries>true</addDefaultImplementationEntries><addDefaultSpecificationEntries>true</addDefaultSpecificationEntries></manifest></archive></configuration><executions><execution><id>default-jar</id><phase>package</phase><configuration><excludes><exclude>config/**</exclude><exclude>*.yml</exclude><exclude>logback-spring.xml</exclude><exclude>banner.txt</exclude></excludes><classifier>assembly</classifier></configuration><goals><goal>jar</goal></goals></execution><execution><id>full-jar</id><phase>package</phase><configuration><classifier>full</classifier></configuration><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><id>default</id><phase>package</phase><configuration><classifier>assembly</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution><execution><id>full-jar</id><phase>package</phase><configuration><classifier>full</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId></plugin></plugins>
</build>
2. 增量包(ThinJar)
- 相比于FatJar,ThinJar会将依赖的jar包拷贝到业务jar包外部,这样业务jar包的大小会非常小,并且支持jar包或文件级别的升级
<profiles><profile><id>fat-jar</id><properties><packaging.type>jar</packaging.type></properties><activation><activeByDefault>true</activeByDefault></activation><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><addDefaultImplementationEntries>true</addDefaultImplementationEntries><addDefaultSpecificationEntries>true</addDefaultSpecificationEntries></manifest></archive></configuration><executions><execution><id>default-jar</id><phase>package</phase><configuration><excludes><exclude>config/**</exclude><exclude>*.yml</exclude><exclude>logback-spring.xml</exclude><exclude>banner.txt</exclude></excludes><classifier>assembly</classifier></configuration><goals><goal>jar</goal></goals></execution><execution><id>full-jar</id><phase>package</phase><configuration><classifier>full</classifier></configuration><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><id>default</id><phase>package</phase><configuration><classifier>assembly</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution><execution><id>full-jar</id><phase>package</phase><configuration><classifier>full</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId></plugin></plugins></build></profile><profile><id>thin-jar</id><properties><packaging.type>jar</packaging.type></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.2</version><configuration><archive><manifest><addDefaultImplementationEntries>true</addDefaultImplementationEntries><addDefaultSpecificationEntries>true</addDefaultSpecificationEntries></manifest></archive><excludes><exclude>config/**</exclude><exclude>*.yml</exclude><exclude>logback-spring.xml</exclude><exclude>banner.txt</exclude></excludes><classifier>bootapp</classifier></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>3.0.0</version><executions><execution><id>write-classpath</id><phase>package</phase><configuration><target><property name="runtime_classpath" refid="maven.runtime.classpath"/><jar destfile="${project.build.directory}/${project.artifactId}-${project.version}-bootapp.jar" update="true"><manifest><attribute name="Xdr-Thin-Classpath" value="${runtime_classpath}"/></manifest></jar></target></configuration><goals><goal>run</goal></goals></execution></executions></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includes><include><groupId>not.exists.groupId</groupId><artifactId>not.exists.artifactId</artifactId></include></includes></configuration><executions><execution><id>default</id><phase>package</phase><configuration><classifier>bootapp</classifier></configuration><goals><goal>build-info</goal><goal>repackage</goal></goals></execution></executions><dependencies><dependency><groupId>com.xdr630</groupId><artifactId>xdr-boot-thin-layout</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.1.1</version><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions><configuration><descriptors><descriptor>src/assembly/assembly_thin.xml</descriptor></descriptors><outputDirectory>target</outputDirectory></configuration></plugin></plugins></build></profile><profile><id>war</id><properties><packaging.type>war</packaging.type></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency></dependencies><build><finalName>myproject</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.1.0</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml><archive><manifestEntries><Dependencies>jdk.unsupported</Dependencies></manifestEntries></archive></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><id>default</id><phase>package</phase><goals><goal>build-info</goal><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></profile>
</profiles><distributionManagement><repository><id>maven-release</id><name>Nexus Release Repository</name><url>http://xxx:8081/repository/maven-releases/</url></repository><snapshotRepository><id>maven-snapshots</id><name>Nexus Release Repository</name><url>http://xxx:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>
- 注意:这里一定要指定maven-assembly-plugin插件的版本为3.1.1+,否则会出现依赖包打包不正确的bug
<?xml version='1.0' encoding='UTF-8'?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"><id>bin</id><formats><format>tar.gz</format></formats><includeBaseDirectory>true</includeBaseDirectory><fileSets><fileSet><directory>${project.basedir}/src/bin</directory><outputDirectory>bin</outputDirectory><includes><include>*_thin.bat</include><include>shutdown.bat</include></includes><lineEnding>dos</lineEnding></fileSet><fileSet><directory>${project.basedir}/src/bin</directory><outputDirectory>bin</outputDirectory><includes><include>*_thin.sh</include><include>shutdown.sh</include></includes><lineEnding>unix</lineEnding><fileMode>0755</fileMode></fileSet><fileSet><directory>${project.build.directory}/classes</directory><outputDirectory>conf</outputDirectory><includes><include>config/**</include><include>*.yml</include><include>logback-spring.xml</include><include>banner.txt</include></includes></fileSet><fileSet><directory>${project.build.directory}</directory><outputDirectory>lib/bootapp</outputDirectory><includes><include>*-bootapp.jar</include></includes></fileSet></fileSets><dependencySets><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib/xdr</outputDirectory><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><includes><include>com.xdr630*:*</include></includes></dependencySet><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib/spring</outputDirectory><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><includes><include>org.springframework*:*</include></includes></dependencySet><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib/others</outputDirectory><outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping><excludes><exclude>org.springframework*:*</exclude><exclude>com.xdr630*:*</exclude></excludes></dependencySet></dependencySets>
</assembly>