美文网首页
几种Maven自动替换配置插件

几种Maven自动替换配置插件

作者: 郭之源 | 来源:发表于2017-01-11 13:13 被阅读953次

    话不多说,直接进入正题,简单介绍几种常用的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

    相关文章

      网友评论

          本文标题:几种Maven自动替换配置插件

          本文链接:https://www.haomeiwen.com/subject/rdqlbttx.html