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

news2024/9/22 17:32:19

文章目录

    • 背景
    • 目录
      • 源码目录
      • 结果目录
    • 实现
    • 项目打包
      • 方式一 使用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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java版电子招投标系统源码之了解电子招标投标全流程

随着各级政府部门的大力推进&#xff0c;以及国内互联网的建设&#xff0c;电子招投标已经逐渐成为国内主流的招标投标方式&#xff0c;但是依然有很多人对电子招投标的流程不够了解&#xff0c;在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同&#xff0…

感应开关盖垃圾桶项目实现.md

1.项目接线 接线示意图和实物图 示意图和接线说明&#xff1a; 舵机控制口P1.1&#xff08;定时器0中断&#xff09;&#xff1b;超声波Trig接P1.5 ,Echo接P1.4 &#xff1b;蜂鸣器接P2.0 口;震动传感器接P3.2 口&#xff08;外部中断0&#xff09;。 实物图&#xff08;未封装…

室内人员定位,硬件部署方案多场景技术分析

室内外定位技术在工业、矿业、医疗养老、能源电力、展览展会、公检法司、工地等众多领域具有丰富的应用场景。定位能力作为“物联网”的核心能力之一&#xff0c;其定位精度和稳定性不仅需要强大的算法支撑&#xff0c;也有赖于好的室内定位设备的落地部署。 基于蓝牙LoRa定位…

MySQL按照,库的操作,表的约束 --- MySQL总结(一)

MySQL 文章目录 MySQLMySQL的安装MySQL组成架构连接池软件层引擎层储存层 库的操作创建库修改数据库删除数据库备份数据库还原数据库查看链接情况 表操作创建表查看表结构修改表结构添加字段修改字段类型长度更改表名修改属性删除表 数据类型表的约束空属性&#xff08;not nul…

typescript全局安装卸载以及npm相关问题

全局安装 npm install -g typescript 全局安装之后&#xff0c;如果想要卸载要使用 npm uninstall -g typescript 全局安装之后可以在终端使用 tsc xxx 编译ts文件 本地安装&#xff0c;也就是在项目目录下安装 npm install typescript 本地卸载 npm uninstall type…

【LeetCode】刷题数据结构(1)[反转链表]

【LeetCode】刷题数据结构&#xff08;1&#xff09; 1.题目来源2.题目描述3.解题思路4.代码展示 所属专栏&#xff1a;玩转数据结构题型 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyang785 感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持&#xff01;&…

Elasticsearch ILM DSL 索引生命周期管理

1、冷热集群架构 冷热架构也叫冷暖架构&#xff0c;是“Hot-Warm” Architecture的中文翻译。 冷热架构本质是给节点设置不同的属性&#xff0c;让每个节点具备了不同的属性。为演示 ILM&#xff0c;需要首先配置冷热架构&#xff0c;三个节点在 elasticsearch.yml 分别设置的…

4月21号软件更新资讯合集.....

PlayEdu v1.0-beta.3 发布&#xff0c;视频培训解决方案 PlayEdu 是基于 SpringBoot3 Java17 React18 开发的企业内部培训系统。它专注于提供私有化部署方案&#xff0c;包括视频&#xff0c;图片等资源的内网部署。目前主要支持有本地视频上传播放、学员邮箱登录、无限级部门…

如何使用JMeter和Ant生成高效测试报告?

Jmeter接口自动化测试项目实战视频教程地址&#xff1a;https://www.bilibili.com/video/BV1e44y1X78S/? 目录&#xff1a;导读 引言 一、安装ant 二、ant关联jmeter工具 三、执行 结语 引言 你曾经在进行软件测试时遇到过测试结果难以分析&#xff0c;甚至花费大量时间…

机器学习基础知识之相关性分析

