在命令列使用屬性時,是-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.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}:這可以在必須編寫文字版本的位置使用,否則,特別是如果您在多模組構建模組間依賴關係。
${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&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}