maven運行的一些事

、命令 
   注意如下命令必須在pom.xml文件所在的目錄中運行。 java

  1. --mvn help:effective-pom 查看項目的有效POM
  2. --mvn test:運行應用程序中的單元測試
  3. --mvn package:依據項目生成jar文件
  4. --mvn install:在本地Repository中安裝jar
  5. --mvn site:生成項目相關信息的網站
  6. --mvn clean:清除目標目錄中的生成結果
  7. --mvn eclipse:eclipse:生成Eclipse項目文件
  8. --mvn compile:編譯相應的java文件
  9. --mvn test-compile:只編譯test
  10. --mvn archetype:create 建立Maven項目
  11. --mvn -Dplugin=groupId:artifactId help:describe 查看一個插件所用的版本
  12. --mvn -Dmaven.test.skip=true 忽略編譯test
  13. --mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true maven的一個插件,安裝到本地庫


說明:"-D<name>=<value>"這種格式不是Maven定義的,它實際上是Java用來設置系統屬性的方式,能夠經過「java -help」查看Java的解釋。Maven的bin目錄下的腳本文件僅僅是把屬性傳入Java而已。 
2、運行web項目(mvn jetty:run) 
   使用maven的一個方便之處是可使用Jetty Plugin來運行web項目。只要maven jetty:run就能夠把web項目跑起來了。把Maven做爲外部工具來用。 
   在Run->Externel Tools->Open Externel Tools Dialog.. 打開配置對話框,選中左邊的Program節點,右鍵選擇New而後再右邊的配置裏面輸入Name信息,在Main tab下的Location選擇你maven可執行文件的全路徑(eg:/home/rory/apps/apache-maven-2.0.9/bin/mvn.bat),Working Directory選擇你的maven項目(eg:${workspace_loc:/guice-example}),Arguments裏輸入mvn的命令參數jetty:run。 
補充:爲eclise添加一個變量:從菜單條,選擇Window>Preferences,選擇Run/Debug>String Substitution,增長一個新的變量,好比maven_exec,value爲mvn.bat的路徑。當你設置新的外部裝載器(叢菜單條,選擇Run>External Tools,選擇Program),你能夠在位置字段引用剛纔定義的maven_exec。 
3、m2eclipse插件 
    m2eclipse插件爲Eclipse提供了Maven的集成。m2Eclipse同時也以掛鉤的方式鏈接了Subclipse插件和Mylyn插件特性。Subclipse插件爲m2eclipse提供了與Subversion倉庫交互的能力,Mylyn插件爲m2eclipse提供了與任務集中接口交互的能力,該接口能跟蹤開發過程的上下文。 
    要安裝m2Eclipse插件,你須要符合一些先決條件。你須要運行Eclipse 3.2或更高版本,JDK 1.4或更高版本,你須要確認Eclipse是在JDK上運行而不是JRE。在你有了Eclipse和兼容的JDK以後,你須要安裝兩個Eclipse插件:Subclipse和Mylyn。 
1.安裝 Subclipse 
Subclipse 1.2: http://subclipse.tigris.org/update_1.2.x 
2. 安裝 Mylyn 
要安裝集成了JIRA支持的Mylyn,添加Mylyn Extras的Eclipse更新URL,若是你的組織使用Atlassian's JIRA來跟蹤問題,你會須要這麼作。使用下面的更新站點來安裝Mylyn: 
Mylyn (Eclipse 3.3): http://download.eclipse.org/tools/mylyn/update/e3.3 
Mylyn (Eclipse 3.4): http://download.eclipse.org/tools/mylyn/update/e3.4 
Mylyn Extras (JIRA 支持): http://download.eclipse.org/tools/mylyn/update/extras 
3.安裝 AspectJ Tools Platform (AJDT) 
   若是你正在安裝m2eclipse的0.9.4版本,你可能同時也想要安裝Web Tools Platform (WTP) 和 AspectJ Development Tools (AJDT)。使用以下的eclipse更新URL以安裝AJDT。 
