天天看點

Maven實戰. 2.3安裝目錄分析

<b>2.3安裝目錄分析</b>

前面講述了如何在各種作業系統中安裝和更新maven。現在來仔細分析一下maven的安裝檔案。

<b>2.3.1m2_home</b>

前面講到設定m2_home環境變量指向maven的安裝目錄,本書之後所有使用m2_home的地方都指代了該安裝目錄。下面看一下該目錄的結構和内容: bin

boot

conf

lib

license.txt

notice.txt

readme.txt bin: 該目錄包含了mvn運作的腳本,這些腳本用來配置java指令,準備好classpath和相關的java系統屬性,然後執行java指令。其中mvn是基于unix平台的shell腳本,mvn.bat是基于windows平台的bat腳本。在指令行輸入任何一條mvn指令時,實際上就是在調用這些腳本。該目錄還包含了mvndebug和mvndebug.bat兩個檔案,同樣,前者是unix平台的shell腳本,後者是windows平台的bat腳本。那麼mvn和mvndebug有什麼差別和關系呢?打開檔案我們就可以看到,兩者基本是一樣的,隻是mvndebug多了一條maven_debug_opts配置,其作用就是在運作maven時開啟debug,以便調試maven本身。此外,該目錄還包含m2.conf檔案,這是classworlds的配置檔案,後面會介紹classworlds。

 boot: 該目錄隻包含一個檔案,以maven 3.0為例,該檔案為plexusclassworlds2.2.3.jar。plexusclassworlds是一個類加載器架構,相對于預設的java類加載器,它提供了更豐富的文法以友善配置,maven使用該架構加載自己的類庫。更多關于classworlds的資訊請參考http://classworlds.codehaus.org/。對于一般的maven使用者來說,不必關心該檔案。

 conf: 該目錄包含了一個非常重要的檔案settings.xml。直接修改該檔案,就能在機器上全局地定制maven的行為。一般情況下,我們更偏向于複制該檔案至~/.m2/目錄下(~表示使用者目錄),然後修改該檔案,在使用者範圍定制maven的行為。後面将會多次提到settings.xml,并逐漸分析其中的各個元素。

 lib: 該目錄包含了所有maven運作時需要的java類庫,maven本身是分子產品開發的,是以使用者能看到諸如mavencore3.0.jar、mavenmodel3.0.jar之類的檔案。此外,這裡還包含一些maven用到的第三方依賴,如commoncli1.2.jar、googlecollection1.0.jar等。對于maven 2來說,該目錄隻包含一個如maven2.2.1uber.jar的檔案,原本各為獨立jar檔案的maven子產品和第三方類庫都被拆解後重新合并到了這個jar檔案中。可以說,lib目錄就是真正的maven。關于該檔案,還有一點值得一提的是,使用者可以在這個目錄中找到maven内置的超級pom,這一點在8.5節詳細解釋。其他: license.txt記錄了maven使用的軟體許可證apache license version 2.0; notice.txt記錄了maven包含的第三方軟體;而readme.txt則包含了maven的簡要介紹,包括安裝需求及如何安裝的簡要指令等。

<b>2.3.2~/.m2</b>

在講述該小節之前,我們先運作一條簡單的指令:mvn help:system。該指令會列印出所有的java系統屬性和環境變量,這些資訊對我們日常的程式設計工作很有幫助。這裡暫不解釋help:system涉及的文法,運作這條指令的目的是讓maven執行一個真正的任務。我們可以從指令行輸出看到maven會下載下傳mavenhelpplugin,包括pom檔案和jar檔案。這些檔案都被下載下傳到了maven本地倉庫中。

現在打開使用者目錄,比如目前的使用者目錄是c:\users\juven xu\,你可以在vista和windows7中找到類似的使用者目錄。如果是更早版本的windows,該目錄應該類似于c:\document

and settings\juven xu\。在基于unix的系統上,直接輸入cd 回車,就可以轉到使用者目錄。為了友善,本書統一使用符号 ~ 指代使用者目錄。

在使用者目錄下可以發現.m2檔案夾。預設情況下,該檔案夾下放置了maven本地倉庫.m2/repository。所有的maven構件都被存儲到該倉庫中,以友善重用。可以到~/.m2/repository/org/apache/maven/plugins/mavenhelpplugins/目錄下找到剛才下載下傳的mavenhelpplugin的pom檔案和jar檔案。maven根據一套規則來确定任何一個構件在倉庫中的位置,這一點在第6章将會詳細闡述。由于maven倉庫是通過簡單檔案系統透明地展示給maven使用者的,有些時候可以繞過maven直接檢視或修改倉庫檔案,在遇到疑難問題時,這往往十分有用。

預設情況下,~/.m2目錄下除了repository倉庫之外就沒有其他目錄和檔案了,不過大多數maven使用者需要複制m2_home/conf/settings.xml檔案到~/.m2/settings.xml。這是一條最佳實踐,我們将在2.7小節詳細解釋。