使用Spring Boot框架进行开发时,默认情况下,项目在发布时会将项目代码和项目的所有依赖包一起打包成一个可执行的 jar 包。如果项目的依赖包很多,生成的jar包就会非常大。即使每次只改动一点东西,就需要将整个项目重新打包部署,生成的jar包在传输过程中既浪费带宽也浪费时间,对于更新服务很不友好。
下面的代码配置演示如何将依赖包从整个项目分离出来,这样每次部署只需要发布代码即可。
配置文件按照如下配置即可:
<build>
<plugins>
<!-- 自定义ClassPath路径 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- 把构建根目录的lib文件夹配置成ClassPath路径 -->
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!--配置Jar包构建信息-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
<includeSystemScope>true</includeSystemScope>
<!--手动设置构建需要加入的依赖,只有配置的依赖才会加入。-->
<includes>
<!--配置一个不存在的groupId,这样就不会引入任何依赖,jar包就只包含代码文件-->
<include>
<groupId>not-exists</groupId>
</include>
<!--如果是多模块项目,其他模块需要手动添加下面-->
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</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>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<!--生成的jar包名称为项目的artifactId-->
<finalName>${project.artifactId}</finalName>
</build>