您现在的位置是:首页 >技术教程 >从零搭建开发脚手架 自定义打包构建研发输出产物网站首页技术教程

从零搭建开发脚手架 自定义打包构建研发输出产物

lakernote 2023-06-11 16:00:02
简介从零搭建开发脚手架 自定义打包构建研发输出产物

背景

在打包项目时,通常只需要生成一个可执行的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

mvn-clean-package-local mvn-clean-package-dev

方式二 使用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
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。