Maven2之旅
http://www.blogjava.net/sitinspring/category/23515.html
我的Maven2之旅:一.前言,準備及安裝.
自從Java誕生以來,打包,測試,代碼檢測和發布Java工程就成為困擾Java程序員的枷鎖,即使Ant出現,程序員深受困擾,而且Ant的Xml格式的Build文件的學習階梯又給程序員加重了一層負擔.程序員頭頂上的天空依然陰霾,只到有了Maven的出現.
Maven的主要功能有:
1.構建項目(Builds)
2.文檔編制(Documentation)
3.報告(Reporting)
4.依賴管理(Dependencies)
5.配置管理(SCMs)
6.發布管理(Releases)
和Ant一樣,Maven也是Apache的一個子項目,但要簡化和強大了許多,你可以從以下網頁(http://maven.apache.org)得到它的所有信息.以前用Ant構建的項目紛紛都轉向了Maven及其后繼版本Maven2.比如著名的Struts2(http://struts.apache.org/2.x/):
要在你的機器上安裝并運行Maven,首先你必須安裝了JDK1.4以上的版本,并且在環境變量中設置了JAVA_HOME,否則Maven將找不到JRE,然后把如下地址(http://archive.apache.org/dist/maven/binaries/maven-2.0.3-bin.zip)的文件下載到本地.請注意,這不是目前的最新版本,當前的最新版本是2.0.6,但下載文件似乎有問題.Linux下的版本請下載其它相關版本.
Maven在Window系統上的安裝.
一.將下載的文件maven-2.0.3-bin.zip解壓到本地,這里假設你解壓的路徑為:C:\maven-2.0.3.
二.將解壓路徑的bin目錄添加到你機器的環境變量中.
????? 具體步驟:
???? 1.解壓路徑的bin目錄為 C:\maven-2.0.3\bin ,則把此路徑拷貝下來.
????????????
???? 2.按下圖打開系統的環境變量選項,將上述地址添加到path變量的尾后,記得中間要加分號.
???? 3.添加完的結果如下圖:
?????????
??? 注:另一種方法是增加相應的環境變量maven_home=maven的解壓目錄,再在path中增加%maven_home%\bin;這兩種方法效果都是一樣的,各位可以選擇自己喜歡的一種.
三.測試:打開Command窗口,輸入mvn -version,如果按下圖輸出則表示安裝正確.
?????????
至此Maven安裝完成,輕松一下吧.如果希望對Maven2多了解一些,請下載這本電子書:
http://www.blogjava.net/Files/sitinspring/BetterBuildsWithMaven.rar
?
我的Maven2之旅:二.Maven常用命令
上一篇相信你已經安裝了好了Maven,這次只想把一些基本命令列舉一下,請把它們記在你的腦子中,懶一點也要記在你的筆記本上,因為你以后會常常用到它們.
1.創建Maven目錄
mvn archetype:create -DgroupId=com.yourCompanyName -DartifactId=yourAppName
2.測試
mvn test
3.編譯類
mvn compile
4.打包
mvn package
5.生成Site
mvn site
5.清除
mvn clean
以上命令都是在command窗口運行的.它們還可以混合運行,如mvn test compile package,在以后的講述中會逐漸用到它們.
附錄:
Maven的生命周期及其與之對應的命令:
validate:驗證工程是否正確,所有需要的資源是否可用。
compile:編譯項目的源代碼。
test-compile:編譯項目測試代碼。
test:使用已編譯的測試代碼,測試已編譯的源代碼。
package:已發布的格式,如jar,將已編譯的源代碼打包。
integration-test:在集成測試可以運行的環境中處理和發布包。
verify:運行任何檢查,驗證包是否有效且達到質量標準。
install:把包安裝在本地的repository中,可以被其他工程作為依賴來使用
deploy:在整合或者發布環境下執行,將最終版本的包拷貝到遠程的repository,使得其他的開發者或者工程可以共享。
generate-sources:產生應用需要的任何額外的源代碼,如xdoclet。
我的Maven2之旅:三.Maven的一小步,個人的一大步
上一篇已經講到了Maven的基本命令,今天我們就來小試牛刀一把.
此前,我們可以用Eclispe創建一個小的Java工程,本人創建了一個能輸出"Hello!Maven!"的工程,它只有一個類,一個函數,不用猜你也能想到里面寫的什么.
指的一提的是它的目錄結構,下面是這個工程目錄結構的截圖:
為什么要在src底下放兩層目錄呢,一會將見分曉.
接下來,我們使用Maven創建一個HelloMaven的Maven項目,打開cmd窗口,轉入你的Maven工程目錄(本人機器上是C:\tmp),然后輸入如下的命令:
mvn archetype:create -DgroupId=com.sitinspring -DartifactId=HelloMaven
其中,com.sitinspring告知了Maven工程的代碼根目錄,而HelloMaven是工程名.這段命令指示Maven創建一個HelloMaven的工程,它的代碼根目錄是com.sitinspring.命令運行后將生成一個名為HelloMaven的目錄,其中有主目錄,測試目錄和工程文件pom.xml.
接到你的命令,Maven開始工作了,它輸出了一大段文字,見下圖:
你將得到一個名叫HelloMaven的目錄,如下圖:
在HelloMaven目錄下,還將生成一個pom.xml的文件,它就是Maven生成的工程文件.暫時你不需要關心其具體內容.
因為接下來還有任務:把Eclispe工程中的Inlet.java文件放入C:\tmp\HelloMaven\src\main\java\com\sitinspring中.
然后打開cmd窗口,進入C:\tmp\HelloMaven目錄.執行命令:
mvn package
你將看到Maven再次輸出一堆信息.如下圖:
其后C:\tmp\HelloMaven的目錄結構如下圖:
在target目錄下,有classes目錄.這是生成的class文件;根目錄下還生成了我們的目標文件HelloMaven-1.0-SNAPSHOT.jar,它就是打包后的jar.
測試一下,我們打開cmd窗口,進入目錄 C:\tmp\HelloMaven\target,然后執行命令:
java -cp HelloMaven-1.0-SNAPSHOT.jar com.sitinspring.Inlet,你將看到Hello!Maven!被輸出出來.如下圖.
現在為止,我們未曾寫一句代碼就得到了項目的jar文件,你可以拿自己以前的工程來試試mvn package的功能了.
如果是Swing程序的話效果更好.下圖是Swing程序包執行的效果.
本文例子下載一:http://www.blogjava.net/Files/sitinspring/MavenPakcageExample01.zip
本文例子下載二:http://www.blogjava.net/Files/sitinspring/MavenPakcageExample02.zip
(這個例子就是上圖輸出的Swing程序,但Src路徑要深一些,所以DgroupId也不同,具體寫法請大家揣摩)
附錄:
Maven工程的目錄結構:
| Maven project root | ? | ? |
| ??? pom.xml | Maven2 project file | Maven2項目文件 |
| ??? src/ | ? | ? |
| ??????? main/ | project main directory | 項目主體目錄 |
| ??????????????? java | source code directory | 原碼目錄 |
| ??????????????? resources | the directory of resource?for source code | 原碼所需資源 |
| ??????????????? filters | the directory of filtering resource files | 原碼所需資源文件過濾 |
| ??????????????? assembly | Assembly descriptors | ? |
| ??????????????? config | the directory of configuration file? | 配置文件目錄 |
| ??????? test | ? | ? |
| ??????????????? java | test source code directory | 測試原碼目錄 |
| ??????????????? resources | the directory of resource?for the test source code | 測試原碼所需資源 |
| ??????????????? filters | the directory of filtering test resource files | 測試原碼所需資源文件過濾 |
| ??????? site | the directory of site resource | 與site相關的資源目錄 |
| ??? target | the directory for output | 輸出目錄 |
| ??????? classes | the directory for output classes | class 目錄 |
| ??????? test-classes | the directory for output test classes? | test class 目錄 |
| ??????? site | the directory for output site and reports | site 輸出目錄 |
我的Maven2之旅:四.Junit單元測試的活讓Maven自動去干
上一講已經說了打包,這次說說測試.首先準備測試材料,這里我做了一個Calculator類以及測試它的類TestCalculator,它們的代碼如下:
Calculator類:
package?com.sitinspring;
public?class?Calculator?{
????public?static?void?main(String[]?arg)?{
????????System.out.println("Hello!Maven!");
????}
????public?int?add(int?op1,?int?op2){
????????return?op1?+?op2;
????}
????public?int?sub(int?op1,?int?op2){
????????return?op1?-?op2;
????}
}
TestCalculator類(Eclipse下進行單元測試通過):
package?com.sitinspring;
import?junit.framework.TestCase;
public?class?TestCalculator?extends?TestCase{
????public?void?testAdd()?{
????????Calculator?calculator?=?new?Calculator();
????????int?result?=?calculator.add(50,?20);
????????assertEquals(70,?result);
????}
????public?void?testSub()?{
????????Calculator?calculator?=?new?Calculator();
????????int?result?=?calculator.sub(50,?20);
????????assertEquals(30,?result);
????}
}
我們的目標是讓Maven調用TestCalculator類來測試Calculator類.
首先我們還需要建立一個名為Calculator的Maven工程.請使用如下命令:
mvn archetype:create -DgroupId=com.sitinspring -DartifactId=Calculator
運行完畢后,展開Calculator目錄,我們將發現如圖結構:
簡而言之,Src下的main目錄是用來放置程序文件的,而Src下的main目錄是用來放置單元測試文件的.
所以,Calculator類應該被放入Calculator\src\main\java\com\sitinspring中;
而TestCalculator類應該被放入Calculator\src\test\java\com\sitinspring中.
如此辦理后,讓我們打開cmd窗口,進入Calculator目錄,執行命令:
mvn test
上圖可以看到TestCalculator類的執行結果顯示測試通過,與Eclipse中測試結果相同.
有時候,MVN test,就是這么簡單!
例程下載: http://www.blogjava.net/Files/sitinspring/MavenTest.zip
最后給大家留一個懸念,如果你安裝了Maven的話,請在你的硬盤中搜索".m2",看看里面有什么?
我的Maven2之旅:五.pom.xml基本元素介紹
上面就是前次HelloMaven工程的pom.xml文件,我們可以通過修改其中的元素使工程按照我們的意圖運行,對于接觸Maven的人,主要就是和pom.xml文件在打交道.
pom.xml文件基本節點介紹:
<project>:文件的根節點.
<modelversion>:pom.xml使用的對象模型版本.
<groupId>:創建項目的組織或團體的唯一Id.
<artifactId>:項目的唯一Id,可視為項目名.
<packaging>:打包物的擴展名,一般有JAR,WAR,EAR等
<version>:產品的版本號.
<name>:項目的顯示名,常用于Maven生成的文檔。
<url>:組織的站點,常用于Maven生成的文檔。
<description>:項目的描述,常用于Maven生成的文檔。
下面我們來修改一下這些節點如下:
將上面兩幅圖比較一下,可以看到version,name,url,description都發生了變化。
執行mvn clean
然后執行mvn package
剛才的變化將反映在工程中。
從結果上說,打包出的jar文件由原來的HelloMaven-1.0-SNAPSHOT.jar變成了HelloMaven-1.0.0.jar.這是Version元素修改造成的結果.
執行mvn site后,在\HelloMaven\target下將生成工程的site目錄:
點擊其中的project-info.html將出現如下畫面.
和首次展示的Struts2首頁畫面比較,只是簡陋一些,今天只是初體驗一下mvn site的效果,如果你將工程逐漸完善起來,我敢肯定它能達到或超過Struts2的Maven工程的效果.
我的Maven2之旅:六.在Maven工程中將資源文件打包
在Java項目中不只是jav文件,經常會有許多資源文件,如屬性文件,圖片資源什么的,如何把它們也一起加載到Maven工程中去呢?這個問題不難,利用resource就可以達到這個目的.因為${basedir}/src/main/resources都會編譯到jar文件中,而且該目錄下的內容將直接位于jar文件的頂部.
下圖是在前面已經用到過的程序Source Comparer程序,唯一不同的是它的Browse按鈕是圖片式的.
具體實現的代碼是這樣的:
URL?imageUrl=BrowsePanel.class.getResource(location);?
????????
browseBtn?=?new?JButton(new?ImageIcon(imageUrl));?
從上面的代碼可以看出,程序是從類的根路徑取得了圖片資源compare.GIF,再賦給按鈕browseBtn.所以Maven工程中也應該是一樣的處理方式.現在的問題是如何把圖片資源compare.GIF加載到jar文件中去.
Maven為此提供了一個方法,那就是在MavenResource\src\main下建立一個名為resources的目錄,再把圖片資源文件compare.GIF拷貝到里面,具體結構如下圖:
執行mvn package后,用解壓工具如WinRar打開MavenResource-1.0-SNAPSHOT.jar,可以發現圖片compare.GIF已經被打進去了.
如果打開cmd窗口,進入target目錄,執行命令:
java -cp MavenResource-1.0-SNAPSHOT.jar com.citigroup.junglesong.Inlet
執行的結果和在Eclipse中效果一致,這里就不再貼出了.
上面說的是程序執行時使用資源的情況,如果是測試代碼需要使用資源的話,可以${basedir}/src/test下新建一個resources目錄,將資源放入其中,測試代碼可以使用這樣的方式使用資源:
InputStream is = getClass().getResourceAsStream( "/test.properties" );
可見測試代碼加載資源和主體代碼加載資源是很相似的.
通過對pom文件中build 節點的修改,Maven還可以進行資源過濾,因為目前一時用不到暫時擱置一下,有興趣或需要的人可以到http://maven.apache.org/guides/getting-started/index.html#How%20do%20I%20filter%20resource%20files? 去看看.
本文例子下載:
http://www.blogjava.net/Files/sitinspring/MavenResource20070620211407.zip
?
我的Maven2之旅:七.加載第三方開源庫
java程序調用一堆第三方庫是很常見的事情,例子程序中就調用了網上常見庫jdom讀取xml文件.
import?java.io.InputStream;
import?java.util.Iterator;
import?java.util.List;
import?org.jdom.Document;
import?org.jdom.Element;
import?org.jdom.input.SAXBuilder;
public?class?Inlet{
????public?static?void?main(String[]?arg){????
????????try{
????????????SAXBuilder?builder=new?SAXBuilder?();
????????????InputStream?is?=Inlet.class.getResourceAsStream(?"/testfile.xml"?);
????????????Document?doc=builder.build(is);
????????????Element?root=doc.getRootElement();
????????????List?ls=root.getChildren();
????????????for(Iterator?it=ls.iterator();it.hasNext();){
???????????????Element?elm=(Element?)it.next();
???????????????System.out.println(elm.getName());
????????????}?
????????}
????????catch(Exception?ex){
????????????ex.printStackTrace();
????????}
????}
}
如何讓Maven工程也能找到Jdom庫呢,很簡單,添加一個dependency節點就能做到,詳情請見下列代碼的jdom處.
??xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/maven-v4_0_0.xsd">
??<modelVersion>4.0.0</modelVersion>
??<groupId>com.sitinspring</groupId>
??<artifactId>Maevn3ndPart</artifactId>
??<packaging>jar</packaging>
??<version>1.0-SNAPSHOT</version>
??<name>Maevn3ndPart</name>
??<url>http://maven.apache.org</url>
??<dependencies>
????<dependency>
??????<groupId>junit</groupId>
??????<artifactId>junit</artifactId>
??????<version>3.8.1</version>
??????<scope>test</scope>
????</dependency>
????<dependency>
??????<groupId>jdom</groupId>
??????<artifactId>jdom</artifactId>
??????<version>1.0</version>
??????<scope>compile</scope>
????</dependency>
??</dependencies>
</project>
然后執行Mvn compile就可以看見,Maven從網上下載了jdom庫到本地的repository目錄,請看下圖.
將dependency節點和repository中jdom路徑對比就可以知道,dependency節點中groupId對應路徑中第一層目錄,artifactId對應第二層,version對應第三層,而scope用于編譯則是compile.這些發現我們以后還將用到.
本文例程:
http://www.blogjava.net/Files/sitinspring/Maevn3ndPart20070621133225.zip
附錄:
Dependency Scope
在POM 4中,<dependency>中還引入了<scope>,它主要管理依賴的部署。目前<scope>可以使用5個值:
- compile,缺省值,適用于所有階段,會隨著項目一起發布。
- provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
- runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。
- test,只在測試時使用,用于編譯和運行測試代碼。不會隨項目發布。
- system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。
我的Maven2之旅:八.加載自定義庫
第七篇中講述了加載第三方開源庫的情況,但如果是公司或個人的私有庫的話這樣做就無效了.但我們可以根據上一篇中的發現"將dependency節點和repository中jdom路徑對比就可以知道,dependency節點中groupId對應路徑中第一層目錄,artifactId對應第二層,version對應第三層".因此采用手工在本地的repository目錄添加私有庫的方法.
下圖就是例程中的point庫在repository目錄中的路徑圖,將point.jar放在1.0.0目錄中就可以了.
對于無法通過網絡連接獲得第三方開源庫的情況也可以照此辦理.
如果這個jar也是使用Maven編譯成的,則可以用命令mvn install來安裝到本地Repository庫.
例程下載:
http://www.blogjava.net/Files/sitinspring/MavenSelfDependency20070621101501.zip
?
我的Maven2之旅:九.使用Maven一次編譯多個工程.
如果我們有許多Maven工程需要編譯,如果一個個敲命令怕要累死,寫批處理又有點不太正規,幸好Maven采用了Module節點解決了我們的問題,可以通過一次命令編譯打包所有的包.
下圖中的MavenA和MavenB是兩個需要編譯打包的工程,MavenModules是它們的上級工程.
MavenA和MavenB的pom.xml一點也不需要改變,而MavenModules中的pom.xml如下:
??xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/maven-v4_0_0.xsd">
??<modelVersion>4.0.0</modelVersion>
??<groupId>com.sitinspring</groupId>
??<artifactId>MavenModules</artifactId>
??<packaging>pom</packaging>
??<version>1.0.0</version>
??<name>MavenModules</name>
??<url>http://www.blogjava.net/sitinspring</url>
??<modules>
????<module>ModuleA</module>
????<module>ModuleB</module>
??</modules>
</project>
通過觀察可以發現,有兩點不同:
1.package節點設定為pom而不是jar,war等,這是主工程必需的,否則執行命令必報錯.
2.添加了modules節點和其下的兩個module節點,節點名正好是子目錄,這樣在MavenModules目錄下執行compile,package等命令就會深入子目錄去繼續執行.
挺簡單的,基本就是這么多.
例程下載:
http://www.blogjava.net/Files/sitinspring/MavenModules20070621135351.zip
?
我的Maven2之旅:十.更完整的報告.
以前我們嘗試過一次Mvn site命令,但由于主控文件pom.xml并不周全,信息不是很完整.
而例子中的節點相對完整多了,使用它執行mvn site命令會生成很完整的報告出來,以下就是這個文件的詳細內容:
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/maven-v4_0_0.xsd">
????<!--?The?Basics?-->
????<modelVersion>4.0.0</modelVersion>
????<groupId>com.citigroup.junglesong</groupId>
????<artifactId>MavenResource</artifactId>
????<packaging>jar</packaging>
????<version>1.0-SNAPSHOT</version>
????<name>MavenResource</name>
????<url>http://maven.apache.org</url>
????<!--?dependent?Libs?-->
????<dependencies>
????????<dependency>
????????????<groupId>junit</groupId>
????????????<artifactId>junit</artifactId>
????????????<version>3.8.1</version>
????????????<scope>test</scope>
????????</dependency>
????</dependencies>
????<!--?Build?Settings?-->
????<reporting>
????????<plugins>
????????????<plugin>
????????????????<artifactId>
????????????????????maven-project-info-reports-plugin
????????????????</artifactId>
????????????????<reportSets>
????????????????????<reportSet>
????????????????????????<id>sunlink</id>
????????????????????????<reports>
????????????????????????????<report>javadoc</report>
????????????????????????</reports>
????????????????????????<inherited>true</inherited>
????????????????????????<configuration>
????????????????????????????<links>
????????????????????????????????<link>
????????????????????????????????????http://java.sun.com/j2se/1.5.0/docs/api/
????????????????????????????????</link>
????????????????????????????</links>
????????????????????????</configuration>
????????????????????</reportSet>
????????????????</reportSets>
????????????</plugin>
????????????<plugin>
????????????????<groupId>org.apache.maven.plugins</groupId><!--Generate?Java?Doc?-->
????????????????<artifactId>maven-javadoc-plugin</artifactId>
????????????</plugin>
????????????<plugin>
????????????????<groupId>org.apache.maven.plugins</groupId><!--?Code?Check?-->
????????????????<artifactId>maven-checkstyle-plugin</artifactId>
????????????????<configuration>
????????????????????<configLocation>
????????????????????????config/sun_checks.xml
????????????????????</configLocation>
????????????????</configuration>
????????????</plugin>
????????????<plugin>
????????????????<groupId>org.codehaus.mojo</groupId><!--?Test?Report?-->
????????????????<artifactId>surefire-report-maven-plugin</artifactId>
????????????</plugin>
????????????<plugin>
????????????????<groupId>org.codehaus.mojo</groupId><!--?HTMLize?Source?Code?-->
????????????????<artifactId>jxr-maven-plugin</artifactId>
????????????</plugin>
????????????<plugin><!--?Find?Bugs?-->
????????????????<groupId>org.codehaus.mojo</groupId>
????????????????<artifactId>findbugs-maven-plugin</artifactId>
????????????</plugin>
????????</plugins>
????</reporting>
????<!--?More?Project?Information?-->
????<licenses>
????????<license>
????????????<name>Apache?2</name>
????????????<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
????????????<distribution>repo</distribution>
????????????<comments>A?business-friendly?OSS?license</comments>
????????</license>
????</licenses>
????<organization>
????????<name>SitInSpring</name>
????????<url>http://www.blogjava.net/sitinspring</url>
????</organization>
????<developers>
????????<developer>
????????????<id>sitinsprng</id>
????????????<name>SitInSpring</name>
????????????<email>SitInSpring@ufo.com</email>
????????????<url>http://www.blogjava.net/sitinspring</url>
????????????<organization>UFO</organization>
????????????<organizationUrl>http://www.UFO.org</organizationUrl>
????????????<roles>
????????????????<role>architect</role>
????????????????<role>developer</role>
????????????</roles>
????????????<timezone>+8</timezone>
????????????<properties>
????????????????<picUrl>http://www.mxjava.com/logo.gif</picUrl>
????????????</properties>
????????</developer>
????????<developer>
????????????<id>junglesong</id>
????????????<name>Junglesong</name>
????????????<email>junglesong@gmail.com</email>
????????????<url>http://www.blogjava.net/sitinspring</url>
????????????<organization>UFO</organization>
????????????<organizationUrl>http://www.UFO.org</organizationUrl>
????????????<roles>
????????????????<role>architect</role>
????????????????<role>developer</role>
????????????</roles>
????????????<timezone>+8</timezone>
????????????<properties>
????????????????<picUrl>
????????????????????http://foto.yculblog.com/junglesong/TxtNovelGarden.gif
????????????????</picUrl>
????????????</properties>
????????</developer>
????</developers>
????<contributors>
????????<contributor>
????????????<name>Alien</name>
????????????<email>Alien@hotmail.com</email>
????????????<url>http://Alien.com</url>
????????????<organization>AlienOrganization</organization>
????????????<organizationUrl>
????????????????http://AlienOrganization.com
????????????</organizationUrl>
????????????<roles>
????????????????<role>tester</role>
????????????</roles>
????????????<timezone>-5</timezone>
????????????<properties>
????????????????<gtalk>some.name@gmail.com</gtalk>
????????????</properties>
????????</contributor>
????</contributors>
????<repositories>
????????<repository>
????????????<releases>
????????????????<enabled>false</enabled>
????????????????<updatePolicy>always</updatePolicy>
????????????????<checksumPolicy>warn</checksumPolicy>
????????????</releases>
????????????<snapshots>
????????????????<enabled>true</enabled>
????????????????<updatePolicy>never</updatePolicy>
????????????????<checksumPolicy>fail</checksumPolicy>
????????????</snapshots>
????????????<id>codehausSnapshots</id>
????????????<name>Codehaus?Snapshots</name>
????????????<url>http://snapshots.maven.codehaus.org/maven2</url>
????????????<layout>default</layout>
????????</repository>
????</repositories>
????<!--?Environment?Settings?-->
????<mailingLists>
????????<mailingList>
????????????<name>User?List</name>
????????????<subscribe>user-subscribe@127.0.0.1</subscribe>
????????????<unsubscribe>user-unsubscribe@127.0.0.1</unsubscribe>
????????????<post>user@127.0.0.1</post>
????????????<archive>http://127.0.0.1/user/</archive>
????????????<otherArchives>
????????????????<otherArchive>
????????????????????http://base.google.com/base/1/127.0.0.1
????????????????</otherArchive>
????????????</otherArchives>
????????</mailingList>
????</mailingLists>
</project>
上文中,粗略部分加上了注釋,具體細節您可以和site下生成的系列文件對照一下,相信不用我再贅述.如果有疑問請參看Maven的pom介紹文檔.
可以其中需要的部分摘取下來放到您的pom.xml中去,以生成所需要的報告.
例程下載:
http://www.blogjava.net/Files/sitinspring/MavenResourceReportsAndAddInfo20070622153905.zip
?
我的Maven2之旅:十一.打包一個web工程.
目標:將一個web工程打包.
其目錄如下:
使用如下命令創建Maven工程:
mvn archetype:create -DgroupId=com.junglesong.mytodo -DartifactId=mytodo -DarchetypeArtifactId=maven-archetype-webapp
創建工程后我們還需要做以下工作:
1.將Eclipse工程MyTodo\WEB-INF\src\com下所有目錄及文件拷貝到maven工程mytodo\src\main\java下,這是做源碼拷貝工作.
2.將Eclipse工程MyTodo\WEB-INF下web.xml和todo.xml拷貝到maven工程mytodo\src\main\webapp\WEB-INF下,web.xml就不肖說了,而todo.xml是做持久化用的,供源碼使用,故而要拷貝.
3.將Eclipse工程MyTodo下web目錄拷貝到mytodo\src\main\webapp下,這是做頁面文件拷貝工作.
到此文件轉移完成.
此后,我們還需要修改一下pom.xml文件,以下是工程中使用的文件源碼:
??xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/maven-v4_0_0.xsd">
??<modelVersion>4.0.0</modelVersion>
??<groupId>com.junglesong.mytodo</groupId>
??<artifactId>mytodo</artifactId>
??<packaging>war</packaging>
??<version>1.0-SNAPSHOT</version>
??<name>mytodo?Maven?Webapp</name>
??<url>http://maven.apache.org</url>
??<dependencies>
????<dependency>
??????<groupId>junit</groupId>
??????<artifactId>junit</artifactId>
??????<version>3.8.1</version>
??????<scope>test</scope>
????</dependency>
????<dependency>
??????<groupId>dom4j</groupId>
??????<artifactId>dom4j</artifactId>
??????<version>1.6.1</version>
??????<scope>compile</scope>
????</dependency>
????<dependency>
??????<groupId>javax.servlet</groupId>
??????<artifactId>servlet-api</artifactId>
??????<version>2.4</version>
??????<scope>provided</scope>
????</dependency>
??</dependencies>
??<build>
????<finalName>mytodo</finalName>
??</build>
</project>
值得注意的是dependency中servlet一處的寫法.
此后執行mvn package 我們就會得到打包文件mytodo.war.
打開Tomcat Web Application Manager 頁面,將mytodo.war載入后,輸入:
http://127.0.0.1:8080/mytodo/ShowPage
將出現如下畫面:
執行原有的操作都能正確反映,說明我們這一路過程都是正確的.
例程下載:
http://www.blogjava.net/Files/sitinspring/mytodoMvnPrj20070626094131.zip
?
我的Maven2之旅:十二.使用JDK1.5編譯Maven工程
現在JDK1.5已經越來越普及了,使用它編寫或者改寫的程序也越來越多,當我們把符合JDK1.5新語法特征的程序送給maven編譯時會出現下列問題.
這時該如何使用 -source 1.5 以啟用泛型呢,將pom.xml文件添加一段即可.請看完整的pom.xml:
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/maven-v4_0_0.xsd">
????<modelVersion>4.0.0</modelVersion>
????<groupId>com.junglesong</groupId>
????<artifactId>sqlanywhere</artifactId>
????<packaging>jar</packaging>
????<version>1.0.3</version>
????<name>sqlanywhere</name>
????<url>http://maven.apache.org</url>
????<dependencies>
????????<dependency>
????????????<groupId>junit</groupId>
????????????<artifactId>junit</artifactId>
????????????<version>3.8.1</version>
????????????<scope>test</scope>
????????</dependency>
????????<dependency>
????????????<groupId>dom4j</groupId>
????????????<artifactId>dom4j</artifactId>
????????????<version>1.6.1</version>
????????????<scope>compile</scope>
????????</dependency>
????????<dependency>
????????????<groupId>log4j</groupId>
????????????<artifactId>log4j</artifactId>
????????????<version>1.2.14</version>
????????????<scope>compile</scope>
????????</dependency>
????</dependencies>
????<build>
????????<finalName>sqlanywhere1.0.3</finalName>
????????<plugins>
????????????<plugin>
????????????????<artifactId>maven-compiler-plugin</artifactId>
????????????????<configuration>
????????????????????<source>1.5</source>
????????????????????<target>1.5</target>
????????????????</configuration>
????????????</plugin>
????????</plugins>
????</build>
</project>
上面<build>節點中的<plugin>部分就是我們要添加的,就這么簡單.
????????????????<artifactId>maven-compiler-plugin</artifactId>
????????????????<configuration>
????????????????????<source>1.5</source>
????????????????????<target>1.5</target>
????????????????</configuration>
????????????</plugin>
?
此后mvn將使用jDK1.5編譯程序.
總結
- 上一篇: 使用 Apache MINA 开发高性能
- 下一篇: maven 配置篇 之pom.xml