SpringBoot打包的两种方式
date
Dec 23, 2021
slug
springboot-package
status
Published
tags
Java
Springboot
summary
SpringBoot
type
Post
常规整体打包
Maven
的默认打包插件用的是spring-boot-maven-plugin
,这个插件会把项目中的代码和相关依赖一起打包成一个jar包,我们拿到这个jar包就可以去生产环境运行。
在使用IDEA时,我们可以执行maven
-> Plugins
-> install
即可代码和依赖分别打包
以上方式当我们每次进行项目更新的时候,这个jar都特别大,因为包含了所有的依赖。因此我们需要把打包模式修改成,所有的lib文件都放在生成目录的lib/文件夹下,生成的项目jar包里面只包含项目代码部分。
所以我们在不更改
pom
文件的情况下,可以直接把代码达成jar包方式来运行
第一个插件是指定jar
包的启动类,还有lib
文件目录,代码如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.remember5.demo.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
上面代码中classpathPrefix代表了lib文件目录,mainClass是jar包的启动类
第二个插件是
maven-dependency-plugin
,他的功能是把所有的依赖文件都复制到lib文件夹下,代码如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
outputDirectory
字段就是代表依赖jar包复制的目录单独的jar包如何打包
在lib里的jar包是独立的情况,在
pom.xml
下 添加以下代码 添加红色的部分,就会把lib打进去项目结构

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
<resources>
</build>
第二个种方式 (可能有问题)
<build>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>lib</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</build>
Maven父子项目打包
父项目
<project>
<modules>
<module>demo</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
子项目
<project>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.2.0.RELEASE</spring-boot.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<!-- 启动类 -->
<mainClass>com.remember.demo.Application</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
在父项目中执行打包
package

资料