Maven實戰讀書筆記(2)

Maven目錄分析java

一般在安裝Maven時,都會設置M2_HOME這個環境變量,M2_HOME指代了Maven的安裝目錄,下面是目錄結構:shell

binapache

boot安全

lib服務器

LICENSE.txt框架

NOTICE.txteclipse

README.txtmaven

 

bin目錄是?工具

1、該目錄包含了mvn運行的腳本google

2mvn是基於UNIX平臺的shell腳本,mvn.bat是基於Windows平臺的bat腳本,命令行輸入任何一條mvn命令時,實際上時在調用這些腳本,而後執行Java命令,是的maven的運行須要java的環境

3、該目錄還包含了mvnDebugmvnDebug.bat兩個文件,mvnDebugmvn有什麼區別呢?打開文件查看之,二者基本上是同樣的,只是mvnDebug多了一條MAVEN_DEBUG_OPTS配置,起做用就是在運行Maven時開啓debug,以便調試Maven自己

4、該目錄還包含m2.conf文件,這是classworlds的配置文件

5、包含文件mvnmvn.bat mvnDebug mvnDebug.batm2.conf

 

調試Maven自己?如何調試?

classworlds是幹什麼的?

 

boot目錄是?

1、該目錄只包含一個文件plexus-classworlds-2.2.3.jar

2plexus-classwords是一個類加載器框架,相對於默認的java類加載器,它提供了更豐富的語法以方便配置

3Maven使用該框架加載本身的類庫

4、參考http://classworlds.codehaus.org/

 

conf目錄是?

1、該目錄包含了一個很是重要的settings.xml

2、修改該文件,就能在機器上全局地定製Maven的行爲

3、通常咱們會將該文件複製到~/.m2/目錄下(~表示當前用戶目錄),而後修改該文件,在用戶範圍定製Maven的行爲

 

lib目錄是?

1、該目錄包含了全部Maven運行時須要的Java的類庫

2Maven自己是分模塊開發的,所以用戶能看到諸如maven-core-3.0.jarmaven-model-3.0.jar之類的文件

3、此外還包含了第三方依賴,如common-cli-1.2.jargoogle-collection-1.0.jar

 

對於Maven2來講lib目錄有些不一樣

1、該目錄只包含一個如maven-2.2.1-uber.jar的文件

2、本來各爲獨立JAR文件的Maven模塊和第三方類庫都被拆解後從新合併到這個jar文件中

3用戶能夠在這個jar文件中找到Maven內置的超級POM         

 

LICENSE.txt文件是?

記錄了Maven使用的軟件許可證Apache.License Version 2.0

 

NOTICE.txt文件是?

記錄了Maven包含的第三方軟件

 

README.txt文件是?

包含了Maven的簡要介紹,包括安裝需求及如何安裝簡要指令等

 

很是有用的mvn help:system命令

1、該命令會打印出全部的Java系統屬性環境變量

2、執行該命令Maven會下載maven-help-plugin,包括pom文件和jar文件,這些文件都被下載到了Maven本地倉庫中

3、默認狀況,能夠到~/.m2/repository/org/apache/maven/plugins/maven-help-plugins/目錄下找到剛纔下載的maven-help-pluginpom文件和jar文件

 

~/.m2目錄

1、默認狀況下,該文件夾下放置了Maven本地倉庫.m2/repository

2、全部的Maven構建都被存儲到該倉庫中,以方便重用

4、默認狀況,~/.m2目錄下除了repository倉庫以外就沒有其餘目錄和文件,不過大多數Maven用戶須要複製M2_HOME/conf/settings.xml文件到~/.m2/settings.xml,這是一條最佳實踐

 

設置HTTP代理

有時候你所在的公司基於安全因素考慮,要求你使用經過安全認證的帶來訪問因特網。這種狀況下,你須要爲Maven配置HTTP代理,才能讓它正常訪問外部倉庫,如下載所須要的資源

 

如何設置HTTP代理

1、首先檢查代理服務器是否能正常的訪問

2、代理服務器的IP多是218.14.227.197 端口號爲3128

編輯~/.m2/setting.xml文件,添加代理配置以下:

<setting>

       ...

       <proxies>

              <proxy>

                     <id>my-proxy</id>

                     <active>true</active>

                     <protocol>http</protocol>

                     <host>218.14.227.197</host>

                     <port>3128</port>

                     <!--

                     <username>XXX</username>

                     <password>XXX</password>

                     <nonProxyHosts>repository.mycom.com | *.google.com</nonProxyHosts>

                     -->

              </proxy>

       </proxies>

       ...

</setting>

配置說明:

1proxies下面能夠配置多個proxy元素,若是聲明多個proxy元素,則默認狀況下第一個被激活的proxy會生效

2idmy-proxy的代理,active的值爲true表示激活該代理,protocol表示使用代理協議爲http,最重要的是正確的hostport,若是代理須要認證的話配置usernamepasswordnonPoxyHost元素用來指定哪些主機名不須要代理,可使用 "|" 符號來分個主機名,可使用通配符*.google.com

Eclipse很是優秀的IDE

Eclipse是一款很是優秀的IDE,除了基本的語法標亮、代碼補齊、XML編輯等基本功能外,最新版本的Eclipse還能很好地支持重構,而且集成JUnitCVSMylyn等各類流行工具,惋惜Eclipse默認沒有集成對Maven的支持,幸運的是,由Maven之父Jason Van Zyl創立的Sonatype公司創建了m2eclipse項目,這是Eclipse下的一款十分強大的Maven插件,

