maven的配置文件看似很複雜,其實只須要根據項目的實際背景,設置個別的幾個配置項而已。maven有本身的一套默認配置,使用者除非必要,並不須要去修改那些約定內容。這就是所謂的「約定優於配置」。java
maven默認的文件存放結構以下: 算法
compile
任務就知道從
src/main/java
下編譯全部的
java
文件,並把它的輸出
class
文件存放到
target/classes
中。
對maven來講,採用"約定優於配置"的策略能夠減小修改配置的工做量,也能夠下降學習成本,更重要的是,給項目引入了統一的規範。maven
maven有本身的版本規範,通常是以下定義: <majorversion>.<minor version>.<incremental version>-<qualifier>
好比1.2.3-beta-01。要說明的是,maven本身判斷版本的算法是major
,minor
,incremental
部分用數字比較,qualifier部分用字符串比較,因此要當心 alpha-2和alpha-15的比較關係,最好用 alpha-02的格式。學習
maven在版本管理時候可使用幾個特殊的字符串 SNAPSHOT
,LATEST
,RELEASE
。好比1.0-SNAPSHOT
。各個部分的含義和處理邏輯以下說明:ui
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,也是從中拿出來的一個穩定版。code
l LATEST 指某個特定構件的最新發布,這個發佈多是一個發佈版,也多是一個snapshot版,具體看哪一個時間最後。cdn
l RELEASE 指最後一個發佈版。xml
除了在setting.xml以及pom.xml當中用properties定義的常量,maven還提供了一些隱式的變量,用來訪問系統環境變量。blog
類別 | 例子 |
---|---|
內置屬性 | ${basedir} 表示項目根目錄,即包含pom.xml文件的目錄${version} 表示項目版本${project.basedir} 同${basedir} ${project.baseUri} 表示項目文件地址${maven.build.timestamp} 表示項目構件開始時間 |
setting屬性 | ${settings.localRepository } 表示本地倉庫路徑 |
POM屬性 | ${project.build.directory} 表示主源碼路徑${project.build.sourceEncoding} 表示主源碼的編碼格式${project.build.sourceDirectory} 表示主源碼路徑${project.build.finalName} 表示輸出文件名稱${project.version} 表示項目版本,與${version} 相同 |
Java系統屬性 | ${user.home} 表示用戶目錄${java.version} 表示Java版本 |
環境變量屬性 | ${env.JAVA_HOME} 表示JAVA_HOME環境變量的值${env.HOME } 表示用戶目錄 |
上級工程變量 | 上級工程的pom中的變量用前綴 ${project.parent } 引用。上級工程的版本也能夠這樣引用: ${parent.version } |