`
tjuxiaoqiang
  • 浏览: 25913 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于maven插件的配置管理

阅读更多
[/size]对于java程序员来说各种各样的配置文件是司空见惯的,比如spring的bean配置,struts的action配置等等。有些配置会随着运行环境的变化而各不相同,最典型的就是jdbc驱动的配置,在开发环境可能链接到开发本地的数据库,测试环境则有一套测试专用的数据库环境,线上的生产环境也会有一套数据库,如果一个应用要部署到多个idc中,那这些配置又有可能各不相同。解决这个问题,可能有些团队使用同一份配置文件,在部署到不同的环境之前人肉的修改一下配置,还有些团队会为每一个环境维护一份配置文件。这些做法都比较容易出错,而且随着环境的增多成本会线性地增长。

本文通过一个示例简单介绍一个自动化的配置工具autoconfig。autoconfig使用一套配置模板,为不同的环境生成相应的具体配置。它的核心思想是把一些可变的配置定义为一个模板,在autoconfig运行的时候从这些模板中生成具体的配置文件。autoconfig支持两种运行方式,第一种是作为普通的java应用程序从命令行来调用,另一种是作为maven的插件来运行。本文通过一个maven项目展示一下如何在maven中使用autoconfig。

autoconfig是一个淘宝开源的web框架webx的一个工具包,svn地址为 http://code.taobao.org/svn/webx/citrus-tool/trunk/,使用之前先checkout源代码本地安装一下,当然感兴趣的同学也可已研究一下它的源代码。安装非常简单,在checkout的源代码的根目录下运行 mvn clean install -Dmaven.test.skip。由于autoconfig使用maven build,安装之前必须先安装maven,不知到如何安装maven的同学可以google一下。

首先通过maven新建一个普通的java项目,运行下面这个命令,敲几个回车就能通过maven创建一个普通的java应用程序项目。

mvn archetype:generate -DgroupId=net.kiminotes -DartifactId=autoconfig -Dpackage=net.kiminotes

先删除maven自动创建的一些java源代码 find . -name *.java -exec rm \{} \; (这是linux下的一个工具,使用windows的同学可以通过资源管理器来删除)。创建一个简单的java类 Main,类中只有一个main方法,这个方法读取一个配置文件,并在控制台输出整个配置文件,代码如下。

Java代码 
package net.kiminotes;  
  
import java.util.Properties;  
import java.io.InputStream;  
  
  
public class Main {  
    public static void main( String[] args ) throws Exception {  
        InputStream is = Main.class.getClassLoader().getResourceAsStream( "config.properties" );  
        if ( is == null ) {  
            System.err.println( "Can not load config resource config.properties in classpath" );  
        } else {  
            Properties prop = new Properties();  
            prop.load( is );  
            is.close();  
            for( String key : prop.stringPropertyNames() ) {  
                String value = prop.getProperty( key );  
                if ( value != null ) {  
                    System.out.printf( "%s = %s %n", key, value );  
                }  
            }  
        }  
    }  
}  


从代码中可以看到实现的功能非常简单:从classpath中读取配置文件config.properties,然后输出到控制台。

接下来创建antoconfig的描述文件auto-config.xml以及配置文件config.properties的模板config.properties.vm。

config.properties的模板内容如下,它只有一行配置。

Java代码 
  
key = ${net_kiminotes_value}  


antoconfig的描述文件auto-config.xml内容如下。

Xml代码 
<config>  
    <group>  
        <property name="net.kiminotes.value" />  
    </group>  
  
    <script>  
        <generate template="config.properties.vm" destfile="config.properties" charset="utf-8" />  
    </script>  
</config>  


property元素定义了一个需要autoconfig配置的属性 net.kiminotes.value。group元素把不同类库的property进行分组,这里仅配置了一个group。generate定义了一个配置文件生成策略,template属性定义了配置文件的的模板,destfile定义了生成后配置文件的存放位置。

注: 有人或许会感觉迷惑,在模板文件config.properties.vm中,需要被替换的明明是net_kiminotes_value,为什么在auto-config.xml文件中会定义属性 net.kiminotes.value 呢?现在只需要记住属性名中的点在autoconfig执行的时候会被替换成下划线,具体原因会在后续的blog中解释。

最后在pom中配置一下maven autoconfig插件,整个pom文件如下。

Xml代码 
<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>  
  
  <groupId>net.kiminotes</groupId>  
  <artifactId>autoconfig</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>jar</packaging>  
  
  <build>  
<plugins>  
<plugin>  
<groupId>com.alibaba.citrus.tool</groupId>  
<artifactId>maven-autoconfig-plugin</artifactId>  
<version>1.0.9</version>  
<executions>  
<!-- 配置在package phase中运行maven-autoconfig-plugin的autoconfig goal -->  
<execution>  
<id>config</id>  
<goals>  
<goal>autoconfig</goal>  
</goals>  
<phase>package</phase>  
</execution>  
</executions>  
</plugin>  
<plugin>  
<artifactId>maven-jar-plugin</artifactId>  
<configuration>  
<archive>  
<!-- 打出的jar包中的 MANIFEST.MF 文件中增加 Main-Class 这一项配置,这样就能在命令行中通过 java -jar 来执行打出的jar包 -->  
<manifestEntries>  
<Main-Class>net.kiminotes.Main</Main-Class>  
</manifestEntries>  
</archive>  
</configuration>  
</plugin>  
<plugin>  
<groupId>org.apache.maven.plugins</groupId>  
<artifactId>maven-compiler-plugin</artifactId>  
<version>2.3.2</version>  
<configuration>  
<target>1.6</target>  
<source>1.6</source>  
</configuration>  
</plugin>  
</plugins>  
  </build>  
</project>  


如果看不明白上面pom中插件的配置可以参加maven相关的一些书籍。

在配置文件的模板 config.properties.vm 中有一个配置变量 ${net_kiminotes_value} 在执行autoconfig的时候需要被替换,那怎么给这个配置项赋值呢?autoconfig提供了两种方式来给配置变量赋值第一从java属性文件中读取第二是交互式地编辑。autoconfig首先读取当前工作目录的antx.properties文件,如果没有则读取${user.home}/antx.properties文件,如果这个文件也不存在,autoconfig就会启动交互式编辑器请求用户输入配置变量的值,如果配置变量的值是不完整的autoconfig则会立即停止配置并抛出一个异常。如果java属性文件的位置不在autoconfig默认的位置可以通过参数autoconfig.userProperties进行配置。处于简单其间,我们在当前目录新建一个java属性文件antx.properties,这个文件中定义了配置变量${net_kiminotes_value}的值。antx.properties 文件的内容如下。

net.kiminotes.value = hello, world

整个项目的结构如下所示:



下面运行maven来build这个项目。运行 mvn package,在target目录下生成一个jar包autoconfig-1.0-SNAPSHOT.jar,运行这个jar包。



本文介绍了一个自动化的配置工具autoconfig,虽然它能解决部署前的软件配置问题,但它同样有一个很关键的问题,与ide没有任何集成,给开发以及单元测试带来一定的麻烦,这就要靠各个使用者开动脑筋来解决这个问题了。 [size=medium]
分享到:
评论

相关推荐

    Myeclipse6.5的Maven插件

    4. **配置管理**:Maven的`pom.xml`文件是项目的核心配置文件,插件提供图形化的界面,方便编辑和管理`pom.xml`,包括添加、删除和管理依赖,设置插件配置等。 5. **版本控制**:Maven插件支持与Git、SVN等版本控制...

    (快嘉代码生成Maven插件) 基于maven插件实现

    【快嘉代码生成Maven插件】是一种专为提高研发效率而设计的开发工具,它基于流行的Maven构建系统,并且特别关注接口测试自动化。这个插件的核心功能是能够根据用户提供的自定义接口文档,自动地生成基于TestNG测试...

    apache-maven插件

    Apache Maven 是一个强大的项目管理工具,它基于项目对象模型..."apache-maven插件"特别提到了Maven的插件配置,这是Maven实现特定功能的关键部分。通过正确配置,如设置私服地址,开发者可以更高效地管理和部署项目。

    jenkins 必装maven插件

    在Jenkins中,Maven插件扮演着至关重要的角色,它使得基于Maven构建的项目能够无缝地与Jenkins集成,实现自动化构建流程。 一、Jenkins与Maven的结合 1. **Maven简介**:Apache Maven是一个项目管理和综合工具,它...

    eclipse的maven插件

    Eclipse的Maven插件是开发环境中不可或缺的一部分,它使得在Eclipse IDE中管理Maven项目变得简单而高效。Maven是一种项目管理和综合工具,基于约定优于配置的原则,用于自动化构建、依赖管理和项目信息管理。它通过...

    eclipse4.5 mars 64位 自带Maven插件

    2. **依赖管理**:在Eclipse中,可以通过Maven插件管理项目的依赖关系,添加、删除或更新依赖项,插件会自动下载库文件到本地Maven仓库。 3. **构建与清理**:Eclipse Mars内置的Maven插件支持执行`mvn clean`、`mvn...

    maven插件for eclipse

    Maven插件是Eclipse集成开发环境中的一个重要组成部分,它使得开发者能够轻松地在Eclipse中管理Maven项目,进行构建、依赖管理和测试等任务。Maven是一个强大的项目管理和构建工具,广泛应用于Java开发领域,通过...

    eclipse maven插件

    Eclipse Maven插件是开发人员在Eclipse IDE中管理和构建Maven项目的重要工具。它集成了Maven的构建生命周期和项目对象模型(POM),使得用户可以在Eclipse环境中方便地执行Maven的目标,如编译、测试、打包、部署等...

    手动快速在myeclipse上安装maven插件

    通过以上步骤,你就成功地在MyEclipse中手动安装并配置了Maven插件,可以方便地进行Maven项目的开发和管理。记得定期更新Maven和MyEclipse,以获取最新的特性和修复。此外,掌握Maven的POM.xml配置技巧,以及如何...

    maven插件 免费

    Maven插件是构建Java项目的重要工具,特别是在MyEclipse集成开发环境中,它的使用极大地简化了项目的构建、管理和部署过程。Maven是一个项目管理工具,它遵循约定优于配置的原则,通过一个项目对象模型(Project ...

    Eclipse中Maven插件

    8. **插件管理**:Maven的强大之处在于其丰富的插件生态系统,通过POM文件可以配置使用特定的Maven插件,如Surefire Plugin用于运行单元测试,Failsafe Plugin用于集成测试。Eclipse插件提供了方便的插件管理界面,...

    Maven安装与MyElipse8.5安装Maven插件

    3. **卸载MyEclipse内置Maven插件**:首先需要进入Help -&gt; MyEclipse Configuration Center -&gt; Software,找到MavenSupport for MyEclipse插件并选择remove,然后点击应用按钮执行更新操作。 4. **添加m2e插件**:...

    maven 安装配置手册

    讲解了如何选择和配置合适的Maven插件,以及如何自定义插件的目标和参数,以适应特定的构建需求。 综上所述,Maven作为一款强大的项目构建工具,不仅简化了Java项目的构建流程,还提供了丰富的插件生态系统,使得...

    eclipse中Maven安装插件和maven.zip

    总结一下,Eclipse中的Maven插件让开发者能够方便地在IDE内管理Maven项目,而不用离开Eclipse去执行命令行操作。通过正确安装和配置插件,以及理解Maven的基本概念和操作,可以大大提高开发效率,减少项目管理的复杂...

    maven插件

    Maven插件的源码通常基于Java编写,利用Maven插件API来实现目标功能。通过阅读源码,我们可以更好地了解插件的内部机制,定制插件行为,或者创建自己的插件。 总结,Maven插件是Maven构建系统的核心部分,它们执行...

    maven插件安装以及eclipse安装maven插件的资料

    Maven是Java开发中的一款重要构建工具,它管理项目依赖、构建流程,并且提供了一套标准的方式来组织...通过正确安装和配置Maven及Eclipse的Maven插件,开发者可以更专注于编写代码,而无需关心构建和依赖管理的复杂性。

    apache-maven的插件包:apache-maven-3.3.9-bin.zip

    Maven 的插件系统是其核心功能之一,允许开发者通过安装和配置各种插件来扩展Maven的功能。 标题中的"apache-maven-3.3.9-bin.zip"是一个包含Apache Maven 3.3.9版本的二进制发行包。这个版本发布于2015年,是Maven...

Global site tag (gtag.js) - Google Analytics