springboot打包jar包瘦身lib和配置文件分离
最近项目在部署使用的过程中,传输jar包的时候发现jar包有点大,传输速度有点慢。
笔者基于这个前提对项目的打包配置进行优化进行探索,一般来说lib是很少修改,配置文件会根据需求会有所变动,如果讲配置文件打进jar生产环境会修改等不便等操作。
以下配置再pom.xml中 <build> <plugins>添加相关配置</plugins></build>
1.指定打包环境和跳过编译单元测试
<!--定义项目的编译环境--> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> <!--默认执行src/test/java路径下的测试用例,建议跳过执行--> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <configuration> <skip>true</skip> </configuration> </plugin>
2.jar打包排除配置文件和lib
<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <version>3.2.0</version> <configuration> <!-- 不打包资源文件,如果放开全量jar也不会打进去--> <!-- <excludes>--> <!-- <exclude>*.yml</exclude>--> <!-- <exclude>*.properties</exclude>--> <!-- </excludes>--> <archive> <manifest> <addclasspath>true</addclasspath> <!-- manifest.mf 中 class-path 加入前缀 --> <classpathprefix>lib/</classpathprefix> <!-- jar包不包含唯一版本标识 --> <useuniqueversions>false</useuniqueversions> <!--指定启动入口类 --> <mainclass>com.xxxx.application</mainclass> </manifest> <manifestentries> <!--manifest.mf 中 class-path 加入资源文件目录 --> <class-path>./resources/</class-path> </manifestentries> </archive> <outputdirectory>${project.build.directory}</outputdirectory> </configuration> </plugin>
3.如果需要全量包也可以增加如下配置
便于开发环境打包使用
<!--全量jar包,最初的打包方式,springboot的默认编译插件,默认会把所有的文件打包成一个jar,--> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <!--设置springboot的启动类或者是jar包的启动类--> <mainclass>com.xxxx.application</mainclass> <fork>true</fork> <addresources>true</addresources> <outputdirectory>${project.build.directory}/jar</outputdirectory> </configuration> </plugin>
4.将lib和配置文件单独复制出来
<!--复制关联jar包到指定lib打包目录 ,target目录下的文件夹下,按需修改 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-dependency-plugin</artifactid> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputdirectory>${project.build.directory}/lib/</outputdirectory> </configuration> </execution> </executions> </plugin> <!-- 复制配置文件到指定resources打包目录 ,target目录下的文件夹下,按需修改--> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-resources-plugin</artifactid> <version>3.2.0</version> <executions> <execution> <!-- 复制配置文件 --> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>*.yml</include> <include>*.properties</include> </includes> </resource> </resources> <outputdirectory>${project.build.directory}/resources</outputdirectory> </configuration> </execution> </executions> </plugin>
5.全量配置如下,拷贝即用
注意启动类的指定:
以下配置再pom.xml中 <build> 添加相关配置</build>
<!--拆分配置文件和lib,给jar瘦身--> <!--启动参考命令,再jar目录执行,也可以指定绝对路径: ${project.build.directory}工程路径下的target目录 dloader.path:加载本地lib dspring.config.location:加载本地配置 server.port:指定端口 /-/- 这个有转义,注命令要去掉/ java -dloader.path=lib/ -jar xxxx.jar /-/-dspring.config.location=resources/ /-/-server.port=8080 --> <plugins> <!--定义项目的编译环境--> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> <!--默认执行src/test/java路径下的测试用例,建议跳过执行--> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <configuration> <skip>true</skip> </configuration> </plugin> <!--全量jar包,最初的打包方式,springboot的默认编译插件,默认会把所有的文件打包成一个jar--> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainclass>com.xxxx</mainclass> <fork>true</fork> <addresources>true</addresources> <outputdirectory>${project.build.directory}/jar</outputdirectory> </configuration> </plugin> <!-- 打jar包 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <version>3.2.0</version> <configuration> <!-- 不打包资源文件,如果放开全量jar也不会打进去--> <!-- <excludes>--> <!-- <exclude>*.yml</exclude>--> <!-- <exclude>*.properties</exclude>--> <!-- </excludes>--> <archive> <manifest> <addclasspath>true</addclasspath> <!-- manifest.mf 中 class-path 加入前缀 --> <classpathprefix>lib/</classpathprefix> <!-- jar包不包含唯一版本标识 --> <useuniqueversions>false</useuniqueversions> <!--指定springboot启动入口类 --> <mainclass>com.xxxx</mainclass> </manifest> <manifestentries> <!--manifest.mf 中 class-path 加入资源文件目录 --> <class-path>./resources/</class-path> </manifestentries> </archive> <outputdirectory>${project.build.directory}</outputdirectory> </configuration> </plugin> <!--复制关联jar包到指定lib打包目录 ,target目录下的文件夹下,按需修改 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-dependency-plugin</artifactid> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputdirectory>${project.build.directory}/lib/</outputdirectory> </configuration> </execution> </executions> </plugin> <!-- 复制配置文件到指定resources打包目录 ,target目录下的文件夹下,按需修改--> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-resources-plugin</artifactid> <version>3.2.0</version> <executions> <execution> <!-- 复制配置文件 --> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>*.yml</include> <include>*.properties</include> </includes> </resource> </resources> <outputdirectory>${project.build.directory}/resources</outputdirectory> </configuration> </execution> </executions> </plugin> </plugins>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论