maven打包根据不同的配置生成不同的jar包名

Posted 沛沛老爹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven打包根据不同的配置生成不同的jar包名相关的知识,希望对你有一定的参考价值。

背景

在资源有限的时候,我们希望可以在一台服务器上挂载多个环境。例如测试环境,开发环境。

土豪就不要问为什么了....

一般的提议都是有两种方式:

1、使用docker镜像,进行虚拟划分。这样做的好处是可以分别运行在不同的环境,但是问题就是配置繁琐,每个都需要配置。工作量还是不小。

2、使用不同的包名。资源可以共享,只要一个配置包就可以搞定了。但是问题的是打包的时候需要分别打不同的包,否则启动还是比较麻烦。

如果一个jar包,可以根据配置文件,我们可以打出不同后缀的包,是不是就可以解决这个问题了呢?

下面我们讲下如何使用maven根据不同的环境配置,打出不同名字的包。

如何打不同的包

了解下打包原理

在maven中,所有的操作命令都是依赖pom.xml文件中的配置。

所以,打包这个命令也是在pom.xml中。我们先看下pom.xml常见格式。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent> 
    </parent>

    <artifactId>XX.XX.XX</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties> 
    </properties>

    <dependencies> 
    </dependencies>

    <profiles> 
    </profiles>

    <build>
    </build>
</project>

我们可以看到,在pom.xml文件中有个build一级属性。

这个命令就是用来进行编译打包使用 的。

在这个属性节点下,有个fileName属性,这个里面的内容XX就是生成后的jar包名

 <finalName>XX</finalName>

既然找到对应的生成包名的节点了,那么修改就简单多了,只是需要根据条件,把包名进行拼接就可以了。

如何打不同的包名

顺便提醒下,pom文件是可以使用变量来操作的。

格式如下

$变量名

那这样操作就简单多了

生成不同包名的解决思路

 <finalName>XX-$变量名</finalName>

理论是没有问题了,那么剩下的就是怎么和profile关联起来了

包名如何和配置文件关联

这步相对比较简单,我们只要把变量名和对应的变量名扯上关系就可以了。

    <profiles> 
        <id>local</id>
        <properties>
            <--变量名-->
            <jarName>local</jarName>  
        </properties>
    </profiles>

在这里我们定义了变量名jarName(这个名字看你喜欢,随便取)。

然后

 <finalName>XX-$jarName</finalName>

这就完成了。profile这个地方不细讲,和这个问题关联不是很大。有兴趣的可以自己百度。

总结

这个地方最重要的是对pom文件的一些操作命令需要比较熟悉,然后其他的就相对来说比较简单了。

以上是关于maven打包根据不同的配置生成不同的jar包名的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip

maven根据不同的environment打包配置

maven的动态打包功能

maven根据不同环境打包不同文件

maven项目如何打包

Jenkins+maven动态打包配置文件