Maven目錄分析java
一般在安裝Maven時,都會設置M2_HOME這個環境變量,M2_HOME指代了Maven的安裝目錄,下面是目錄結構:shell
binapache
boot安全
lib服務器
LICENSE.txt框架
NOTICE.txteclipse
README.txtmaven
bin目錄是?工具
1、該目錄包含了mvn運行的腳本google
2、mvn是基於UNIX平臺的shell腳本,mvn.bat是基於Windows平臺的bat腳本,命令行輸入任何一條mvn命令時,實際上時在調用這些腳本,而後執行Java命令,是的maven的運行須要java的環境
3、該目錄還包含了mvnDebug和mvnDebug.bat兩個文件,mvnDebug與mvn有什麼區別呢?打開文件查看之,二者基本上是同樣的,只是mvnDebug多了一條MAVEN_DEBUG_OPTS配置,起做用就是在運行Maven時開啓debug,以便調試Maven自己
4、該目錄還包含m2.conf文件,這是classworlds的配置文件
5、包含文件mvn、mvn.bat、 mvnDebug 、mvnDebug.bat、m2.conf
調試Maven自己?如何調試?
classworlds是幹什麼的?
boot目錄是?
1、該目錄只包含一個文件plexus-classworlds-2.2.3.jar
2、plexus-classwords是一個類加載器框架,相對於默認的java類加載器,它提供了更豐富的語法以方便配置
3、Maven使用該框架加載本身的類庫
4、參考http://classworlds.codehaus.org/
conf目錄是?
1、該目錄包含了一個很是重要的settings.xml
2、修改該文件,就能在機器上全局地定製Maven的行爲
3、通常咱們會將該文件複製到~/.m2/目錄下(~表示當前用戶目錄),而後修改該文件,在用戶範圍定製Maven的行爲
lib目錄是?
1、該目錄包含了全部Maven運行時須要的Java的類庫
2、Maven自己是分模塊開發的,所以用戶能看到諸如maven-core-3.0.jar、maven-model-3.0.jar之類的文件
3、此外還包含了第三方依賴,如common-cli-1.2.jar、google-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-plugin的pom文件和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>
配置說明:
1、proxies下面能夠配置多個proxy元素,若是聲明多個proxy元素,則默認狀況下第一個被激活的proxy會生效
2、id爲my-proxy的代理,active的值爲true表示激活該代理,protocol表示使用代理協議爲http,最重要的是正確的host和port,若是代理須要認證的話配置username和password,nonPoxyHost元素用來指定哪些主機名不須要代理,可使用 "|" 符號來分個主機名,可使用通配符*.google.com
Eclipse很是優秀的IDE
Eclipse是一款很是優秀的IDE,除了基本的語法標亮、代碼補齊、XML編輯等基本功能外,最新版本的Eclipse還能很好地支持重構,而且集成JUnit、CVS、Mylyn等各類流行工具,惋惜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
2、m2eclipse的核心模塊就是Maven Integration for Eclipse
3、m2eclipse使用的開源許可證是Eclipse Public License v1.0
4、除了核心組件以外,m2eclipse還提供了一組額外的組件,主要是爲了方便與其餘工具如Subversion進行集成,這些組件的安裝地址爲http://m2eclipse.sonatype.org/sites/m2e-extras
簡單介紹一下這些組件的用途
重要的:
1、Maven SCM handler for Subclipse (Optional):Subversion是很是流行的版本管理工具
該模塊可以幫助咱們直接從Subversion服務器簽出Maven項目,不過前提是須要首先安裝Subclipse (http://subclipse.tigris.org/)
2、Maven SCM Integration (Optional): Eclipse環境中Maven與SCM集成核心的模塊。它利用各類SCM工具如SVN實現Maven項目的簽出和具體化等操做
不重要的:
3、Maven issue tracking configurator for Mylyn 3.x (Optional):該模塊可以幫助咱們使用POM中的缺陷跟蹤系統信息連接Mylyn至服務器
4、Maven SCM handler for Team/CVS (Optional):該模塊幫助咱們從CVS服務器簽出Maven項目,若是還在使用CVS,就須要安裝它
5、Maven Integration for WTP (Optional):使用該模塊可讓Eclipse自動讀取POM信息並配置WTP項目
6、M2Eclipse Extensions Development Support (Optional): 用來支持擴展m2eclipse,通常用戶不會用到
7、Project 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 上午01時14分49秒: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文件的一些說明
1、Maven用戶能夠選擇配置 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