深入理解maven與應用(二):靈活的構建
參考官方url:http://maven.apache.org/guides/index.html
一個優秀的構建系統必須足夠靈活,應該能夠讓專案在不同的環境下都能成功構建。maven為了支援構建的靈活性,內建了三大特性,即:屬性、profile和資源過濾。
1、maven屬性
maven屬性分6類:
1、內建屬性:如${basedir}表示專案根目錄,${version}表示專案版本
2、POM屬性:使用者可以引用pom檔案中對應的值。如:
${basedir} 專案根目錄
${project.build.directory} 構建目錄,預設為target
${project.build.outputDirectory} 構建過程輸出目錄,預設為target/classes
${project.build.finalName} 產出物名稱,預設為${project.artifactId}-${project.version}
${project.packaging} 打包型別,預設為jar
${project.xxx} 當前pom檔案的任意節點的內容
3、自定義屬性:使用者可以在pom的<properties>元素下自定義maven屬性。
4、setting屬性:使用者可以使用以settings開頭的屬性引用settings.xml中xml元素的值,如${settings.localRepository}指向使用者本地倉庫的地址。
5、java系統屬性:maven可以使用當前java系統的屬性,如${user.home}指向了使用者目錄。
6、環境變數屬性:所有環境變數都可以使用以env.開頭的屬性。如:${env.JAVA_HOE}。
2、資源過濾
這裡所謂的資源:也就就是指src/main/resources和src/test/resources檔案下的所有檔案,預設情況下,這些檔案會被複制到classpath下面,即target/classes下面。
所謂資源過濾,就是過濾這些資料夾下面的檔案裡面的內容,看裡面的maven變數是否需要替換。預設情況下,只有pom.xml裡面的變數才會被替換,資原始檔是不會被過濾的,但是可以設定,如下:
<build>
<finalName>agentmanager</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<!-- 控制資原始檔的拷貝 -->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/jre.zip</exclude>
<exclude>**/jre.tar</exclude>
<exclude>agentmanager.jsmooth</exclude>
<exclude>assembly.xml</exclude>
</excludes>
<targetPath>${project.build.directory}</targetPath>
</resource>
<resource>
<directory>src/main/resources/conf</directory>
<targetPath>${basedir}/conf</targetPath>
<filtering>true</filtering>
</resource>
</resources>
</build>
如jdbc.properties
jdbc.driverClassName=${db.driver}
jdbc.url=${db.url}
jdbc.username=${db.user}
jdbc.password=${db.pwd}
profile檔案
<profiles>
<profile>
<id>dev</id>
<properties>
<db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
<db.url>jdbc:oracle:thin:@10.252.48.3:1521:dbname</db.url>
<db.user>username</db.user>
<db.pwd>userpwd</db.pwd>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
<db.url>jdbc:oracle:thin:@10.252.48.3:1521:testdbname</db.url>
<db.user>testusername</db.user>
<db.pwd>testuserpwd</db.pwd>
</properties>
</profile>
</profiles>
在構建時可以使用-P引數啟用一個或多個profile,多個之間用逗號分隔
如 mvn clean install -Pdev
3、maven profile
上面例子應該可以看出profile是做什麼的,其實就相當於定義了一系列的profile變數,在具體構建時可用使用其中的某個profile去變數替換資原始檔。
啟用profile的方式有很多,如命令列啟用(上面),settings檔案顯式啟用、系統屬性啟用、作業系統環境啟用、預設啟用、檔案存在與否啟用等,具體可以參考官網資料。
3.1 profile的種類
根據需要,可以在以下檔案宣告profile。
1、pom.xml 針對當前專案
2、使用者 settings.xml 使用者目錄下的.m2/settings.xml, 對當前使用者的所有專案有效。
3、全域性 settings.xml 即maven安裝目錄下的conf/settings.xml。對本機上的所有專案有效。
4、web資源過濾
在maven的web專案裡面,除了上面所說的資原始檔(src/main/resources)之外,還有一類叫做web資源目錄,即src/main/webapp下面的js、css等等。預設情況下,這些目錄是不被資源過濾的,開啟的命令如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
<includes>
<include>**/*.css</include>
<include>**/*.js</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
相關文章
- 深入理解介面隔離原則:構建靈活的面向介面軟體
- (二)使用 jenkins 靈活構建專案的不同分支Jenkins
- docker 靈活的構建 PHP 環境DockerPHP
- .NET Core 3.0之深入原始碼理解Kestrel的整合與應用(二)原始碼
- 深入理解和應用display屬性(二)
- 深入理解maven及應用(一):生命週期和外掛Maven
- 深入理解kestrel的應用
- Android 增量構建的科技與狠活Android
- Java設計模式——觀察者模式的靈活應用Java設計模式
- 區域性範圍掃描的靈活應用
- ESB編排平臺,靈活構建企業系統流程
- ViewState靈活運用View
- 小程式生態是更靈活構建超級App的方式APP
- 深入理解Thread建構函式thread函式
- 知識圖譜構建與應用
- 正規表示式如何在PHP裡靈活的應用PHP
- 你竟然沒用 Maven 構建專案?Maven
- 深入理解中文編碼:原理、應用與實踐
- 沒有JDK和Maven,用Docker也能構建Maven工程JDKMavenDocker
- HongHu雲架構 - maven的構建架構Maven
- maven 學習總結(二)——Maven專案構建過程練習Maven
- 靈魂拷問:flutter構建應用的方式是否是一種倒退?Flutter
- AsyncTask的理解與應用
- 靈活應用Windows XP硬體配置檔案(轉)Windows
- 使用Angular與TypeScript構建Electron應用(六)AngularTypeScript
- 使用Angular與TypeScript構建Electron應用(一)AngularTypeScript
- OpenVPN閘道器構建靈活安全的資料採集系統
- 使用 Ant和 Ivy實現靈活而強大的構建配置管理
- .NET Core 3.0之深入原始碼理解Kestrel的整合與應用(一)原始碼
- 深入理解DES演算法:原理、實現與應用演算法
- 構建 API 應用API
- 構建一個即時訊息應用(二):OAuthOAuth
- 深入理解spark之架構與原理Spark架構
- 靈活的JavaScriptJavaScript
- DockerFile理解與應用Docker
- 【開源】Tsar——靈活的系統和應用採集軟體
- 理解建構函式與原型物件函式原型物件
- 用VIPER構建iOS應用iOS