几种Maven自动替换配置插件

话不多说,直接进入正题,简单介绍几种常用的Maven打包时配置文件替换的插件:

1.portable-config-maven-plugin

这个使用起来特别简单,首先添加Maven依赖(在<plugins>…</plugins>中添加):

<!-- portable config -->
<plugin>
    <groupId>com.juvenxu.portable-config-maven-plugin</groupId>
    <artifactId>portable-config-maven-plugin</artifactId>
    <version>1.1.5</version>
    <executions>
        <execution>
            <goals>
                <goal>replace-package</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <portableConfig>${portableConfig}</portableConfig>
    </configuration>
</plugin>

然后在<profiles>…<profils>中添加配置:

<profiles>
    <!-- 测试配置文件所在路径 -->
    <profile>
        <id>test</id>
        <properties>
            <portableConfig>src/main/portable/test.xml</portableConfig>
        </properties>
    </profile>
    
    <!--生产配置文件所在路径 -->
    <profile>
        <id>production</id>
        <properties>
            <portableConfig>src/main/portable/production.xml</portableConfig>
        </properties>
    </profile>
</profiles>

至此pom.xml文件中的配置都已经完成了。

下面我们看看,production.xml中的配置文件格式:

<?xml version="1.0" encoding="utf-8" ?>
<!-- 测试环境配置。节点特定配置通过JVM参数配置,如-Dserver.node_name=test-app0 -->
<portable-config>
    <config-file path="WEB-INF/classes/application.properties">
        <replace key="jdbc.driver">数据库驱动类</replace>
        <replace key="jdbc.url">数据库链接的url</replace>
        <replace key="jdbc.username">数据库用户名</replace>
        <replace key="jdbc.password">用户密码</replace>
        <replace key="jdbc.pool.maxIdle">10</replace>
        <replace key="jdbc.pool.maxActive">150</replace>
        <replace key="profile">test</replace>
    </config-file>

    <!--替换日志级别 logback.xml-->
    <config-file path="WEB-INF/classes/logback.xml">
        <replace xpath="//appender[@class='ch.qos.logback.core.ConsoleAppender']/filter[@class='ch.qos.logback.classic.filter.ThresholdFilter']/level">OFF</replace>
        <replace xpath="//appender[@class='ch.qos.logback.core.rolling.RollingFileAppender']/filter[@class='ch.qos.logback.classic.filter.ThresholdFilter']/level">WARN</replace>
        <replace xpath="//logger[@name='com.june.life']/@level">WARN</replace>
        <replace xpath="//logger[@name='org.apache.shiro.authc.pam.ModularRealmAuthenticator']/@level">WARN</replace>
        <replace xpath="//logger[@name='com.june.life.shiro.session']/@level">WARN</replace>
        <replace xpath="//logger[@name='com.june.life.shiro.cache']/@level">WARN</replace>
        <replace xpath="//logger[@name='org.springframework.web']/@level">WARN</replace>
        <replace xpath="//root/@level">WARN</replace>
    </config-file>

</portable-config>

具体xpath的语法参考:http://www.aichengxu.com/view/598615

上面这些配置完成后,就可以直接使用maven命令进行打包了。如我想在测试环境下打一个war包,就可以使用下面的命令:
maven clean package -Ptest -DskipTests

2.autoconfig-maven-plugin

这是alibaba的一个打包插件,这个相对来说配置复杂一些,先看看maven中的配置:
同样在<plugs>…</plugs>中添加一个maven插件:

<!-- Maven 打包自动替换配置-->
<plugin>
    <groupId>com.alibaba.citrus.tool</groupId>
    <artifactId>autoconfig-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
        <userProperties>${env.properties}</userProperties>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>autoconfig</goal>
            </goals>
        </execution>
    </executions>
</plugin>

同样在<profiles></profiles>中添加:

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env.properties>src/main/conf/dev.properties</env.properties>
        </properties>
    </profile>

    <profile>
        <id>test</id>
        <properties>
            <env.properties>src/main/conf/test.properties</env.properties>
        </properties>
    </profile>
</profiles>

这是时候的dev.properties和test.properties的格式和application.properties的格式完全相同,只是参数值不同
至此,pom.xml中的配置就完成了

autoconfig这个插件打包时会自动找META_INF/autoconfig/auto-config.xml文件,下面贴出auto-config中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <group name="env">
        <property name="log.path"  defaultValue="../logs" description="日志存放目录" />
        <property name="db.url"    />
        <property name="db.username"    />
        <property name="db.password"    />
        <property name="db.driver"    />
        <property name="db.initialPoolSize"    />
        <property name="db.minPoolSize"    />
        <property name="db.maxPoolSize"    />
    </group>


    <script>
        <generate template="application.properties.vm" destfile="WEB-INF/classes/application.properties" charset="UTF-8"  />
    </script>
</config>

这个文件会替换模板文件指定的参数值,下面是模板文件application.properties.vm

db.url=${db.url}
db.username=${db.username}
db.password=${db.password}
db.driver=${db.driver}
db.initialPoolSize=${db.initialPoolSize}
db.minPoolSize=${db.minPoolSize}
db.maxPoolSize=${db.maxPoolSize}

至此所有替换配置都已经完成,打包时直接使用下面的maven命令就可以:
mvn clean package -Pdev -DskipTests

    原文作者:郭之源
    原文地址: https://www.jianshu.com/p/35124c2e4504
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