文章目录 相关性分析定义1、图表相关性分析2、协方差分析3、相关系数分析4、回归分析 相关性分析定义 相关性分析一般是指通过对两种或两种以上的变量数据进行数学分析来确定两种或两种以上的变量数据之间的相关密切程度。由此定义我们可以得知相关性分析的目的在于衡量变量数…

算法leetcode|48. 旋转图像(rust重拳出击)

文章目录 48. 旋转图像&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 48. 旋转图像&#xff1a; 给定一个 n n 的二维矩…

我国风电叶片行业分析:行业技术创新白热化竞争来临 后续回收再利用是行业可持续发展的关键

1、风电叶片行业定义及产业链 风电叶片是一个复合材料制成的薄壳结构&#xff0c;一般由外壳、腹板和主梁三部分组成&#xff0c;复合材料在整个风电叶片中的重量一般占到90%以上。风电叶片是风力发电机将风能转化为机械能的重要部件之一&#xff0c;其设计、制造及运行状态直…

易点易动设备管理系统帮助钢铁厂实现智能设备巡检

随着工业自动化和智能化的不断推进&#xff0c;越来越多的企业开始采用智能设备来提高生产效率和质量。然而&#xff0c;随之而来的是设备管理的复杂性和挑战性的增加。为了解决这一问题&#xff0c;易点易动设备管理系统应运而生&#xff0c;该系统可以帮助钢铁厂实现智能设备…

从C出发 28 --- 指针与数组

int a[ ] {1, 2, 3, 4, 0}; //定义了一个数组&#xff0c;这个数组有5个元素&#xff0c;每个元素是一个 int 类型变量 这里的地址是相同的&#xff0c;是相同的意味着数组的地址和 0 号元素的地址是一样的 结论: 数值上相同但是意义上不同&#xff0c;一个是数组整体…

有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定

俯拍相机中心和吸嘴中心的标定 文章目录 俯拍相机中心和吸嘴中心的标定 前言适用模型如下&#xff1a;一、使用一个标定片进行标定1.关键注意&#xff1a;2.标定步骤&#xff1a; 二、使用一个L型的工件1.关键注意&#xff1a;2.标定步骤&#xff1a; 总结 前言 在自动化设备领…

centos7查看磁盘io

1.查看所使用到的命令为iostat&#xff0c;centos7没有自带iostat&#xff0c;需要安装一下 2.安装iostat命令 yum -y install sysstat 3.使用iostat命令 iostat %user&#xff1a;表示用户空间进程使用 CPU 时间的百分比 %nice&#xff1a;表示用户空间进程以降低优先级的…

索引失效了?看看这几个常见的原因

索引是 MySQL 数据库中优化查询性能的重要工具&#xff0c;通过对查询条件和表数据的索引&#xff0c;MySQL可以快速定位数据&#xff0c;提高查询效率。但是&#xff0c;在实际的数据库开发和维护中&#xff0c;我们经常会遇到一些情况&#xff0c;导致索引失效&#xff0c;从…

Vue安装

Vue安装 一、安装二、使用步骤1.在项目中使用vue2.使用命令创建vue项目 一、安装 安装vue之前需要安装nodeJS 1.需要安装Node.js。可以从官方网站进行下载并安装。 2.这篇博客有详细的步骤 Node.js安装详解 3.或者在官网安装最新版本的不用配置Node.js下载官网 安装完成Nod…

Python每日一练(20230424)

目录 1. 滑动窗口最大值 &#x1f31f;&#x1f31f;&#x1f31f; 2. 用栈实现队列 &#x1f31f; 3. 直线上最多的点数 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一…

准确率,精确率,召回率,F1,AUC

以西瓜数据集为例&#xff0c;我们来详细解释一下什么是TP、TN、FP以及FN。 一、基础概念 TP&#xff1a;被模型预测为正类的正样本 TN&#xff1a;被模型预测为负类的负样本 FP&#xff1a;被模型预测为正类的负样本 FN&#xff1a;被模型预测为负类的正样本 二、通俗理解&am…