`
tjuxiaoqiang
  • 浏览: 25189 次
  • 性别: 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]
分享到:
评论

相关推荐

    chm版本Maven教程

    Maven插件 Maven创建Java项目 使用Maven构建和测试Java项目 Maven外部依赖 Maven项目文档 Maven项目模板 Maven快照 Maven构建自动化 Maven依赖管理 Maven自动化部署 Maven Web应用 Eclispe IDE集成Maven NetBeans ...

    myeclipse的maven简单配置及使用说明

    myeclipse已经与maven开始集成,在myeclipse6.5或8.5 及以上里面有自带了maven插件,但本人还是比较习惯于用自己的maven,就像不喜欢用myeclipse自带的jdk与tomcat一样,这篇文档来自于互联网,配置过程当中发现一些...

    Maven实战 安装配置

    第2章 Maven的安装和配置7.2.1 在Windows上安装Maven8.2.2 在基于Unix的系统上安装Maven9.2.3 安装目录分析10.2.4 设置HTTP代理11.2.5 安装m2eclipse12.2.6 安装NetBeans Maven插件13.2.7 Maven安装最佳实践14.2.8 ...

    maven的安装和配置

    Apache Maven是一个很流行的软件项目管理和理解工具,它能够被用来构建和管理任何基于java的项目,主要有以下几个目标: • 简化构建过程 • 提供统一的构建系统 • 提供高质量的项目信息 • 鼓励更好的开发实践 ...

    maven:项目管理工具;安装、使用及配置

    Maven基于项目对象模型(Project Object Model,POM)来管理项目,通过定义一系列规范化的目录结构和配置文件来管理项目的构建过程和依赖关系。Maven的主要作用是提高Java项目的可维护性、可重用性和可扩展性。

    ApacheMaven(java项目管理工具)v3.6.1官方版(附Maven环境变量配置)

    它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑。Maven的缺省构建规则具有较高的可重用性,所以常常用两三行 Maven 构

    flyway-maven-plugin:Flyway Maven 插件

    flyway maven plugin 是基于flyway的的数据库脚本升级插件 使用方式 1. 在resources下创建application.propeties,存放数据库相关配置 #default表示数据源的名字 db.default.url=jdbc:mysql://127.0.0.1/resty-demo?...

    maven window下安装包

    第10章:使用Maven进行测试/10.8 打包测试代码/10.8.2 插件配置 第10章:使用Maven进行测试/10.8 打包测试代码/10.8.3 执行打包操作 第10章:使用Maven进行测试/10.8 打包测试代码/10.8.4 引用测试jar包 第11章:用...

    Maven介绍安装和配置详解

    它使用一种基于项目对象模型(POM)的概念,使得开发者能够使用一种统一的方式来管理项目的构建、报告和文档。 以下是Maven的一些主要特点和功能: 1. **项目对象模型(POM)**:Maven使用一个XML文件(pom.xml)...

    gradle-maven-publish-plugin,gradle插件,配置一个uploadarchives任务,自动将所有java、kotlin或android库上载到任何maven实例。.zip

    Gradle插件,创建一个UploadArchives任务,自动将所有Java、Kotlin或Android库上载到任何Maven实例。这个插件基于chris-banes的初始实现,并且已经被增强以添加kotlin支持并跟上最新的更改。

    Maven配置文档

    它内容新颖,基于最新发布的 Maven 3.0,不仅详尽讲解 了 Maven 3.0的所有新功能和新特性,而且还将这些新功能和新特性与 Maven 2.x版本进行了对比,以便于正在 使用 Maven 2.x版本的用户能更好地理解。本书它内容...

    Maven实战(高清版)

    maven的安装和配置2.1 在windows上安装maven2.1.1 检查jdk安装2.1.2 下载maven2.1.3 本地安装2.1.4 升级maven2.2 在基于unix的系统上安装maven2.2.1 下载和安装2.2.2 升级maven2.3 安装目录分析2.3.1 m2_...

    Maven实战- 入门

    第 2 章 Maven 的安装和配置 7. 2.1 在 Windows 上安装 Maven 8. 2.2 在基于 Unix 的系统上安装 Maven 9. 2.3 安装目录分析 10. 2.4 设置 HTTP 代理 11. 2.5 安装 m2eclipse 12. 2.6 安装 NetBeans Maven 插件 13. ...

    Maven是一个项目管理工具,它包含了一个对象模型 一组标准集合,一个依赖管理系统 和用来运行定义在生命周期阶段中插件目标和逻辑

    Maven的核心功能是合理叙述项目间的依赖关系,通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包,,这个pom.xml包我后面会叙述,不过已经学习过maven的 人... maven管理项目生命周期都是基于插件完成的

    xjar-maven-plugin:XJar-Maven-Plugin是对XJar的一个Maven插件封装,实现可通过Maven命令或绑定在Maven的生命周期之中执行,以更便捷的方式集成XJar

    XJar-Maven-Plugin是对的一个Maven插件封装,实现可通过Maven命令或绑定在Maven的生命周期之中执行,从而更加便捷的方式集成了 。 GitHub: : 什么是XJar XJar是基于对JAR包内部资源的加密以及扩展ClassLoader来...

    Maven功能介绍以及安装配置详解

    它使用一种基于项目对象模型(POM)的概念,使得开发者能够使用一种统一的方式来管理项目的构建、报告和文档。 以下是Maven的一些主要特点和功能: 项目对象模型(POM):Maven使用一个XML文件(pom.xml)来描述...

    基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台

    了解Maven的环境配置以及如何在项目中进行运用管理 目标二. 了解java框架技术,熟悉SSH框架搭建的全过程 目标三. 可以让学员迅速掌握JEasyUI的API及使用技巧 目标四. 可以让学员熟练使用JEasyUI快速构通富客户端...

    sshexec-maven-plugin:基于Jsch的ssh的文件上传和命令执行的Maven插件

    sshexec-maven-plugin 基于Jsch的ssh的文件上传和命令执行的插件 pom.xml配置

    crowd-maven-plugin:一个Maven插件,用于与Crowdin同步翻译

    Crowdin Maven插件 这个Maven插件使用Crowdin API在本地项目和Crowdin之间同步翻译文件。 它最初基于,但此后已被完全重写。 由于Git分支已转换为Crowdin分支,因此Maven项目必须位于Git存储库中。 目录 1.配置 该...

Global site tag (gtag.js) - Google Analytics