能夠訪問http://m2eclipse.sonatype.org/瞭解更多該項目的信息

 

安裝m2eclipse

1、使用Eclipse Marketplace搜索m2eclipse下載Maven Integration for Eclipse(Luna and newer) 1.5

2m2eclipse的核心模塊就是Maven Integration for Eclipse

3m2eclipse使用的開源許可證是Eclipse Public License v1.0

4、除了核心組件以外,m2eclipse還提供了一組額外的組件,主要是爲了方便與其餘工具如Subversion進行集成,這些組件的安裝地址爲http://m2eclipse.sonatype.org/sites/m2e-extras

 

簡單介紹一下這些組件的用途

重要的:

1Maven SCM handler for Subclipse Optional):Subversion是很是流行的版本管理工具

該模塊可以幫助咱們直接從Subversion服務器簽出Maven項目,不過前提是須要首先安裝Subclipse (http://subclipse.tigris.org/)

2Maven SCM Integration (Optional): Eclipse環境中MavenSCM集成核心的模塊。它利用各類SCM工具如SVN實現Maven項目的簽出和具體化等操做

不重要的:

3Maven issue tracking configurator for Mylyn 3.x (Optional):該模塊可以幫助咱們使用POM中的缺陷跟蹤系統信息連接Mylyn至服務器

4Maven SCM handler for Team/CVS (Optional):該模塊幫助咱們從CVS服務器簽出Maven項目,若是還在使用CVS,就須要安裝它

5Maven Integration for WTP (Optional):使用該模塊可讓Eclipse自動讀取POM信息並配置WTP項目

6M2Eclipse Extensions Development Support (Optional): 用來支持擴展m2eclipse,通常用戶不會用到

7Project configurators for commonly used maven plugins (temporary):一個臨時的組件,用來支持一些Maven插件與Eclipse的集成,建議安裝。

以上的這些模塊在http://m2eclipse.sonatype.org/sites/m2e-extras已經找不到了,若是想要安裝指定的插件,本身在Eclipse marketplace本身搜索吧

 

如何在Eclipse中驗證某個插件是否正確安裝?

1、首先,單擊菜單欄中的Help

2、而後選擇About Eclipse,在彈出的對話框中,單擊Installation Details按鈕,會獲得一個對話框

3、在Installed Software標籤中,檢查該模塊是否在這個列表中

 

一個很是常見的錯誤

在安裝Maven的時候,常常會出現一個這樣的錯誤:

09-10-6 上午011449:Eclipse is running in a JRE, but a JDK is reuqired

Some Maven plugins may not work when importing projects or updating or updating source folders

這是由於Eclipse默認是運行在JRE上的,而m2eclipse的一些功能要求使用JDK

解決方法之一:將Eclipse默認運行的JRE改爲咱們本身安裝的JDK

 

安裝NetBeans Maven插件

 

Maven安裝的最佳實踐

1、設置MAVEN_OPTS環境變量

2、配置用戶範圍settings.xml

3、不要使用IDE內嵌的Maven

 

設置MAVEN_OPTS環境變量幹什麼?

1、運行mvn命令實際上執行的是Java的命令,Java命令可用的參數也能夠用在mvn命令

2、一般須要設置MAVEN_OPTS的值爲-Xms138m -Xms512m,由於Java默認的最大可用內存每每不能知足Maven運行的須要,好比在項目較大時,使用Maven生成項目站點須要佔用大量的內存,若是沒有該配置,則很容易獲得java.lang.OutOfMemeoryError

注意:儘可能不要修改mvn.bat或者mvn這兩個Maven執行腳本,若是要升級Maven時不得再也不次修改,一來麻煩,二來容易忘記,同理也不要去修改任何Maven安裝目錄下的文件

 

settings.xml文件的一些說明

1Maven用戶能夠選擇配置 M2_HOME/conf/settings.xml或者~/.m2/settings.xml,前者是全局範圍的,整臺機器上的全部用戶都會直接受到該配置的影響,然後者是用戶範圍的,只有當前用戶纔會受到該配置的影響

2、推薦使用用戶範圍的settings.xml,主要是爲了不無心識地影響到系統中的其餘用戶,若是有切實的需求,須要統一系統中全部用戶的setting.xml配置,固然應該使用全局範圍的setting.xml

3、配置用戶範圍的settings.xml文件還便於Maven的升級,直接修改conf目錄下的settings.xml會致使Maven升級不便,每次升級到新版本的Maven,都須要複製settings.xml文件,若是使用~/.m2目錄下的settings.xml,就不會影響到Maven安裝文件,升級時就不須要觸動settings.xml文件

 

爲何不要使用IDE內嵌的Maven

不管Eclipse仍是NetBeans,當集成Maven時,都會安裝上一個內嵌的Maven,這個內嵌的Maven一般會比較新,但不必定很穩定,並且每每也會和在命令行使用的Maven不是同一個版本

 

使用IDE內嵌的Maven會出現兩個潛在的問題

1、較新版本的Maven存在不少不穩定因素,容易形成一些難以理解的問題

2、除了IDE,也常常還會使用命令行的Maven,若是版本不一致,容易形成構建行爲的不一致,這是咱們所不但願看到的。

因此應該在IDE中配置Maven插件時使用與命令行一致的Maven

相關文章
相關標籤/搜索