springboot项目打包成jar可以直接运行,但是将项目copy到生产环境时,文件实在是有点大,不方便部署。如果遇到网络不好的情况下,可能只更新了一个class文件,但却要讲整个几十兆的jarcopy到生产环境,确实不划算。所以如下可以将依赖包,配置文件,运行文件分离打包。以后多半是更新运行文件,分离后可能也就几百k
此方法只需要修改pom文件,需要增加三个plug。配置文件如下:
1. jar依赖包分离
在打包时将依赖包copy到指定目录
2. 配置文件分离
在打包时将指定的配置文件copy到指定目录
3. 运行文件分离
剔除依赖包和配置文件,指定启动类,将依赖包和配置文件的路径写入到manifest.inf文件中
打包完成后,将包放入到对应的位置,不要报找不到配置文件和依赖包即可。启动方式不变
打包后的目录:
- target
- lib
- config
- xxx.jar
<!--依赖包:打包时将第三方依赖包拷贝 到指定目录-->
<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>
<!--输出目录的lib 目录是依赖jar包的输出目录-->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- 运行文件:打包时将运行只打包源码,不打包依赖文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<!-- 项目运行文件的输出目录 -->
<outputDirectory>${project.build.directory}/</outputDirectory>
<archive>
<manifest>
<!--MANIFEST.MF 中 Class-Path 加入前缀-->
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
<!--jar包不包含唯一版本标识-->
<useUniqueVersions>false</useUniqueVersions>
<mainClass>com.lst.user.auth.ServiceAuthorityApplication</mainClass>
</manifest>
<manifestEntries>
<Class-Path>./config/</Class-Path>
</manifestEntries>
</archive>
<!--不打包资源文件-->
<!-- 打包后的jar包中不包括配置文件 -->
<!-- 通常是指classpath下目录下的文件,这样可以避免编写时的找不到相应文件 -->
<excludes>
<exclude>*.xml</exclude>
<exclude>*.properties</exclude>
<exclude>*.yml</exclude>
</excludes>
</configuration>
</plugin>
<!-- 配置文件:将需要复制的文件复制到指定路径(例:将配置文件提取到指定路径) -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<!-- 复制配置文件 -->
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 复制哪些目录下的哪些文件到指定目录 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 不配置excludes\includes默认就是复制指定目录的所有文件 -->
<includes>
<include>*.properties</include>
<include>*.yml</include>
<exclude>*.xml</exclude>
<include>*/*.properties</include>
<include>*/*.yml</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/config</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>