文章目录
- 背景
- 目录
- 源码目录
- 结果目录
- 实现
- 项目打包
- 方式一 使用IDEA工具打包,选择对应的profiles,然后clean package
- 方式二 使用maven命令打包
- 部署
背景
在打包项目时,通常只需要生成一个可执行的jar文件。然而,有时候需要将启动脚本或外部配置文件附加到该jar文件中,这时候就可以使用assembly进行自定义打包。此工具可以根据自己的需求将所需的文件打包到指定的目录中。使用场景包括但不限于:
- 根据不同的环境,将文件打包成tar.gz或zip格式。
- 将Spring Boot项目中的配置文件提取到外部config目录中,以方便运行时修改配置。
- 将Spring Boot项目中的启动jar文件移动到指定目录中,以便于部署和运行。
- 将run.sh文件复制到指定目录中,其中包含启动、停止和重启服务命令。
目录
源码目录
下面是我们项目的目录。
├─assembly
│ │ assembly.xml
│ ├─bin
│ run.sh
│
├─logs
│ laker.log
├─src
│ ├─main
│ ├─java
│ │ └─com
│ │ └─laker
│ │ └─admin
│ │ Application.java
│ │
│ └─resources
│ │ application-local.yml
│ │ application-prod.yml
│ │ application.yml
期望打包成下面的结果目录。
结果目录
easyAdmin
│ README.md
| easyAdmin.jar
│ run.sh
├─ logs
│
├─ config
│ │ application-local.yml
│ │ application.yml
│ │ logback.xml
│
└─ web
└─ admin
└─ admin
└─ component
└─ config
| pear.config.yml
└─ view
└─ flow
└─ sys
index.html
login.html
实现
第一步 在项目的pom.xml
中加入maven-assembly-plugin
。
配置assembly.xml文件路径
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptors>
<descriptor>assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
第二步 自定义assembly.xml
配置
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<!-- 可自定义,这里指定的是项目环境 -->
<!-- easy-admin-1.0.0-local-1.0.0.RELEASE.tar.gz -->
<id>${profileActive}-${project.version}</id>
<!-- 打包的类型,如果有N个,将会打N个类型的包 -->
<formats>
<!-- <format>tar.gz</format>-->
<format>zip</format>
</formats>
<!-- 如果为true,打包出来的文件结构第一层为pom.xml里面定义的artifactId-version -->
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<!--
0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
0644->即用户具有读写权限,组用户和其它用户具有只读权限;
-->
<!-- 脚本 打包进压缩包 -->
<!-- 将assembly/bin目录下的所有文件输出到打包后的bin目录中 -->
<fileSet>
<directory>${basedir}/assembly/bin</directory>
<fileMode>0755</fileMode>
<!-- 输出到当前目录 -->
<outputDirectory>.</outputDirectory>
<includes>
<include>**.sh</include>
<include>**.bat</include>
</includes>
</fileSet>
<!-- 配置 打包进压缩包 -->
<!-- 指定输出target/classes中的配置文件到config目录中 -->
<fileSet>
<directory>${basedir}/src/main/resources</directory>
<outputDirectory>config</outputDirectory>
<fileMode>0644</fileMode>
<includes>
<!-- <include>application.yaml</include>-->
<include>application-${profileActive}.yaml</include>
<!-- <include>mapper/**/*.xml</include>-->
<!-- <include>static/**</include>-->
<!-- <include>templates/**</include>-->
<include>*.xml</include>
<!-- <include>*.properties</include>-->
</includes>
</fileSet>
<fileSet>
<directory>${basedir}/target/classes</directory>
<outputDirectory>config</outputDirectory>
<fileMode>0644</fileMode>
<includes>
<include>application.yaml</include>
</includes>
</fileSet>
<!-- 将项目启动jar打包到目录中 -->
<fileSet>
<directory>${basedir}/target</directory>
<fileMode>0755</fileMode>
<!-- 输出到当前目录 -->
<outputDirectory>.</outputDirectory>
<includes>
<include>${project.build.finalName}.jar</include>
</includes>
</fileSet>
<!-- 包含根目录下的文件 -->
<fileSet>
<directory>${basedir}</directory>
<includes>
<!-- <include>NOTICE</include>-->
<!-- <include>LICENSE</include>-->
<!-- <include>*.md</include>-->
<include>README.md</include>
</includes>
</fileSet>
<!-- 复制前端文件 -->
<fileSet>
<directory>${basedir}/web</directory>
</fileSet>
</fileSets>
</assembly>
第三步 在项目pom.xml
中增加maven profiles
配置
<!-- 1:local(默认) 本地 2:dev 开发环境 3:test 测试环境 4:uat 用户验收测试 5.pro:生产环境-->
<profiles>
<profile>
<id>local</id>
<properties>
<profileActive>local</profileActive>
</properties>
<activation>
<!-- 配置为默认值 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>
第四步 修改项目中application.yaml
的激活为@profileActive@
spring:
profiles:
# maven启用的profile,默认是local
active: @profileActive@
项目打包
方式一 使用IDEA工具打包,选择对应的profiles,然后clean package
方式二 使用maven命令打包
mvn clean package
mvn clean package -P prod -DskipTests
mvn clean package -Pprod
mvn clean package -DprofileActive=prod
// 等价于第一个命令
mvn clean package -P local
部署
打包local后会在target目录下生成压缩包
easyAdmin-local-1.0.0.zip
easyAdmin-local-1.0.0.tar.gz
linux解压zip或者tar.gz
upzip easyAdmin-local-1.0.0.zip
tar -zxvf easyAdmin-local-1.0.0.tar.gz
解压后目录
easyAdmin
│ README.md
| easyAdmin.jar
│ run.sh
├─ logs
│
├─ config
│ │ application-local.yml
│ │ application.yml
│ │ logback.xml
│
└─ web
└─ admin
└─ admin
└─ component
└─ config
| pear.config.yml
└─ view
└─ flow
└─ sys
index.html
login.html
启动
sh run.sh start 启动服务
sh run.sh stop 停止服务
sh run.sh restart 重启服务
验证
在浏览器访问地址:http://ip:8080/admin/login.html
整体配置源码参见
https://gitee.com/lakernote/easy-admin
参考
- https://github.com/geekidea/spring-boot-assembly