maven的配置文件看似很複雜,其實只需要根據項目的實際背景,設置個別的幾個配置項而已。maven有自己的一套默認配置,使用者除非必要,並不需要去修改那些約定內容。這就是所謂的“約定優於配置”。
文件目錄
maven默認的文件存放結構如下:
每一個階段的任務都知道怎麼正確完成自己的工作,比如compile任務就知道從src/main/java下編譯所有的java文件,並把它的輸出class文件存放到target/classes中。
對maven來說,採用”約定優於配置”的策略可以減少修改配置的工作量,也可以降低學習成本,更重要的是,給項目引入了統一的規範。
版本規範
maven有自己的版本規範,一般是如下定義:
..-,
比如1.2.3-beta-01。要說明的是,maven自己判斷版本的算法是major,minor,incremental部分用數字比較,qualifier部分用字符串比較,所以要小心 alpha-2和alpha-15的比較關係,最好用 alpha-02的格式。
maven在版本管理時候可以使用幾個特殊的字符串 SNAPSHOT ,LATEST ,RELEASE 。比如”1.0-SNAPSHOT”。各個部分的含義和處理邏輯如下說明:
l SNAPSHOT
如果一個版本包含字符串”SNAPSHOT”,Maven就會在安裝或發佈這個組件的時候將該符號展開爲一個日期和時間值,轉換爲UTC時間。例如,”1.0-SNAPSHOT”會在2010年5月5日下午2點10分發布時候變成1.0-20100505-141000-1。
這個詞只能用於開發過程中,因爲一般來說,項目組都會頻繁發佈一些版本,最後實際發佈的時候,會在這些snapshot版本中尋找一個穩定的,用於正式發 布,比如1.4版本發佈之前,就會有一系列的1.4-SNAPSHOT,而實際發佈的1.4,也是從中拿出來的一個穩定版。
l LATEST
指某個特定構件的最新發布,這個發佈可能是一個發佈版,也可能是一個snapshot版,具體看哪個時間最後。
l RELEASE
指最後一個發佈版。
Maven變量
除了在setting.xml以及pom.xml當中用properties定義的常量,maven還提供了一些隱式的變量,用來訪問系統環境變量。
類別 | 例子 |
---|---|
內置屬性 | {version}表示項目版本 {basedir} {maven.build.timestamp}表示項目構件開始時間 |
setting屬性 | ${settings.localRepository }表示本地倉庫路徑 |
POM屬性 | {project.build.sourceEncoding}表示主源碼的編碼格式 {project.build.finalName}表示輸出文件名稱 {version}相同 |
Java系統屬性 | {java.version}表示Java版本 |
環境變量屬性 | {env.HOME }表示用戶目錄 |
上級工程變量 | 上級工程的pom中的變量用前綴 {parent.version } |