Maven2 的簡單用法

1.Maven的安裝
1.1Windows 2000/xp下的安裝
1.      解壓縮maven-2.0.2-bin.zip到你希望安裝Maven 2.0.2的所在目錄。這裏假設你選擇了C:\ProgramFiles\Apache Software Foundation\maven-2.0.2.
2.      將C:\Program Files\Apache Software Foundation\maven-2.0.2\bin目錄加入到你的%path%環境變量中。
3.      同時,確認JAVA_HOME是否正確設置成功。
4.      運行 mvn --version 確認是否安裝成功。
顯示Maven version: 2.0.2 則表示安裝成功。
1.2基於Unxibased的操作系統(LinuxSolaris and Mac OS X
1.      解壓縮發佈包到你希望安裝Maven 2.0.2的所在目錄。這裏假設你選擇了/usr/local/maven-
2.      將/usr/local/maven-2.0.2/bin目錄加入到你的path環境變量中,例如:PATH=/usr/local/maven-2.0.2y/bin: $PATH
3.      同時,確認JAVA_HOME是否正確設置成功。
4.      運行 mvn --version 確認是否安裝成功。
顯示Maven version: 2.0.2 則表示安裝成功。
 
2.Maven2.0的一些優點:
--標準的項目佈局和項目結構生成器
--多項目支持(只對開發環境相同的項目)

--在開發者需要的時候及時地下載新的插件和功能部件(主要的好處)
--標準的依賴管理機制
--生成最新項目信息的網站
--集成了源代碼控制軟件:CVS和Subversion
 
2.1項目標準化(提供預定義的目錄模板
      Maven一個重要特性是定義了項目的標準模板,官方說法是最佳實踐。好的目錄結構可以使開發人員更容易理解項目,爲以後的維護工作也打下良好的基礎。Maven2根據業界公認的最佳目錄結構,爲開發者提供了缺省的標準目錄模板。Maven2的標準目錄結構如下:
使用目錄模板,可以使pom.xml更簡潔。因爲Maven2已經根據缺省目錄,預定義了相關的動作,而無需人工的干預。以resources目錄爲例:
  • src/main/resources,負責管理項目主體的資源。在使用Maven2執行compile之後,這個目錄中的所有文件及子目錄,會複製到target/classes目錄中,爲以後的打包提供了方便。
  • src/test/resources,負責管理項目測試的資源。在使用Maven2執行test-compile之後,這個目錄中的所有文件及子目錄,會複製到target/test-classes目錄中,爲後續的測試做好了準備。
 
      可以通過命令mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app創建一個單一的maven項目。創建好的項目,具有了特定的項目結構。這個項目結構是參考業界的最佳實踐而成,爲後面使用統一的maven命令打下了基礎,如測試mvn test、打包mvn package(在打包時需要指定web.xml,規範的結構可以不用指定等,無需寫一行腳本,就可以方便的實現衆多功能。Maven還提供其它一些類型模板,可以通過添加-DarchetypeArtifactId=type}創建,如-DarchetypeArtifactId=maven-archetype-site,生成site類型的項目。
   有了這個標準,項目間能方便的進行交流,你也很容易瞭解其它使用maven項目的結構。對於企業來說,引入maven就自然引入了規範,這可比費時費力的寫文檔,定規範有效的多了。
 
2.2文檔和報告
使用mvn site可以快速生成項目站點,apache很多開源項目站點都採用maven生成,會出現built by maven字樣的圖標。
maven提供的針對如junitcheckstylepmd等的插件,能夠方便的進行測試和檢查並能直接生成報告。使用都很簡單,如mvn surefire-report:report 就能自動進行junit測試,並生成junit報告,mvn pmd:pmd生成pmd報告。具體使用可以在http://maven.apache.org/plugins/index.html找到。
2.3類庫管理
Maven一個很重要的特色就是類庫管理。通過在pom.xml中定義jar包版本和依賴,能夠方便的管理jar文件。以下是一個簡單的jar定義片斷:
<dependency>                                                                      
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>3.1</version>
      <type>jar</type>
      <scope>runtime</scope>
 </dependency>
這個片斷告訴我們依賴的jargroupIdorg.hibernateartifactIdhibernate版本爲3.1scoperuntime。在實際項目中會將M2_REPO(maven本地倉庫地址)/ org/hibernate / hibernate /3.1/ hibernate -3.1.jar放入classpath
同時maven會通過pom.xml管理jar包間的依賴。比如上面的hibernate-3.1.jar同級目錄肯定會有一個hibernate -3.1.pom,在這個pom文件中指定了這個jar對其它一些jar的依賴。而這個pom文件是遠程倉庫提供,無需進行修改,執行maven相關命令就會自動根據相關依賴去下載jar包。這樣只需定義對hibernate的依賴而無需關心相關jar,在構建項目上方便了很多。
因爲pom文件對jar的管理,也產生了一個很吸引人的特性:項目文件很小。以往一個web項目中,jar文件都要放入WEB-INF/lib下,並放入cvs(svn)中,很容易就達到幾十M。而通過maven,只需一個pom.xml,在執行mvn eclipse:eclipse時再去遠程倉庫下載,項目文件一般只需幾百K
<dependency>中還引入了<scope>,它主要管理依賴的部署。目前<scope>可以使用5個值:
compile,缺省值,適用於所有階段,會隨着項目一起發佈。
provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。
test,只在測試時使用,用於編譯和運行測試代碼。不會隨項目發佈。
system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。
2.4發佈管理
使用maven可以方便的進行項目發表管理。在項目開發到一定階段,可以使用mvn package打包,它會自動先運行mvn test,跑所有的testcase,只有全部通過才能正確打包。生成的war包(如果項目的packagingwar)在target目錄下。這個war包與使用ant腳本生成一樣,但無需一行腳本,這也是maven對比ant的優勢之一。使用mvn install將編譯和打包好的文件發佈到distributionManager指定的遠程repository。使用mvn deploy可以自動管理項目版本。
3.常用的命令
您可以在Maven安裝目錄下的conf目錄中,或者項目自身中修改Maven遠程存儲庫的選擇。POM是“項目對象模型”的縮寫。
創建完項目後,我們可以往項目裏添加代碼並使用Maven的所有全新技巧。注意以下命令必須在pom.xml文件所在的目錄中運行。
--mvn test:運行應用程序中的單元測試
--mvn package:依據項目生成jar文件
--mvn
install,把包安裝在本地的repository中,可以被其他工程作爲依賴來使用
--mvn site:生成項目相關信息的網站
--mvn clean:清除目標目錄中的生成結果
--mvn eclipse:eclipse:生成Eclipse項目文件
--mvn deploy,在整合或者發佈環境下執行,將最終版本的包拷貝到遠程repository,使得其他的開發者或者工程可以共享。
可以通過對目標及相位的組合使得一個命令完成多個功能,比如:
 mvn clean dependency:copy-dependencies package
關於常用命令的詳解,見參考資料。
4.第一個例子
參見《Maven入門--概念與實例
 
D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=app
該工程的groupId是ce.demo.mvn,那麼該工程的源文件將放在Java包ce.demo.mvn中。artifactId是app,那麼該工程根目錄的名稱將爲app。
D:\maven\demo>mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=webapp -DarchetypeArtifactId=maven-archetype-webapp
此命令與創建app的命令的不同之處是,多設置了一個屬性archetypeArtifacttId,該屬性的值爲maven-archetype-webapp。即告訴Maven,將要創建的工程是一個Web應用工程。創建app工程時沒有使用該屬性值,是由於archetype默認創建的是應用程序工程。詳細的解釋及命令參數見http://maven.apache.org/plugins/
不用擔心如何從WEB-INF/lib目錄中得到依賴項,在依賴屬性值被設置成compile的情況下,Maven會自動包含依賴項。也可以將以下代碼添加到pom.xml文件中來改變war文件的名稱:

              將本地的存儲庫放在一臺web服務器上也同樣是個便利之舉,這樣整個開發團隊就能從此獲益,每個人都沒有必要去管理自己的存儲庫了。改變Maven的存儲庫路徑只需簡單地編輯其安裝目錄下conf文件夾下面的settings.xml文件即可。(詳情見私服的架設)
5.文檔編制
對於如何創建和編制文檔,maven有一個簡單的示例命令:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-site
執行了以上命令後,我們將得到一個目錄結構:
你現在可以看到一個$basedir/src/site目錄,以及它包含的一些站點描述文件(site.xml,site_fr_xml),和各種maven支持的文檔格式相對應的目錄和示例文檔都已經產生。
以上的創建只是示例,我們自己創建時就沒有命令行使用了,只能按照上面的目錄結構創建我們需要的文檔mvn site並在文檔中寫入我們工程的信息。 創建完成後,運行
關於文檔編制的詳細說明,見參考資料。
6.依賴管理
一個簡單的例子。比如我們要添加一個log4j到我們的工程中。首先.需要了解log4j的groupId, artifactId, and version信息。可在google上搜索“site:www.ibiblio.org maven2 log4j”。這樣在搜索結果裏可以找到/maven2/log4j/log4j (or /pub/packages/maven2/log4j/log4j)這樣的目錄,在這個目錄中有一個文件叫做maven-metadata.xml。根據這個文件可以知道groupId爲log4j,artifactId爲log4j,version當然要用最新的。scope我們設置爲compile。這樣我們使用mvn compile 編譯工程時,會看到mvn下載了log4j到我們的本地倉庫。
 
7.配置存儲庫
要求項目的每個開發者必須在conf目錄中配置存儲庫是不方便的,所以Maven可以同時查看多個存儲庫並且將它們全部配置在pom.xml文件中。讓我們看看一個例子,它展示瞭如何在應用程序用使用多個存儲庫。在以下從pom.xml文件摘錄的片斷中,我們設置了兩個存儲庫來讓Maven尋找依賴項。Ibiblio一直是默認的存儲庫,我們又添加了Planet Mirror作爲後援存儲庫。我們也可以讓團隊使用的本地web服務器作爲第二個存儲庫。
 
<repositories>
    <repository>
      <id>Ibiblio</id>
      <name>Ibiblio</name>
      <url>http://www.ibiblio.org/maven/</url>           //此處按實際地址寫,也有可能是//http://mirrors.ibiblio.org/pub/mirrors/maven2/org,看出錯報告調整。對於找不到的jar包要寫出他的真實路徑。
    </repository>
    <repository>
      <id>PlanetMirror</id>
      <name>Planet Mirror</name>
      <url>http://public.planetmirror.com/pub/maven/</url>
    </repository>
</repositories>
 
當下載某些jar包時,會自動把相關依賴的包都下載下來。
如下面所示,會自動下載對應文件夾中pom.xml文件上所要求的包。
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jpa</artifactId>
      <version>2.0</version>
      <scope>test</scope>               //scopecompile時,在執行mvn package時,會將該包拷貝到target\{projectName}\WEB-INF\lib\目錄下
    </dependency>
若在下載過程中出現java.net.SocketException: Connection reset錯誤估計是該連接存在但是下載不了。換別的網址或換個版本下載吧。若出現Failed to resolve artifact則估計是根本就不存在該連接。查看一下實際下載的地址是否存在。
Maven是基於中央倉庫的編譯,即把編譯所需要的資源放在一箇中央倉庫裏,如jar,tld,pom,等。當編譯的時候,maven會自動在倉庫中找到相應的包,如果本地倉庫沒有,則從設定好的遠程倉庫中下載到本地。這一切都是自動的,而ant需要自己定義了。這個好處導致的結果就是,用maven編譯的項目在發佈的時候只需要發佈源碼,小得很,而ant的發佈則要把所有的包一起發佈,顯然maven又勝了一籌。
      編譯時,出錯的測試代碼,只能顯示到如下程度:
Running jp.co.benic.usp.webapp.action.USPJ320ActionTest
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.266 sec <<< FAILURE!
Running jp.co.benic.usp.webapp.action.USPJ510ActionTest
Tests run: 4, Failures: 0, Errors: 4, Skipped: 0, Time elapsed: 0.515 sec <<< FAILURE!
若想看完整的錯誤信息,需要到target\surefire-reports目錄下,看相關的錯誤日誌文件。
              對於在下載jar時,不想下載他所自帶的依賴的某些包,可以用<dependency>
<exclusions>
                    
<exclusion>
                        
<groupId>dom4j</groupId>
                        
<artifactId>dom4j</artifactId>
                    
</exclusion>                    
                
</exclusions>
</dependency>將指定的包過濾掉。
缺點:編譯的過程沒有日誌輸出。(手動設置?)
8.私服的架設
自己建個私服是不錯的主意。其實也簡單,隨便拿臺http服務器,把${user.home}/.m2/ 目錄傳上去就行了
    
pom文件中,把私服的http url寫在官網的前面。   
 <repositories>
        
<repository>
            
<id>springside</id>
            
<url>http://www.springside.org.cn/maven2</url>
        
</repository>
        
<repository>
            
<id>maven</id>
            
<name>slowly office site</name>
            
<url>http://repo1.maven.org/maven2</url>
        
</repository>
    
</repositories>
9.如何部署jar到自己的遠程repository
(但因爲目前只支持scp這種遠程拷貝方法,而不知道如何在windows中使用scp,顧此處沒有實現)
pom.xml中添加如下內容
 
<distributionManagement>
    <repository>
      <id>mycompany-repository</id>
      <name>MyCompany Repository</name>
      <url>scp://repository.mycompany.com/repository/maven2</url>
    </repository>
 </distributionManagement>
 
 
同樣在用戶的settings.xml中也要定義服務器
 
<settings>
 <servers>
    <server>
      <id>mycompany-repository</id>
      <username>jvanzyl</username>
      <!-- Default value is ~/.ssh/id_dsa -->
      <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
      <passphrase>my_key_passphrase</passphrase>
    </server>
 </servers>
</settings>
deploy的介紹。deploy:deploy-file從遠程倉庫安裝一個資源;deploy:deploy部署一個資源到遠庫。程倉
http://maven.apache.org/plugins/index.html   介紹maven的有效的插件及每個命令都是用來做什麼的。
10.如何使用Maven2打包你的Web應用程序?
解決方法
      pom.xml的設置
             打包類型設置爲war
             <packaging>war</packaging>
             如果項目的layout不是Maven2默認的可通過修改plugin的配置進行設置例如WebRoot路徑的設置如下
             <build>
                 <!-- war包名稱 -->
                 <finalName>mywebapp</finalName>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-war-plugin</artifactId>
                         <configuration>
                             <!-- 設置WebContent目錄爲Web目錄 -->
                             <warSourceDirectory>WebContent</warSourceDirectory>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
 
打包命令行mvn clean:clean package
 
使用maven2打包時,可以過濾掉不想被打包的文件或文件夾。只要在pom.xml文件中做如下設置即可
<build>
    <filters>
      <filter>src/main/filters/filter.properties</filter>
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
 </build>
11.Maven和eclipse工具的合作
當有了以上的工程目錄,無論是webapp工程,還是app,我們都希望在集成開發環境中開發。Maven如何和IDE集成。現在我們就來進行講解。
11.1首先要讓eclipse知道Maven 2的repository(倉庫)的路徑
因此要設置一個M2_REPO的變量爲classpath。
可以使用命令行的方式來設置:
mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo
還可以在eclipse中定義一個新的classpath變量通過在eclipse的菜單上選擇Window> Preferences. 選擇Java > Build Path > Classpath Variables page.
11.2生成eclipse的工程文件。
使用命令行
mvn eclipse:eclipse
這樣通過在eclipse的菜單上選擇File >Import >Existing Projects into Workspace,就可以將工程導入eclipse中。
 
通過以上2個步驟,我們就可以利用eclipse來進行開發工作了。
11.3Eclipse插件mavenide
同時在eclipse中我們可以下載一個maven的插件,用來輔助eclipse進行maven工程的開發工作。這個插件名稱叫做mavenide。
這個插件可使用以下更新站點:http://m2eclipse.codehaus.org/
並且非常方便的是,這裏還提供了一個flash的演示來介紹如何安裝此插件,這個flash演示的觀看地址在:
要正常使用此插件請注意以下問題:
eclipse使用3.1或以上版本。
Mavenide的插件爲0.0.5不要安裝錯誤了。
通過筆者在安裝好此插件的一些使用後,看到了此插件的以下一些特性。
1.可以方便的添加依賴。
2.在編輯完pom.xml<sp>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章