3.进阶

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.PRoperties-maven-plugin是个什么鬼?介绍前我们先看一个问题,比如我们有一个maven项目结构如下:

一般我们都把一些配置文件放到像src/main/resources/jdbc.properties这样的文件中。但是文件里我们更多的放的还是变量,内容如下:

jdbc.driverClassName=${jdbc.driverClassName}

jdbc.url=${jdbc.url}

jdbc.username=${jdbc.username}

jdbc.passWord=${jdbc.password}

jdbc.validationQuery=${jdbc.validationQuery}

具体的值我们会放到pom.xml中,用<properties>来配置,如下所示代码:

<?xml version="1.0" encoding="UTF-8"?>

<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>com.qyf404</groupId>

<artifactId>learn-maven</artifactId>

<version>1.0-SNAPSHOT</version>

<profiles></profiles>

<properties>

<jdbc.driverClassName>com.MySQL.jdbc.Driver</jdbc.driverClassName>

<jdbc.url>jdbc:mysql://localhost/stock?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true</jdbc.url>

<jdbc.username>root</jdbc.username>

<jdbc.password></jdbc.password>

<jdbc.validationQuery>SELECT 1 + 1</jdbc.validationQuery>

</properties>

<build>

<resources>

<resource>

<filtering>true</filtering>

<directory>${project.basedir}/src/main/resources</directory>

<includes>

<include>*.properties</include>

</includes>

</resource>

</resources>

</build>

</project>

按照上面的方式配置。我们执行mvn package后,在target/classes/jdbc.properties里可以看到配置文件被成功替换。

由于某些原因(比如配置文件项比较多,为了让pom.xml更精简),我们希望把这些配置项提取到一个properties文件中进行配置。

这时候就需要用到properties-maven-plugin了。properties-maven-plugin可以在执行maven命令时,读取指定properties文件中的配置项,来实现和pom.xml中配置<properties>一样的效果。

2.properties-maven-plugin怎么用?还拿上面的例子说,比如我们把pom.xml中的配置项放到一个全局的my.properties中。

profiles/dev/my.properties文件内容如下:

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost/stock?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true

jdbc.username=root

jdbc.password=

jdbc.validationQuery=SELECT 1 + 1

pom.xml我们把插件加进去,并把之前里面的配置项注释掉.

<?xml version="1.0" encoding="UTF-8"?>

<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>com.qyf404</groupId>

<artifactId>learn-maven</artifactId>

<version>1.0-SNAPSHOT</version>

<!--<properties>-->

<!--<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>-->

<!--<jdbc.url>jdbc:mysql://localhost/stock?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true</jdbc.url>-->

<!--<jdbc.username>root</jdbc.username>-->

<!--<jdbc.password></jdbc.password>-->

<!--<jdbc.validationQuery>SELECT 1 + 1</jdbc.validationQuery>-->

<!--</properties>-->

<build>

<resources>

<resource>

<filtering>true</filtering>

<directory>${project.basedir}/src/main/resources</directory>

<includes>

<include>*.properties</include>

</includes>

</resource>

</resources>

<plugins>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>properties-maven-plugin</artifactId>

<version>1.0-alpha-2</version>

<executions>

<execution>

<id>default-cli</id>

<phase>initialize</phase>

<goals>

<goal>read-project-properties</goal>

</goals>

<configuration>

<files>

<file>${user.dir}/profiles/dev/my.properties</file>

</files>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

</project>

我们执行mvn package后,在target/classes/jdbc.properties里可以看到配置文件被成功替换。

3.进阶把pom.xml里的配置项提取到properties文件中,这是properties-maven-plugin干的事情。但是我们用properties-maven-plugin要达到更好的效果。

想一个场景:

我们的项目有开发环境的配置,测试环境的配置;

而且开发环境是mysql数据库,测试环境是hsqldb数据库;

最后还要在一个文件中统一打印出配置项内容。我们可以通过maven的profile来配上properties-maven-plugin实现针对不同环境的快速打包。

我们把项目做个改造,结构如下:

profiles/dev/my.properties内容如下:

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost/stock?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true

jdbc.username=root

jdbc.password=

jdbc.validationQuery=SELECT 1 + 1

profiles/test/my.properties内容如下:

jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver

jdbc.url=jdbc:hsqldb:hsql://localhost/stocktest

jdbc.username=root

jdbc.password=

jdbc.validationQuery=SELECT 1 + 1

pom.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<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>com.qyf404</groupId>

<artifactId>learn-maven</artifactId>

<version>1.0-SNAPSHOT</version>

<!--<properties>-->

<!--<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>-->

<!--<jdbc.url>jdbc:mysql://localhost/stock?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true</jdbc.url>-->

<!--<jdbc.username>root</jdbc.username>-->

<!--<jdbc.password></jdbc.password>-->

<!--<jdbc.validationQuery>SELECT 1 + 1</jdbc.validationQuery>-->

<!--</properties>-->

<build>

<resources>

<resource>

<filtering>true</filtering>

<directory>${project.basedir}/src/main/resources</directory>

<includes>

<include>*.properties</include>

</includes>

</resource>

</resources>

<plugins>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>properties-maven-plugin</artifactId>

<version>1.0-alpha-2</version>

<executions>

<execution>

<id>default-cli</id>

<phase>initialize</phase>

<goals>

<goal>read-project-properties</goal>

<goal>write-project-properties</goal>

</goals>

<configuration>

<files>

<!--<file>${user.dir}/profiles/dev/my.properties</file>-->

<file>${user.dir}/profiles/${profile.id}/my.properties</file>

</files>

<!--输出全部配置项到指定文件-->

<outputFile>${build.directory}/profile.properties</outputFile>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

<profiles>

<profile>

<id>dev</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<profile.id>dev</profile.id>

</properties>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.31</version>

<scope>runtime</scope>

</dependency>

</dependencies>

</profile>

<profile>

<id>test</id>

<properties>

<profile.id>test</profile.id>

</properties>

<dependencies>

<dependency>

<groupId>org.hsqldb</groupId>

<artifactId>hsqldb</artifactId>

<version>2.2.6</version>

<scope>runtime</scope>

</dependency>

</dependencies>

</profile>

</profiles>

</project>

我们现在只需要执行命令mvn package -Pdev或者mvn package就可以打一个开发的包。

执行命令mvn package -Ptest就可以打一个测试用的包。

而且在target/profile.properties里查看项目打包的全部maven用到的配置项。内容如下:

#Properties

#Wed Sep 23 19:06:47 CST 2015

jdbc.url=jdbc\:mysql\://localhost/stock?createDatabaseIfNotExist\=true&amp;useUnicode\=true&amp;characterEncoding\=utf-8&amp;autoReconnect\=true

jdbc.username=root

jdbc.validationQuery=SELECT 1 + 1

jdbc.password=

profile.id=dev

jdbc.driverClassName=com.mysql.jdbc.Driver

示例代码github地址: https://github.com/qyf404/learn-maven/tree/properties-maven-plugin

更多关于properties-maven-plugin请参阅这里:http://www.mojohaus.org/properties-maven-plugin/index.html

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航