用Mavne的autoconfig插件替换filter配置

我们的项目一直是maven维护的,以前都是自己开发自己打包发布的,最近要接入自动的打包系统,所以要对原有的项目进行一些改造,比如最头疼的是,以前一套环境多套代码我们是用filter文件加profile来控制的,打包的时候mvn 加上-P 参数,但是自动打包系统最要命的是不支持-P参数。

这里简单的介绍下maven的filter机制,maven的配置如下:这里简单的说下,filter节点是用来定义默认的属性文件的,resource用来定义要替换节点的文件夹,profiles定义了一系列的不同环境的profile文件,其中ID可以在打包的使用用-P指定相应的特定文件。

 <build>
        <finalName>XXX</finalName>
        <filters>
            <filter>filter/dev-filter.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
        
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>dev</id>
            <build>
                <filters>
                    <filter>filter/dev-filter.properties</filter>
                </filters>
            </build>
        </profile>

        <!--profile for testing -->
        <profile>
            <id>test</id>
            <build>
                <filters>
                    <filter>filter/test-filter.properties</filter>
                </filters>
            </build>
        </profile>
        <!--profile for testing -->
        <profile>
            <id>prod</id>
            <build>
                <filters>
                    <filter>filter/prod-filter.properties</filter>
                </filters>
            </build>
        </profile>
       
    </profiles>

接下来就是研究autoconfig的使用了,autocofig是webx的一个子项目,可以参考下这里http://openwebx.org/docs/autoconfig.html#d0e17190

由于是淘宝自己的开源项目,所以大家用的比较少,我这里也不扒其中的细节了,我就简单的讲下他的原理吧,autocofing是继承在package这个过程中的一个插件,他会自动读取autocofing配置文件中的配置值并将autocofing下的模板文件中的替换符自动替换,并将其按照autoconfig的配置的位置打到对应的文件中。

auto-config文件要放到webapp下的META-INF下

mavne的plugin配置如下:

 <!--autoconfig插件-->
            <plugin>
            <groupId>com.alibaba.citrus.tool</groupId>
            <artifactId>autoconfig-maven-plugin</artifactId>
            <version>1.2</version>
            <configuration>
            <!-- 要进行AutoConfig的目标文件,默认为${project.artifact.file}。
            <dest>${project.artifact.file}</dest>
            -->
            <!-- 配置后,是否展开目标文件,默认为false,不展开。
            <exploding>true</exploding>
            -->
            <!-- 展开到指定目录,默认为${project.build.directory}/${project.build.finalName}。
            <explodedDirectory>
            ${project.build.directory}/${project.build.finalName}
            </explodedDirectory>
            -->
            </configuration>
            <executions>
            <execution>
            <phase>package</phase>
            <goals>
            <goal>autoconfig</goal>
            </goals>
            </execution>
            </executions>
            </plugin>

其中autocofing的配置格式如下:

<config description="自动配置:aden-bundle-war">
    <group name="XXX-war">
        <!--基本配置-->
        <property name="XXX_environment" defaultValue="daily" description="所属环境:daily,test,prod" />
        <property name="XXX_url" defaultValue="http://localhost:8082" description="默认地址"/>
        <!--webxml的配置-->
        <property name="sso_server_url" defaultValue="https://login-test.XXX.com" description="登陆URL"/>
        <property name="sso_client_key" defaultValue="XXX" description="登陆KEY"/>
        <!--log4j的配置-->
        <property name="log_dir" defaultValue="/home/admin/app/logs" description="log4j的目录"/>
        <property name="log_stdout.level" defaultValue="debug" description="log4j的数据级别"/>
        <property name="log_level" defaultValue="debug" description="log4j的数据级别"/>
        <property name="log_appname" defaultValue="XXX" description="log4j的appname"/>
        <!--quarz配置-->
        <property name="thread_pool_size" defaultValue="5" description="threadpool"/>
        <!--commmonpropeties-->
        <property name="jdbc_url" defaultValue="jdbc:oracle:thin:@xxx:1521:xxx" description="" />
        <property name="jdbc_username" defaultValue="xxx" description="" />
        <property name="jdbc_password" defaultValue="xxx" description="" />
        <property name="jdbc_password_key" defaultValue="xxx" description="" />
    </group>
    <script>
        <generate template="web.xml.vm" destfile="WEB-INF/web.xml" charset="UTF-8"/>
        <generate template="log4j.xml.vm" destfile="WEB-INF/log4j.xml" charset="UTF-8"/>
        <generate template="quartz.properties.vm" destfile="WEB-INF/quartz.properties" charset="UTF-8"/>
        <generate template="commons.properties.vm" destfile="WEB-INF/commons.properties" charset="UTF-8"/>
    </script>
</config>

其中vm文件中的属性可以用${XXX}来表示

好了,准备工作就ok了,这时候当执行mvn clean package的时候就会触发autocofing了。

首先会提示你是否更新相关的antx.propertis这个文件会记录所有的属性配置,并用其替换模板文件中的变量

用Mavne的autoconfig插件替换filter配置_第1张图片

autocofing的好处之一是会校验熟悉的值,并及时发现空值。这里autocofing是默认不支持空值的。这一天比filter强多了,fitler的最大弱点是不会校验属性的合法性,autocofig还会根据规则判断value值。

最后继续就可以了,相关的变量参数都会自动替换。

另外有几点要强调的

1./META-INF/autoconf目录用来存放AutoConfig的描述文件,以及可选的模板文件

2.auto-config.xml是用来指导AutoConfig行为的关键描述文件。

3.autoconf目录及文件要放到webapp目录下面;


你可能感兴趣的:(用Mavne的autoconfig插件替换filter配置)