Maven的六類屬性 css
內置屬性 java
主要有兩個經常使用內置屬性:${basedir}項目的根目錄(包含pom.xml文件的目錄),${version}項目版本 mysql
POM屬性 web
用戶可使用該屬性引用POM文件中對應元素的值,經常使用的POM屬性包括: sql
${project.build.sourceDirectory}:項目的主源碼目錄,默認爲src/main/java apache
${project.build.testSourceDirectory}:項目的測試源碼目錄,默認爲src/test/java app
${project.build.directory}:項目構件輸出目錄,默認爲target/ webapp
${project.outputDirectory}:項目主代碼編譯輸出目錄,默認爲target/classes/ maven
${project.testOutputDirectory}:項目測試代碼編譯輸出目錄,默認爲target/test-classes/ 測試
${project.groupId}:項目的groupId
${project.artifactId}:項目的artifactId
${project.version}:項目的version,與${version}等價
${project.build.fianlName}:項目打包輸出文件的名稱。默認爲${project.artifactId}-${project.version}
自定義屬性
用戶能夠在POM的<properties>元素下自定義Maven屬性
Settings屬性
用戶使用settings.開頭的屬性引用settings.xml文件中XML元素的值
Java系統屬性
全部Java系統屬性均可以使用Maven屬性引用
環境變量屬性
全部環境變量均可以使用以env.開頭的Maven屬性引用
例如:
在依賴中 使用pom變量
<dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>part-a</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>part-b</artifactId> <version>${project-version}</version> </dependency> </dependencies>
在插件中使用pom變量
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <repositoryDirectory>${project.build.directory}/test-reports</repositoryDirectory> </configuration> </plugin>
自定義變量 須要在超級pom 中 過濾 資源文件
<profiles> <profile> <id>dev</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql://localhost:3360/test</db.url> <db.username>username</db.username> <db.password>password></db.password> </properties> </profile> </profiles>
Maven屬性默認只有在POM中才會被解析,所以須要讓Maven解析資源文件中的Maven屬性。Maven用maven-resources-plugin處理資源文件。它默認的行爲只是將項目主資源文件複製到主代碼編譯輸出目錄中,將測試資源文件複製到測試代碼編譯輸出目錄中。Maven默認的主資源目錄和測試資源目錄的定義是在超級POM中,要爲資源目錄開啓過濾,只要在此基礎上添加一行filtering配置便可。Filtering是maven resource插件的功能,做用是用環境變量,pom文件裏定義的屬性和指定文件裏的屬性替換屬性文件的佔位符。(超級pom在 apache-maven-3.3.9\lib\maven-model-builder-3.3.9.jar\org\apache\maven\model\pom-4.0.0.xml)
添加內容:
<resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <testResources> <testResource> <directory>${project.basedir}/src/test/resources</directory> <filtering>true</filtering> </testResource> <testResources>
在src/main/resources目錄下建立jdbc.properties文件:
database.jdbc.driverClass = ${db.driver}
database.jdbc.connectionURL = ${db.url}
database.jdbc.username = ${db.username}
database.jdbc.password = ${db.password}
mvn clean install -Pdev //-P參數表示在命令行激活一個profile。編譯後在target目錄下jdbc.properties中,在maven配置的屬性就會顯示在jdbc.properties文件中。
Maven支持多種方式激活profile
1.命令行激活
用戶可使用mvn命令行參數-P加上profile的id來激活profile,多個id之間以逗號分割。
mvn clean install -Pdev-x, dev-y
2.settings文件顯式激活
用戶但願某個profile默認一直處於激活的狀態,能夠配置settings.xml文件的activeProfiles元素
<settings> <activeProfiles> <activeProfile>dev-x</activeProfile> </activeProfiles> </settings>
3.系統屬性激活
用戶能夠配置檔某系統屬性存在的時候,自動激活profile
<profiles> <profile> <activation> <property> <name>test</name> <value>x</value> //當值爲x的時候激活profile </property> </activation> </profile> </profiles>
mvn clean install -Dtest = x
4.操做系統環境激活
Profile能夠自動根據操做系統環境激活,若是構建在不一樣的操做系統有差別,用戶徹底能夠將這些差別寫進profile,而後配置它們自動基於操做系統環境激活。
<profiles> <profile> <activation> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> </activation> </profile> </profiles>
5.文件存在與否激活
Maven可以根據項目中某個文件存在與否來決定是否激活profile
<profiles> <profile> <activation> <file> <missing>x.properties</missing> <exists>y.properties</exists> </file> </activation> </profile> </profiles>
6.默認激活
用戶能夠在定義profile的時候指定其默認激活
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> </profiles> </profiles>
查看當前激活的profile mvn help:active-profiles
列出當前全部的profile mvn help:all-profiles
profile的種類
根據具體的須要,能夠在如下位置聲明profile
pox.xml:只對當前項目有效
用戶settings.xml:用戶目錄下.m2/settings.xml中的profile對本機上該用戶全部的Maven項目有效
全局settings.xml:Mavem安裝目錄下conf/settings.xml中的profile對本機上全部的Maven項目有效
profiles.xml:還能夠在項目根目錄下使用一個額外的profiles.xml文件來聲明profile,不過該特性已經在Maven3中被移除。建議用戶將這類profile移到settings.xml中。
POM中profile可以使用的元素
<project>
<repositories></repositories> //修改或添加倉庫
<pluginRepositories></pluginRepositories> //修改或添加插件倉庫
<distributionManagement></distributionManagement> //修改或添加倉庫部署地址
<dependencies></dependencies> //修改或添加項目依賴
<dependencyManagement></dependencyMangement> //修改或添加項目依賴
<modules></modules> //修改聚合項目的聚合配置
<properties></properties> //自由添加或修改Maven屬性
<reporting></reporting> //添加或修改項目報告配置
<build>
<plugins><plugins>
<defaultGoal></defaultGoal>
<resources></resources>
<testResources></testResources>
<finalName></finalName>
</build>
</project>
Web資源過濾
在Web項目中,資源文件位於src/main/resources/目錄下,他們經處理後會位於WAR包的WEB-INF/classes目錄下,即這類資源文件在打包事後位於應用程序的classpath中。Web項目中位於src/main/webapp目錄,經打包後位於WAR包的根目錄。這一類資源文件稱做web資源文件,他們在打包事後不位於應用程序的classpath中。web資源默認不會被過濾,所以開啓通常資源文件的過濾也不會影響到web資源文件。
<profiles> <profile> <id>client-a</id> <properties> <client.logo>a.jpg</client.logo> <client.theme>red</client.theme> </properties> </profile> <profile> <id>client-b</id> <properties> <client.logo>b.jpg</client.logo> <client.theme>blue</client.theme> </properties> </profile> </profiles>
須要配置maven-war-plugin對src/main/webapp這一web資源目錄開啓過濾
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1-beta-1</version> <configuration> <webResources> <resource> <filtering>true</filtering> <directory>src/main/webapp</directory> <includes> <include>**/*.css</include> <include>**/*.js</include> </includes> </resource> </webResources> </configuration> </plugin>