大家好,我是烤鸭:
今天分享一下springboot将jar包打包到指定目录下。
由于之前上线都是一个打包到一个jar,由于服务多了,1个包100多M,哪怕是小版本上线都需要重新上传jar包。
1.目的
将不常用的比如spring,druid等不常用打包到lib目录,这样每次上线不需要上传这些。第三方或者常改动的还打包到本身的jar包内,每次上线都会新打包。
这样原来的100多M的jar包,可以变成2、3M。
如图所示:
原来的打包方式
改后的方式:
2.修改pom
简单解释一下,includes标签内就是打入jar包第三方jar。将上面的2M的包解压缩后,就是includes的包。如图所示。
excludeGroupIds和excludeArtifactIds 是配置不在lib目录里的包,由于java启动加载的机制是优先加载jar包,
再加载外部目录,如果jar包都存在两个地方,这样配置就没有意义了,每次还是得重新发布lib目录,所以将includes
中的包,再在excludeGroupIds 和 excludeArtifactIds 配置上。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.5.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
<goal>build-info</goal>
</goals>
</execution>
</executions>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
<include>
<groupId>com.etc</groupId>
<artifactId>etc-manage-api</artifactId>
</include>
<include>
<groupId>com.etc</groupId>
<artifactId>etc-manage-core</artifactId>
</include>
<include>
<groupId>com.etc</groupId>
<artifactId>etc-manage-rpc-api</artifactId>
</include>
<include>
<groupId>com.sinoiov.etc.apollo</groupId>
<artifactId>apollo-spring-boot-starter</artifactId>
</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeGroupIds>
com.sinoiov.etc.apollo
</excludeGroupIds>
<excludeArtifactIds>
etc-manage-api,etc-manage-core,etc-manage-rpc-api
</excludeArtifactIds>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.修改启动脚本
原脚本
java -jar etc-manage-service-basic-2.2.0.jar
现脚本 (如果相对目录不好用,就用绝对目录试试)
java Dloader.path=../lib -jar etc-manage-service-basic-2.2.0.jar