AJDT (Eclipse 3.3): http://download.eclipse.org/tools/ajdt/33/update 
AJDT (Eclipse 3.4): http://download.eclipse.org/tools/ajdt/34/dev/update 
4.安裝 Web Tools Platform (WTP) 
要安裝Web Tools Platform (WTP)。使用以下的eclipse更新URL,或者直接在Discovery站點中尋找Web Tool Project,該站點應該已經在你的Eclipse遠程更新站點列表中了。 
WTP: http://download.eclipse.org/webtools/updates/ 
5.安裝 m2eclipse 
一旦你已經安裝好這些先決條件,你從以下的Eclipse更新URL安裝m2eclipse插件: 
m2eclipse 插件: http://m2eclipse.sonatype.org/update/ 
若是你想要安裝最新的該插件的快照開發版本,你應該使用以下的開發更新URL而非以前的URL。 
m2eclipse 插件 (開發快照): http://m2eclipse.sonatype.org/update-dev/ 
說明:若是用update方式裝最新版本,則不須要進行2/3/4步的操做了,在第5步上起完成。 
提示: 
(1)使用 -Dmaven.repo.local=xxx 來爲每一個構建定義惟一的本地倉庫。 
(2)開啓 -Dsurefire.useFile=false 。能讓surefire打印測試失敗到標準輸出。在settings.xml中開啓<properties><surefire.useFile>true</surefire.useFile></properties>。 
(3)在構建中開啓 -B(batch,批處理)模式。這會讓日誌變短,由於這避免了依賴下載過程的日誌。這也能確保構建不會由於等待用戶輸入而掛起。 
(4)開啓 -e 能讓Maven在遇到構建異常的時候產生徹底的堆棧跟蹤信息。這讓咱們更容易根據構建失敗結構的日誌或者email中理解問題,而不用從新構建一次。 
(5)開啓 -U 讓Maven老是最檢查新的snapshot。該選項一樣也能夠在CI系統的setting.xml中開啓。 
(6)dependency的scope參數說明: 
--compile:默認值。代表是全部任務所需的資源 
--test:運行全部的測試用例時所需資源 
--runtime:代表是運行時所需資源 
--provided:JDK部分或應用服務器的classpath所需的資源 
--system:相似provided,須要顯式提供包含依賴的jar,Maven不會在Repository中查找它 
(7)配置編譯選項/Surefire忽略單元測試失敗 web

Xml代碼   收藏代碼
  1. <plugins>  
  2.     <plugin>  
  3.       <groupId>org.apache.maven.plugins</groupId>    
  4.       <artifactId>maven-compiler-plugin</artifactId>    
  5.       <configuration>  
  6.         <source>1.5</source>  
  7.         <target>1.5</target>  
  8.       </configuration>  
  9.     </plugin>  
  10.     <plugin>  
  11.       <groupId>org.apache.maven.plugins</groupId>  
  12.       <artifactId>maven-surefire-plugin</artifactId>  
  13.      <configuration>  
  14.        <testFailureIgnore>true</testFailureIgnore>  
  15.      </configuration>  
  16.     </plugin>  
  17. </plugins>  


4、Maven的生命週期 (Lifecycle) sql

  1. validate:驗證工程是否正確,全部須要的資源是否可用。
  2. compile:編譯項目的源代碼。
  3. test-compile:編譯項目測試代碼。
  4. test:使用已編譯的測試代碼,測試已編譯的源代碼。
  5. package:已發佈的格式,如jar,將已編譯的源代碼打包。
  6. integration-test:在集成測試能夠運行的環境中處理和發佈包。
  7. verify:運行任何檢查,驗證包是否有效且達到質量標準。
  8. install:把包安裝在本地的repository中,能夠被其餘工程做爲依賴來使用
  9. deploy:在整合或者發佈環境下執行,將最終版本的包拷貝到遠程的repository,使得其餘的開發者或者工程能夠共享。
  10. generate-sources:產生應用須要的任何額外的源代碼,如xdoclet。


5、Maven座標 (Coordinates) 
  Archetype插件經過名字爲pom.xml的文件建立了一個項目。這就是項目對象模型(POM),一個項目的聲明性描述。當Maven運行一個目標的時候,每一個目標都會訪問定義在項目POM裏的信息。Maven座標定義了一組標識,它們能夠用來惟一標識一個項目,一個依賴,或者Maven POM裏的一個插件。 
  groupId, artifactId, version和packaging。這些組合的標識符拼成了一個項目的座標,就像任何其它的座標系統,一個Maven座標是一個地址,即「空間」裏的某個點:從通常到特殊。當一個項目經過依賴,插件或者父項目引用和另一個項目關聯的時候,Maven經過座標來精肯定位一個項目。 apache

  • groupId :團體,公司,小組,組織,項目,或者其它團體。團體標識的約定是,它以建立這個項目的組織名稱的逆向域名(reverse domain name)開頭。
  • artifactId :在groupId下的表示一個單獨項目的惟一標識符。
  • version :一個項目的特定版本。發佈的項目有一個固定的版本標識來指向該項目的某一個特定的版本。而正在開發中的項目能夠用一個特殊的標識,這種標識給版本加上一個「SNAPSHOT」的標記。
  • packaging :項目的類型,默認是jar,描述了項目打包後的輸出。類型爲jar的項目產生一個JAR文件,類型爲war的項目產生一個web應用。


