当前位置: 首页 > article >正文

如何利用maven更优雅的打包

最近在客户现场部署项目,有两套环境,无法连接互联网,两套环境之间也是完全隔离,于是问题就来了,每次都要远程到公司电脑改完代码,打包,通过网盘(如果没有会员,上传下载慢)或者远程工具传输,再用u盘拷贝到客户电脑,一个包400多Mb(所有的代码和依赖包以及配置文件都打在了一个jar包里面),传输一次10分钟,效率太低了,于是翻越资料找到一中更优雅的打包方式,每次只需要更新改过的包和配置文件即可,大大减少传输大小。

我们先看看nacos的压缩包解压开来的效果:

可以看到是一种很标准的打包方式,解压开来的文件夹都能够见名知意,下面是我改完maven打包方式之后的效果,实际过程中,也可以根据需要把脚本放到bin目录里面,只是我图简单,把停止和启动都写在了一个脚本里面,这么打包的好处是,后续改了代码和配置只需要替换相应的jar包和配置文件即可,而不用全量更新,我们自己写的代码jar包通常都是kb单位,远程桌面传输起来也很快:

conf:配置文件目录里面包含了logback配置文件,项目依赖的application.yml等配置文件:

lib:依赖的jar,包括第三方依赖包和自己项目里面的common,api等:

gisadmin-boot.jar:springboot启动类所在的jar包,start.sh启动脚本里面启动命令指定的就是这个jar

start.sh:启动脚本:

ps -ef | grep gisadmin-boot | grep -v grep | awk '{print $2}' | xargs -r kill -9

# 等待几秒以确保进程被正确杀死
sleep 2

# 确保日志目录存在
mkdir -p ./logs

# 绝对路径启动 Java
nohup java -Duser.timezone=Asia/Shanghai -Dfile.encoding=utf-8 -cp ./gisadmin-boot.jar com.daspatial.gis.EarthApplication  > ./logs/gisadmin.log 2>&1 &

sleep 2

下面就是关键的maven配置了(只写关键变更部分):

1、不同的环境,激活不同的配置:在maven打包命令执行的时候指定,比如mvn clean compile package -Pdev -DskipTests,其中-Pdev就是激活dev环境的配置

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>wutiegaw</id>
            <properties>
                <profileActive>wutiegaw</profileActive>
            </properties>
        </profile>
        <profile>
            <id>wutie</id>
            <properties>
                <profileActive>wutie</profileActive>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
        </profile>
    </profiles>

2、build节点配置:

<build>
        <!--最终打出来的包名-->
        <finalName>${project.artifactId}</finalName>
        <!--java代码源文件目录-->
        <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
        <!--资源文件目录,主要是配置文件,也就是src/main/resources目录-->
        <resources>
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <excludes>
                    <exclude>**/assembly.xml</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/env/${profileActive}</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <!--配置文件独立输出到conf目录-->
                            <Class-Path>conf/</Class-Path>
                        </manifestEntries>
                        <manifest>
                            <!--依赖包独立输出到lib目录-->
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                    <excludes>
                        <!--这里是为了防止配置文件被打进启动类所在的jar里面-->
                        <exclude>**/*.yml</exclude>
                        <exclude>**/*.xml</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <!--assembly插件配置文件-->
                        <descriptor>${basedir}/src/main/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

3、assembly插件配置文件assembly.xml:

<?xml version="1.0"?>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
    <id>${version}</id>
    <formats>
        <!-- zip,tar,tar.gz,tar.bz2,jar,dir,war -->
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <!--源代码中的bin目录输出到压缩包根目录-->
            <directoryMode>0777</directoryMode>
            <directory>${basedir}/src/bin</directory>
            <fileMode>0777</fileMode>
            <outputDirectory>.</outputDirectory>
            <lineEnding>unix</lineEnding>
        </fileSet>
        <fileSet>
            <!--激活的profile配置文件输出到conf目录-->
            <directory>${basedir}/src/main/env/${profileActive}</directory>
            <outputDirectory>conf</outputDirectory>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <!--logback配置文件输出到conf目录-->
            <source>${basedir}/src/main/resources/logback.xml</source>
            <outputDirectory>conf</outputDirectory>
        </file>
        <file>
            <source>${basedir}/src/main/resources/banner.txt</source>
            <outputDirectory>conf</outputDirectory>
        </file>
        <file>
            <!--启动类jar输出到压缩包根目录-->
            <source>${basedir}/target/${project.artifactId}.jar</source>
            <outputDirectory>.</outputDirectory>
        </file>
    </files>
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>true</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
            <excludes>
                <exclude>${project.groupId}:${project.artifactId}</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

项目目录结构如下:

改完之后可能会出现spring无法加载配置文件,只需要右键选中dev环境加入到资源目录即可,也就是默认激活dev环境配置:


http://www.kler.cn/a/534160.html

相关文章:

  • LabVIEW自定义测量参数怎么设置?
  • doris:临时分区
  • android 自定义通话录音
  • C++11详解(二) -- 引用折叠和完美转发
  • 深度学习中,文本分类任务怎么做
  • uniapp小程序自定义中间凸起样式底部tabbar
  • java 日常下拉框接口字典封装
  • DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求
  • 后缀表达式 C++ 蓝桥杯 栈
  • JVS低代码逻辑引擎多种业务场景触发案例配置:涵盖列表页按钮、表单数据、流程审批、外部API接口调用等
  • Cookie及Session---笔记
  • Java面试题基础篇3:10道基础面试题
  • 安装和卸载RabbitMQ
  • 基于Javascript的封装、方法重载、构造方法
  • 【ArcGIS Pro简介2】
  • 1. Kubernetes组成及常用命令
  • DeepSeek 与 ChatGPT 对比分析
  • Linux 常用命令与实战教程
  • HTTP请求响应周期步骤
  • 基于Ubuntu2404搭建Zabbix7.2
  • 1. 初识spark
  • 在 Spring Boot 项目中,bootstrap.yml 和 application.yml文件区别
  • 智慧楼宇的监控都用上3D形式了,2D要摒弃了。
  • 电脑开机提示按f1原因分析及终极解决方法来了
  • 【力扣】49.字母异位词分组
  • 消费kafka消息示例