Maven屬性(properties)標籤的使用

YatHo發表於2017-11-14
在命令列使用屬性時,是-D,比如:mvn -D input=test

Properties

屬性是瞭解POM基礎知識的最後一個要素。Maven屬性是值佔位符,如Ant中的屬性。它們的值可以通過使用符號${X}在POM中的任何位置訪問,其中X是屬性。

他們有五種不同的風格:

1、env.X:使用“env”來定義變數。將返回shell的環境變數。例如,${env.PATH}包含PATH環境變數。

注意:雖然環境變數本身在Windows上不區分大小寫,但查詢屬性區分大小寫。換句話說,雖然Windows shell為%PATH%%Path%返回相同的值,但Maven區分${env.PATH}${env.Path}。對於Maven 2.1.0,為了可靠性,環境變數的名稱被歸一化為所有大寫

2、project.x:POM中的點(.)記號路徑將包含相應元素的值。例如:可以通過${project.version}訪問<project><version>1.0</version></project>

3、settings.xsettings.xml中的點(.)標註路徑將包含相應的元素的值。例如:<settings><offline>false</offline></ settings>可通過${settings.offline}訪問。

4、Java系統屬性:可通過java.lang.System.getProperties()訪問的所有屬性都可用作POM屬性,如${java.home}

5、x:在POM中的<properties />元素中設定。<properties><someVar>value</someVar></properties>的值可以用作${someVar}

 

而在第2點中訪問pom.xml檔案的屬性時,其實還有一些內建的變數,如下:

${project.basedir}:這引用了module/project的根資料夾(當前pom.xml檔案所在的位置),還可以簡化的寫法:${basedir}

以上更多用法參考:http://maven.apache.org/ref/3.5.0/maven-model-builder/#Model_Interpolation

${project.build.directory}:這表示預設的target資料夾。

${project.build.outputDirectory}:預設情況下表示target/classes資料夾。

${project.build.testOutputDirectory}:這表示預設的target/test-classes資料夾。

${project.build.sourceDirectory}:這表示預設情況下src/main/java資料夾。

${project.build.testSourceDirectory}:這表示預設情況下src/test/java資料夾。

${project.build.finalName}:預設情況下定義為${project.artifactId}-${project.version}

${project.version}:這可以在必須編寫文字版本的位置使用,否則,特別是如果您在多模組構建模組間依賴關係。

${settings.localRepository}:它引用了本地儲存庫的位置。這是預設的${home}/.m2/repository

 

而針對第5點時應該是專案上最多使用的,比如以下為專案實踐的簡單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.jsoft.test</groupId>
    <artifactId>test-maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <profiles></profiles>
    <properties>
        <test.uuid>123</test.uuid>
        <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>123456</jdbc.password>
        <jdbc.validationQuery>SELECT 1 + 1</jdbc.validationQuery>
    </properties>
    <build>
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>${project.basedir}/src/main/resources/${test.uuid}</directory>
                <includes>
                    <include>*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
複製程式碼

可以看出只要在properties節點配置了自定義屬性即可在任意地方使用,形式如${x}。

當然除了在pom.xml使用自定義屬性外,還可以在properties檔案中使用,比如專案檔案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}

相關文章