maven插件Maven-autoconfig-plugin

一、背景

a)   在整个软件工程生命周期中,一般会涉及到三个环境:开发环境,测试环境,线上环境,每个环境中涉及到的配置都会不一样,比如在开发过程中一般数据库会链接开发的数据库,一些功能性的验证都会线下搭建相应的环境进行开发调试,而测试过程中又会链接跟线上环境比较真实的另一套配置等等。

b)   在构建项目工程中,一般会将根据功能横向的划分为几个独立的子工程,或根据层次:数据层,业务层,展示层,将工程纵向的进行划分,实际中两者结合比较多。



 

Dao层:操作数据库这一层,获取数据,更新数据,插入数据,删除数据,但是这一层中基本不涉及到具体的业务逻辑,提供比较通用对数据库的操作。

BO层:业务逻辑层,对数据进行相应的业务逻辑操作,这一层中主要是封装了比较具体的业务逻辑操作。

Service层:对外提供了统一的接口,将具体的业务,数据进行统一封装,对外暴漏统一的服务。

应用层:一般主要的功能是展示,根据service获取的服务,数据进行处理,使得适合不同页面的展示。

一、作用

Autoconfig,插件的作用就是将上面两点结合起来,一方面可以根据功能,职责将应用进行合理的划分,另一方面,又可以根据不同的环境进行配置项的更换,使得同一套代码适合不同的应用场景。

二、原理

a)   主要依赖三种不同的文件,1autoconfig.xml文件,起到总控文件的作用,里面配置了需要哪些配置项、默认值,将那个模板文件生成为那个文件;2config.properties文件,保存了配置项的信息,当进行模板渲染的时候会先从里面获取值,如果没有则采用默认值或提示用户输入,然后将值保持到配置文件中;3、模板文件,需要渲染的文件,里面包含了需要根据不同环境进行设置不同值的变量

b)   插件工作过程:1、获取autoconfig.xml元数据信息,2、初始化配置项的值;3、渲染模板生成相应环境下的文件

c)   插件中有两个goals1autoconfig_compile,主要是对当前工程进行autoconfig2pre_intergation_test,主要是对整个war进行autoconfig,首先对classpath下的classes进行autoconfig,其实对lib下面的jar包进行相应的autoconfig

三、使用

a)   源码地址:https://autoconfig-maven-plugin.googlecode.com/svn/trunk

b)   Maven配置

<groupId>com.wutianyi.maven</groupId>

       <artifactId>maven-autoconfig-plugin</artifactId>

       <version>1.0.0</version>

       <executions>

           <execution>

              <id>autoconfig_compile</id>

              <goals>

                  <goal>

                      autoconfig_compile

                  </goal>

              </goals>

              <configuration>

              <!-- produce生产环境 -->

                  <mode>develop</mode>

              </configuration>

           </execution>

       </executions>

    </plugin>

c)   autoconfig_compile参数说明:

                     i.      mode:指定环境,也就是在配置项中默认增加了mode=value对应maven参数-Dautoconfig.mode

                     ii.      configXmlPath:指定要加载的总控文件autoconfig.xml的相对路径(相对于当前工程),默认user.dir/META-INF/autoconfig.xml。(-Dautoconfig.config_xml_path

                      iii.      configPropertiesPath:配置项文件,默认user.home/config.properties,可以指定具体的配置文件,必须是绝对路径。(-Dautoconfig.config_properties_path)

                       iv.      resourceLoadPath:模板文件存放的相对路径,默认user.dir/META-INF/(-Dautoconfig.resource_load_path)

d)   pre_intergation_test参数,相对上面的goals,这个的要求比较严格,对于warautoconfig的文件路径和jar中的文件路径指定不能够修改,必须符合规格才能够进行相应的autoconfig

                        i.      war中的autoconfig.xml,模板文件必需在META-INf目录下,jar中的必需在META-INF

                       ii.      warpath:需要autoconfigwar文件的路径,一般为${project.build.directory}/${project.build.finalName}.war,(-Dautoconfig.warpath

                       iii.      configPropertiesPath:

     补充,这种类似的插件已经有很多做得不错,我写这个插件不是原创,只是根据自己之前使用过的且根据自己的理解进行了重新的编写,纯属个人学习,如果有什么问题,欢迎与我交流,当然里面有很多不足的地方。

 

猜你喜欢

转载自wutianyi.iteye.com/blog/1087887