maven的配置文件看似很復(fù)雜,其實(shí)只需要根據(jù)項(xiàng)目的實(shí)際背景赃春,設(shè)置個(gè)別的幾個(gè)配置項(xiàng)而已。maven有自己的一套默認(rèn)配置劫乱,使用者除非必要聘鳞,并不需要去修改那些約定內(nèi)容。這就是所謂的“約定優(yōu)于配置”要拂。
文件目錄
maven默認(rèn)的文件存放結(jié)構(gòu)如下:
每一個(gè)階段的任務(wù)都知道怎么正確完成自己的工作,比如compile任務(wù)就知道從src/main/java下編譯所有的java文件站楚,并把它的輸出class文件存放到target/classes中脱惰。
對(duì)maven來說,采用"約定優(yōu)于配置"的策略可以減少修改配置的工作量窿春,也可以降低學(xué)習(xí)成本拉一,更重要的是,給項(xiàng)目引入了統(tǒng)一的規(guī)范旧乞。
版本規(guī)范
maven有自己的版本規(guī)范蔚润,一般是如下定義:
<majorversion>.<minor version>.<incremental version>-<qualifier>
比如1.2.3-beta-01。要說明的是尺栖,maven自己判斷版本的算法是major
,minor
,incremental
部分用數(shù)字比較嫡纠,qualifier部分用字符串比較,所以要小心 alpha-2和alpha-15的比較關(guān)系延赌,最好用 alpha-02的格式除盏。
maven在版本管理時(shí)候可以使用幾個(gè)特殊的字符串 SNAPSHOT
,LATEST
,RELEASE
。比如1.0-SNAPSHOT
挫以。各個(gè)部分的含義和處理邏輯如下說明:
l SNAPSHOT
如果一個(gè)版本包含字符串"SNAPSHOT"者蠕,Maven就會(huì)在安裝或發(fā)布這個(gè)組件的時(shí)候?qū)⒃摲?hào)展開為一個(gè)日期和時(shí)間值,轉(zhuǎn)換為UTC時(shí)間掐松。例如踱侣,"1.0-SNAPSHOT"會(huì)在2010年5月5日下午2點(diǎn)10分發(fā)布時(shí)候變成1.0-20100505-141000-1粪小。
這個(gè)詞只能用于開發(fā)過程中,因?yàn)橐话銇碚f抡句,項(xiàng)目組都會(huì)頻繁發(fā)布一些版本探膊,最后實(shí)際發(fā)布的時(shí)候,會(huì)在這些snapshot版本中尋找一個(gè)穩(wěn)定的玉转,用于正式發(fā) 布突想,比如1.4版本發(fā)布之前,就會(huì)有一系列的1.4-SNAPSHOT究抓,而實(shí)際發(fā)布的1.4猾担,也是從中拿出來的一個(gè)穩(wěn)定版。
l LATEST
指某個(gè)特定構(gòu)件的最新發(fā)布刺下,這個(gè)發(fā)布可能是一個(gè)發(fā)布版绑嘹,也可能是一個(gè)snapshot版,具體看哪個(gè)時(shí)間最后橘茉。
l RELEASE
指最后一個(gè)發(fā)布版工腋。
Maven變量
除了在setting.xml以及pom.xml當(dāng)中用properties定義的常量,maven還提供了一些隱式的變量畅卓,用來訪問系統(tǒng)環(huán)境變量擅腰。
類別 | 例子 |
---|---|
內(nèi)置屬性 | ${basedir}表示項(xiàng)目根目錄,即包含pom.xml文件的目錄 ${version}表示項(xiàng)目版本 ${project.basedir}同${basedir} ${project.baseUri}表示項(xiàng)目文件地址 ${maven.build.timestamp}表示項(xiàng)目構(gòu)件開始時(shí)間 |
setting屬性 | ${settings.localRepository }表示本地倉庫路徑 |
POM屬性 | ${project.build.directory}表示主源碼路徑 ${project.build.sourceEncoding}表示主源碼的編碼格式 ${project.build.sourceDirectory}表示主源碼路徑 ${project.build.finalName}表示輸出文件名稱 ${project.version}表示項(xiàng)目版本,與${version}相同 |
Java系統(tǒng)屬性 | ${user.home}表示用戶目錄 ${java.version}表示Java版本 |
環(huán)境變量屬性 | ${env.JAVA_HOME}表示JAVA_HOME環(huán)境變量的值 ${env.HOME }表示用戶目錄 |
上級(jí)工程變量 | 上級(jí)工程的pom中的變量用前綴 ${project.parent } 引用。上級(jí)工程的版本也可以這樣引用: ${parent.version } |