說明: 
(1)項目的打包格式也是Maven座標的重要組成部分,可是它不是項目惟一標識符的一個部分。一個項目的groupId:artifactId:version使之成爲一個獨一無二的項目;你不能同時有一個擁有一樣的groupId, artifactId和version標識的項目。 
(2)Maven插件和目標 (Plugins and Goals) :一個Maven插件是一個單個或者多個目標的集合。一個目標是一個明確的任務,它能夠做爲單獨的目標運行,或者做爲一個大的構建的一部分和其它目標一塊兒運行。一個目標是Maven中的一個「工做單元(unit of work)」。 
經常用速記符號:pluginId:goalId。例如,當提到Archetype插件的create目標的時候,咱們寫成archetype:create。 
6、配置Maven的本地倉庫目錄 
一、命令行直接加參數的方式 
maven [cmd] -Dmaven.home.local=D:/MavenRepo/.maven 
二、在用戶HOME目錄下建立build.properties文件,內容爲,注意/或者用\\,用\不行的。 
maven.home.local=D:/MavenRepo/.maven 
build.properties也能夠放在項目路徑下 
三、修改%MAVEN_HOME%\lib\maven.jar裏的defaults.properties文件,將 
maven.home.local = ${user.home}/.maven 
修改成 
maven.home.local = D:/MavenRepo/.maven 
四、項目裏的project.properies里加上一句 
maven.repo.local=D:/MavenRepo/.maven 
7、優化POM 
1.上移共同的依賴至dependencyManagement 
若是多於一個項目依賴於一個特定的依賴,你能夠在dependencyManagement中列出這個依賴。父POM包含一個版本和一組排除配置,全部的子POM須要使用groupId和artifactId引用這個依賴。若是依賴已經在dependencyManagement中列出,子項目能夠忽略版本和排除配置。 
2.爲兄弟項目使用內置的項目version和groupId 
使用{project.version}和${project.groupId}來引用兄弟項目。兄弟項目基本上一直共享一樣的groupId,也基本上一直共享一樣的發佈版本。使用${project.version}能夠幫你避免前面提到的兄弟版本不一致問題。 
8、優化插件 
   大部分複雜的Maven多模塊項目傾向於在頂層POM中定義全部的版本。這個頂層POM就成了影響整個項目的更改焦點。將版本號當作是Java類中的字符串字面量,若是你常常重複一個字面量,你可能會將它定義爲一個變量,當它須要變化的時候,你就只須要在一個地方更改它。而且能夠在頂層POM中管理(pluginManagement)插件配置,就像咱們在頂層POM中使用dependencyManagement片斷管理依賴同樣。如: 服務器

Xml代碼   收藏代碼
  1. <project>  
  2.   ...  
  3.   <properties>  
  4.     <hibernate.annotations.version>3.3.0.ga</hibernate.annotations.version>  
  5.     <hsqldb.version>1.8.0.7</hsqldb.version>  
  6.   </properties>  
  7. <build>  
  8.     <pluginManagement>  
  9.       <plugins>  
  10.         <plugin>  
  11.           <groupId>org.codehaus.mojo</groupId>  
  12.           <artifactId>hibernate3-maven-plugin</artifactId>  
  13.           <version>2.1</version>  
  14.           <configuration>  
  15.             <components>  
  16.               <component>  
  17.                 <name>hbm2ddl</name>  
  18.                 <implementation>annotationconfiguration</implementation>  
  19.               </component>  
  20.             </components>  
  21.           </configuration>  
  22.           <dependencies>  
  23.             <dependency>  
  24.               <groupId>hsqldb</groupId>  
  25.               <artifactId>hsqldb</artifactId>  
  26.               <version>${hsqldb.version}</version>  
  27.             </dependency>  
  28.           </dependencies>  
  29.         </plugin>  
  30.       </plugins>  
  31.     </pluginManagement>  
  32.   </build>    
  33.    ...  
  34. </project>  


   Maven Dependency插件可以幫助你發現對於依賴的直接引用。app

Java代碼   收藏代碼
  1. $ mvn dependency:analyze  

dependency:tree目標,該目標會列出項目中全部的直接和傳遞性依賴。dom

Java代碼   收藏代碼
  1. $ mvn dependency:tree  



附:Debugging with the Maven Jetty Plugin in Eclipse 
Step 1 
Go to the Run/External Tools/External Tools ..." menu item on the "Run" menu bar. Select "Program" and click the "New" button. On the "Main" tab, fill in the "Location:" as the full path to your "mvn" executable. For the "Working Directory:" select the workspace that matches your webapp. For "Arguments:" add jetty:run. 

Move to the "Environment" tab and click the "New" button to add a new variable named MAVEN_OPTS with the value: 

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y

If you supply suspend=n instead of suspend=y you can start immediately without running the debugger and launch the debugger at anytime you really wish to debug. 

Step 2 

Then, pull up the "Run/Debug/Debug ..." menu item and select "Remote Java Application" and click the "New" button. Fill in the dialog by selecting your webapp project for the "Project:" field, and ensure you are using the same port number as you specified in the address= property above. 

Now all you need to do is to Run/External Tools and select the name of the maven tool setup you created in step 1 to start the plugin and then Run/Debug and select the name of the debug setup you setup in step2. 

From instructions provided by Rolf Strijdhorst on the Maven mailing list 

Stopping Jetty 

In order to stop the jetty server the "Allow termination of remote VM" should be checked in debug dialog in Step 2. When you have the jetty server running and the debugger connected you can switch to the debug perspective. In the debug view, right click on the Java HotSpot(TM) Client VM[localhost:4000] and  chose terminate. This will stop the debugger and the jetty server.eclipse

相關文章
相關標籤/搜索