在命令行使用屬性時,是-D,比如:mvn -Dinput=test
引用官方的說明https://maven.apache.org/pom.html#Properties:
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.x:settings.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}:這可以在必須編寫文字版本的位置使用,否則,特別是如果您在多模塊構建模塊間依賴關系。
以上更多用法參考:http://maven.apache.org/pom.html#The_Super_POM
${settings.localRepository}:它引用了本地存儲庫的位置。這是默認的${home}/.m2/repository。
以上更多用法參考:http://maven.apache.org/pom.html#Properties
以上參考:https://cwiki.apache.org/confluence/display/MAVEN/Maven+Properties+Guide
而針對第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&useUnicode=true&characterEncoding=utf-8&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}