每日一听
需求背景
SpringBoot项目每次改动,都需要将整个项目重新打包部署,而且打包后的jar包太大,远程部署时很不方便,尤其是网让吃了的时候,整个人能烦死。
所以把lib里面的jar包从项目分离出来,每次部署只需要发布修改过的jar包就行啦。
Maven
修改 pom.xml
文件
创建SpringBoot项目后默认的打包配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在properties标签中定义变量
<properties>
<!--依赖输出目录-->
<lib-path>lib</lib-path>
<!--springboot默认打包输出目录-->
<jar-path>jar</jar-path>
<!--配置文件输出目录-->
<config-path>config</config-path>
<!--jar包名称-->
<final-name>maven-sever-pack-demo</final-name>
<!--指定启动类-->
<main-class>cn.xlsea.demo.MavenSeverPackDemoApplication</main-class>
</properties>
替换SpringBoot默认打包配置
<build>
<!--项目名称-->
<finalName>${final-name}</finalName>
<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>
<!--maven的测试用例插件,建议跳过。-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!--这个是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>${main-class}</mainClass>
<fork>true</fork>
<addResources>true</addResources>
<outputDirectory>${project.build.directory}/${jar-path}</outputDirectory>
</configuration>
</plugin>
<!-- 打JAR包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!-- 不打包资源文件(配置文件和依赖包分开) -->
<excludes>
<exclude>*.yml</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!-- MANIFEST.MF 中 Class-Path 加入前缀 -->
<classpathPrefix>${lib-path}/</classpathPrefix>
<!-- jar包不包含唯一版本标识 -->
<useUniqueVersions>false</useUniqueVersions>
<!--指定入口类 -->
<mainClass>${main-class}</mainClass>
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->
<Class-Path>./${config-path}/</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
<!-- 该插件的作用是用于复制依赖的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>
<outputDirectory>${project.build.directory}/${lib-path}/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 该插件的作用是用于复制指定的文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<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>
<includes>
<include>*.yml</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/${config-path}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
开始打包
config
配置文件所在目录lib
依赖所在目录jar
springboot默认打包插件的 jar 包maven-sever-pack-demo.jar
启动 jar 包
启动运行
运行maven-sever-pack-demo.jar,启动成功:
Gradle
修改 build.gradle
配置文件
// 将依赖包复制到lib目录
task copyJar(type: Copy) {
// 清除现有的lib目录
delete "$buildDir/libs/lib"
from configurations.runtimeClasspath
into "$buildDir/libs/lib"
}
// 拷贝配置文件
task copyResources(type: Copy) {
// 清除现有的配置目录
delete "$buildDir/libs/config"
from "src/main/resources"
into "$buildDir/libs/config"
// 只复制yml配置文件
include "*.yml"
// 排除指定文件
// exclude "application.yml"
}
// 配置bootJar进行打包
bootJar {
// 排除lib目录及yml配置文件
excludes = ["*.jar", "*.yml"]
// 引入需要的文件(多模块项目下可引入指定jar包)
// includes = ['common-${project.version}.jar']
// lib目录的清除和复制任务
dependsOn copyJar
// 配置目录的清除和复制任务
dependsOn copyResources
// 指定依赖包的路径
manifest {
attributes "Manifest-Version": 1.0,
'Class-Path': 'config/ ' + configurations.runtimeClasspath.files.collect { "lib/$it.name" }.join(' ')
}
}
开始打包
执行 bootJar
任务
config
配置文件所在目录lib
依赖所在目录gradle-sever-pack-demo.jar
启动 jar 包
启动运行
运行gradle-sever-pack-demo.jar
如有侵权,请联系作者 马铃薯头 删除
2 条评论
springboot有多个模块怎么打包
拿ruoyi举例,修改ruoyi-admin模块下的pom.xml就可以了