• 学习Maven之Properties Maven Plugin



    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

  • 相关阅读:
    数据库中的字段NULL值和''
    MySQL Notifier
    LeetCode算法题-Delete Node in a Linked List(Java实现)
    LeetCode算法题-Lowest Common Ancestor of a Binary Search Tree
    LeetCode算法题-Palindrome Linked List(Java实现)
    LeetCode算法题-Implement Queue Using Stacks(Java实现)
    LeetCode算法题-Power Of Two(Java实现)
    LeetCode算法题-Invert Binary Tree
    LeetCode算法题-Implement Stack Using Queues
    LeetCode算法题-Contains Duplicate II(Java实现)
  • 原文地址:https://www.cnblogs.com/qyf404/p/4833261.html
Copyright © 2020-2023  润新知