日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Maven起步-教你開(kāi)始使用Maven

 smoking_boy 2005-08-28
摘要:
如果你已經(jīng)有十次輸入同樣的Ant targets來(lái)編譯你的代碼、jar或者war、生成javadocs,你一定會(huì)自問(wèn),是否有有一個(gè)重復(fù)性更少卻能同樣完成該工作的方法。Maven便提供了這樣一種選擇,將你的注意力從作業(yè)層轉(zhuǎn)移到項(xiàng)目管理層。Maven項(xiàng)目已經(jīng)能夠知道如何構(gòu)建和捆綁代碼,運(yùn)行測(cè)試,生成文檔并宿主項(xiàng)目網(wǎng)頁(yè)??赐瓯疚?,你應(yīng)該能夠從頭建立一個(gè)Maven的項(xiàng)目,使用Maven進(jìn)行相關(guān)管理,創(chuàng)建基于某些感興趣報(bào)告的簡(jiǎn)單的web站點(diǎn)。


本文Matrix永久鏡像:http://www./resource/article/43/43661_Maven.html
說(shuō)明:本文可能由Matrix原創(chuàng),也可能由Matrix的會(huì)員整理,或者由
Matrix的Crawler在全球知名Java或者其他技術(shù)相關(guān)站點(diǎn)抓取并永久
保留鏡像,Matrix會(huì)保留所有原來(lái)的出處URL,并在顯著地方作出說(shuō)明,
如果你發(fā)覺(jué)出處URL有誤,請(qǐng)聯(lián)系Matrix改正.
Maven起步

作者:Timothy M.O‘Brien, Vincent Massol

翻譯:Revenger


版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
英文原文地址:
http://www./pub/a/onjava/excerpt/mavenadn_ch01/index.html
中文地址:
http://www./resource/article/43/43661_Maven.html
關(guān)鍵詞: Maven Ant Java




編者注:

如果你已經(jīng)有十次輸入同樣的Ant targets來(lái)編譯你的代碼、jar或者war、生成javadocs,你一定會(huì)自問(wèn),是否有有一個(gè)重復(fù)性更少卻能同樣完成該工作的方法。Maven便提供了這樣一種選擇,將你的注意力從作業(yè)層轉(zhuǎn)移到項(xiàng)目管理層。Maven項(xiàng)目已經(jīng)能夠知道如何構(gòu)建和捆綁代碼,運(yùn)行測(cè)試,生成文檔并宿主項(xiàng)目網(wǎng)頁(yè)。

O‘Reilly‘s的新書(shū)Maven:A Developer‘s Notebook幫你提升你的項(xiàng)目、使其盡快的運(yùn)行起來(lái),同時(shí)也提供了對(duì)Maven插件及其團(tuán)隊(duì)協(xié)作等高級(jí)特性的深度考察。在“Maven Jump-Start” (656K PDF)的示范章節(jié)中,作者Vincent Massol和Timothy M.O‘Brien向你展示了如何安裝Maven,如何開(kāi)始你初次的構(gòu)建,研究如何使其與IDEs集成極其資源管等特性。

Vincent Massol是Jakarta Catus framework(框架)的創(chuàng)建者。其后他花費(fèi)4年的時(shí)間在幾個(gè)大項(xiàng)目(主要是J2EE)的架構(gòu)技術(shù)上。他現(xiàn)在是Pivolis的創(chuàng)辦人和CTO,這是一家專注于應(yīng)用敏捷方法進(jìn)行軟件開(kāi)發(fā)的公司。他現(xiàn)在居住在法國(guó)的首都City of Light(巴黎)。

Timothy M. O‘Brien作為一個(gè)專業(yè)的歌手/程序員現(xiàn)正在芝加哥地區(qū)工作和生活。

image


讓我們開(kāi)始使用Maven。在本章結(jié)束時(shí),你應(yīng)該能夠從頭建立一個(gè)Maven的項(xiàng)目,使用Maven進(jìn)行相關(guān)管理,創(chuàng)建基于某些感興趣報(bào)告的簡(jiǎn)單的web站點(diǎn)。

安裝Maven
開(kāi)始本書(shū)以前,你有一些必備的安裝工作。本書(shū)中的例子用Java1.4.2編寫(xiě),Maven能夠兼容Java1.4.2和Java1.5.0。本書(shū)中所寫(xiě)Maven的最新版本是在編寫(xiě)本書(shū)時(shí)發(fā)布的—Maven 1.0.2。除JDK和Maven1.0.2之外,你還需要連接到Internet,Maven將通過(guò)公網(wǎng)站點(diǎn)下載相關(guān)其需要的。那么,前進(jìn),安裝Maven吧。

我該如何做?
從Apache Software Foundation(ASF)下載Maven。進(jìn)入http://maven./從左側(cè)的導(dǎo)航菜單中的Getting Maven菜單選擇下載。它將帶你進(jìn)入一個(gè)讓你選擇Windows 安裝包、zip文件、tar‘d.bzip文件或者tar‘d.gzip文件。下載適合你平臺(tái)的分類。

我該如何做?
從Apache Software Foundation(ASF)下載Maven。進(jìn)入http://maven./從左側(cè)的導(dǎo)航菜單中的Getting Maven菜單選擇下載。它將帶你進(jìn)入一個(gè)讓你選擇Windows 安裝包、zip文件、tar‘d.bzip文件或者tar‘d.gzip文件。下載適合你平臺(tái)的分類。

提示

某些Developer‘s Notebook中涉及的插件未與Maven1.0.2
綁定。請(qǐng)參考第6章并且附錄A有安裝Maven所需插件的全部
列表以及詳細(xì)說(shuō)明。



在Microsoft Windows平臺(tái),下載Windows安裝包(maven-1.0.2.exe),跟隨自動(dòng)安裝過(guò)程中的提示。在使用Maven Windows 安裝器進(jìn)行安裝后,你應(yīng)該定義一個(gè)用戶環(huán)境變量,MAVEN_HOME,指向你本地的Maven安裝。你此時(shí)需要進(jìn)入控制面版→系統(tǒng)→高級(jí)選擇環(huán)境變量按鈕,添加%MAVEN_HOME%\bin到你的PATH環(huán)境變量。進(jìn)入命令提示行運(yùn)行cmd.exe,如果Maven安裝成功,你將能夠看到命令行有下面的輸出:
C:\dev\mavenbook\code>maven -v
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ‘ \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2

如果你愿意安裝Maven到一個(gè)除了C:\Program Files\Apache Software Foundation\Maven 1.0.2的目錄,你也可以下載Maven1.0.2.zip文件,解壓縮到任何目錄。設(shè)置MAVEN_HOME指 向到Maven解壓縮的目錄,并且添加%MAVEN_HOME%\Bin到你的PATH環(huán)境變量。

在Unix平臺(tái),下載tar‘d.zip文件(Maven-1.0.2.tar.gz)并接壓縮tar xvzf maven-1.0.2.tar.gz到你選擇的目錄。本試驗(yàn)假設(shè)你解壓Maven到/usr/local/maven-1.0.2目錄下。你此時(shí)需要設(shè)置兩個(gè)環(huán)境變量,MAVEN_HOME和PATH。下面的命令為這兩個(gè)變量設(shè)置適當(dāng)?shù)闹担?BR>[tobrien@mavenbook tobrien]$ export MAVEN_HOME=/usr/local/maven-1.0.2
[tobrien@mavenbook tobrien]$ export PATH=${PATH}:${MAVEN_HOME}/bin
如果Maven被成功安裝到你的機(jī)器,你能夠看到與Windows系統(tǒng)同樣的輸出。恭喜!你已經(jīng)成安裝了Maven。

提示

有些人喜歡保存本地應(yīng)用程序在Unix下的/opt目錄或
Windows下的c:\apps。你可以根據(jù)個(gè)人喜好安裝Maven。


剛剛發(fā)生了什么?
你剛剛安裝了Maven1.0.2并且配置了一些環(huán)境變量。是的!一旦你對(duì)MAVEN_HOME進(jìn)行了有效的設(shè)置或是maven.bat或maven.sh已經(jīng)存在,你已經(jīng)能夠完成Developer‘s Notebook本次的實(shí)驗(yàn)。

關(guān)于....
..Maven 2?

是時(shí)機(jī)提及Maven 2(有時(shí)也被稱為“m2”)。Maven 2完成了對(duì)Maven 1的重寫(xiě)。重寫(xiě)的首要目的是要提供了強(qiáng)大的Jave構(gòu)建和包含API的項(xiàng)目,允許Maven被植入任何地方,尤其是高級(jí)別的產(chǎn)品如IDEs、質(zhì)量工具、報(bào)告工具等這些。Maven 2構(gòu)建生命周期的概念正式話,其比Maven更易擴(kuò)展。

Maven 1和Maven 2有許多共同點(diǎn),但它們還有幾個(gè)主要的不同之處。在書(shū)中的各個(gè)部分我們盡可能提示你所希望了解的那些不同之處。更多關(guān)于Maven 2的信息,請(qǐng)轉(zhuǎn)到http://maven./下載Maven 2的體驗(yàn)版本,并加入Maven用戶或開(kāi)發(fā)者郵件列表。如果你聽(tīng)過(guò)Continuous Integration,你可能也想看一看命名為Continuum的Maven子項(xiàng)目,地址在http://maven./continuum。

開(kāi)始一個(gè)新的項(xiàng)目
創(chuàng)建新項(xiàng)目的爭(zhēng)論一部分在于有很大部分的工作努力被用到在“發(fā)展基礎(chǔ)設(shè)施”上—自動(dòng)構(gòu)建、單元測(cè)試、文檔、項(xiàng)目報(bào)告等。使用Maven你可以加速這個(gè)過(guò)程,生成項(xiàng)目的框架使其作為新應(yīng)用的種子。


我該如何做?
Maven擁有一個(gè)應(yīng)用程序生成插件(Genapp)你能通過(guò)其創(chuàng)建一個(gè)新項(xiàng)目。首先創(chuàng)建一個(gè)空的目錄c:\dev\mavenbook\code\genapp\test-application這將成為應(yīng)用程序生成后的處所。通過(guò)執(zhí)行g(shù)enapp這個(gè)目標(biāo)來(lái)運(yùn)行Genapp插件,選擇默認(rèn)的模版并且提供一些你的新項(xiàng)目的相關(guān)信息。
C:\dev\mavenbook\code\genapp\test-application>maven genapp
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ‘ \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2
Attempting to download commons-jelly-tags-interaction-20030211.143817.jar.
4K downloaded
Enter a project template to use: [default]
[Enter]
Please specify an id for your application: [app]
test-application
Please specify a name for your application: [Example Application]
Test Application
Please specify the package for your application: [example.app]
mdn.testapp
build:start:
genapp:
[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\
src\java\mdn\testapp
[copy] Copying 3 files to C:\dev\mavenbook\code\genapp\test-application\
src\test\mdn\testapp
[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\
[copy] Copying 2 files to C:\dev\mavenbook\code\genapp\test-application\
BUILD SUCCESSFUL


本插件會(huì)要求用戶一些輸入,從這個(gè)輸出內(nèi)容你可以看到你使用了默認(rèn)的(defalut)應(yīng)用程序模板,并且你提供了新項(xiàng)目的應(yīng)用程序ID、name,和包名。默認(rèn)的(default)應(yīng)用程序模板創(chuàng)建了一個(gè)單獨(dú)的類,mdn.testapp.app,和一個(gè)靜態(tài)main函數(shù)和兩個(gè)JUnit測(cè)試。

Maven的應(yīng)用程序生成插件生成了下面的目錄和文件:
test-application/
project.properties
project.xml
src/
conf/
app.properties
java/mdn/testapp/
App.java
test/mdn/testapp/
AbstractTestCase.java
AppTest.java
NaughtyTest.java

所有Maven項(xiàng)目有一個(gè)參考了項(xiàng)目對(duì)象模型(POM)的標(biāo)準(zhǔn)目錄結(jié)構(gòu), (as described shortly)。如果你有一些現(xiàn)存的類你想添加到一個(gè)項(xiàng)目,添加它們到src/java,如果你有一些單元測(cè)試將它們添加到src/test。如果這些已有的類和單元測(cè)試依賴一些外部的苦,你將在隨后的章節(jié)看到如何添加一個(gè)附屬。xdos目錄包含了格式為XDoc的項(xiàng)目文檔。

提示

請(qǐng)注意Maven1.0.2裝載的Genapp插件版本創(chuàng)建了非標(biāo)準(zhǔn)
的布局。在Maven項(xiàng)目中src/java和src/test不再出現(xiàn)
在固有的源代碼和單元測(cè)試位置。取而代之的是你可
以使用src/main/java和src/test/java。為了改變這些,
修改你項(xiàng)目的xml文件,改變src/java的引用為src/main-
/java,src/test的引用為src/test/java。更多的信息,
請(qǐng)參見(jiàn)“Maven Conventions”,地址在
http://maven./-reference/conventions.html。


project.xml是項(xiàng)目的描述符;它是一個(gè)內(nèi)容為POM的XML文件。讓我們看看這個(gè)project.xml的拷貝,其已經(jīng)定義了這個(gè)項(xiàng)目:

<project>
<pomVersion>3</pomVersion>
<artifactId>test-application</artifactId>
<name>Test Application</name>
<currentVersion>1.0</currentVersion>
<organization>
<name>Your Organization</name>
<url>http://www./</url>
<logo>http://www./logo.gif|jpg|...</logo>
</organization>
<inceptionYear>2005</inceptionYear>
<package>mdn.testapp</package>
<logo>http://yourproject/logo.jpg|gif|...</logo>
<description>
An example project
</description>
<shortDescription>
How to use maven in different situations
</shortDescription>
<!-- Many Elements Omitted (see generated POM) -->
<dependencies/>
<build>
<sourceDirectory>src/java</sourceDirectory>
<unitTestSourceDirectory>src/test</unitTestSourceDirectory>
<unitTest>
<includes>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/NaughtyTest.java</exclude>
</excludes>
</unitTest>
<resources>
<resource>
<directory>src/conf</directory>
<includes>
<include>*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>


該文件告訴Maven有關(guān)你項(xiàng)目的全部。build元素定位應(yīng)用程序原碼,單元測(cè)試和資源文件包的位置。name, artifactId, currentVersion, inceptionYear, description。
shortDescription標(biāo)識(shí)該項(xiàng)目并且提供了該項(xiàng)目的信息被用作完成品的名字來(lái)創(chuàng)建項(xiàng)目。

提示

如果你工作在已有的Maven項(xiàng)目,你應(yīng)該看到id元素在
artifactId的位置。該id元素已經(jīng)不被贊成使用,
你可以用artifactId替代。


resources元素被用于JAR插件拷貝資源到JAR生成物。在該元素你指定一批資源到資源庫(kù)。本例中,自src/conf的資源將被復(fù)制到classpath的根目錄。換言之,app.properties資源將被復(fù)制到所生成的JAR生成物的根目錄。如果你想所有位于src/conf的*.properties資源和*.xml資源在mdn.testapp包中生成的JAR有效,你可以按照以下來(lái)指定targetPath:
<resource>
<directory>src/conf</directory>
<targetPath>mdn/testapp</targetPath>
<includes>
<include>*.properties</include>
<include>*.xml</include>
</includes>
</resource>

project.properties讓你能夠定制Maven及其插件在本項(xiàng)目中的行為。你將在看過(guò)本書(shū)之后使用該文件定制所生成web站點(diǎn)的品質(zhì)和JAR文件的內(nèi)容。

提示
關(guān)于在沒(méi)有Genapp插件來(lái)生成新Maven項(xiàng)目的快速入
門指導(dǎo),參見(jiàn)BrettPorter的“The Ten Minute Test”,
地址在http://maven./start/ten-minute-
test.html。


關(guān)于...
... Maven在有關(guān)協(xié)作項(xiàng)目中跟蹤信息的能力?

為簡(jiǎn)化本例,我們從project.xml文件中去掉了一些初期顯示的描
述項(xiàng)目郵件列表、知識(shí)庫(kù)、開(kāi)發(fā)者和web站點(diǎn)的元素。第4、5章深
入更多有關(guān)使用Maven發(fā)布web站點(diǎn)和在現(xiàn)有源碼庫(kù)中工作的細(xì)節(jié)。


在代理服務(wù)器下使用Maven
Maven依賴于Internet連接,其通過(guò)HTTP下載相關(guān)的插件。如果你工作在公共環(huán)境,你可能需要配置Maven來(lái)與工作代理服務(wù)器系統(tǒng)。


我該如何做?
你可能需要設(shè)置你項(xiàng)目中project.properties文件的一些屬性。project.properties文件允許你通過(guò)設(shè)置命名的屬性來(lái)定制Maven的行為。配置代理服務(wù)器,放置下面的project.properties到與你項(xiàng)目中project.xml文件同樣的位置:
maven.proxy.host = proxy.company.com
maven.proxy.port = 80

并且,如果你需要連接到一個(gè)代理服務(wù)器必須有NTLM的授
權(quán),設(shè)置以下屬性:
maven.proxy.ntlm.username = tobrien
maven.proxy.ntlm.password = myp@ssw0rd


提示

在第二章,你將學(xué)到user-specific屬性將被定義在
~/build.properties或%USERPROFILE%\build.properties 文件。現(xiàn)在,如果你需要完成本試驗(yàn),在 project.properties里定義這些屬性。


編譯和測(cè)試一個(gè)項(xiàng)目
你擁有了一個(gè)包含一個(gè)類文件和單元測(cè)試文件的項(xiàng)目。下
面,讓我們夠見(jiàn)這個(gè)項(xiàng)目和運(yùn)行應(yīng)用程序類吧。

我該如果做?
通過(guò)執(zhí)行jar:jar goal來(lái)創(chuàng)建一個(gè)包含應(yīng)用程序的類的jar
文件。JAR插件定義了一個(gè)速記目標(biāo)命名為jar其依賴之前的jar:jar goal。執(zhí)行任何一個(gè)目標(biāo)將得到相同的結(jié)果。所有的插件都定義了一條這樣的捷徑;例如,測(cè)試目標(biāo)執(zhí)行的是Test插件里的test:test goal。執(zhí)行jar goal和maven jar:
C:\dev\mavenbook\code\genapp\test-application>maven jar
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ‘ \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2
Attempting to download junit-3.8.1.jar.
118K downloaded
build:start:
java:prepare-filesystem:
[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\
target\classes
java:compile:
[echo] Compiling to C:\dev\mavenbook\code\genapp\test-application/
target/classes
[echo]
[javac] Compiling 1 source file to C:\dev\mavenbook\code\genapp\testapplication\
target\classes
java:jar-resources:
Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\target\
classes
test:prepare-filesystem:
Compiling and Testing a Project 9
[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\
target\test-classes
[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\
target\test-reports
test:test-resources:
test:compile:
[javac] Compiling 3 source files to C:\dev\mavenbook\code\genapp\testapplication\
target\test-classes
test:test:
[junit] Running mdn.testapp.AppTest
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.078 sec
jar:jar:
[jar] Building jar: C:\dev\mavenbook\code\genapp\test-application\
target\test-application-1.0.jar
BUILD SUCCESSFUL
Total time: 9 seconds


Maven創(chuàng)建一個(gè)target(目標(biāo))目錄來(lái)保存中間文件和JAR文件。在JAR首次被建立后,按照下面執(zhí)行App類。
C:\dev\mavenbook\code\genapp\test-application> java ^
More? target\test-application-1.0.jar mdn.testapp.App
Hello World!

如果你想重復(fù)此項(xiàng)工作,運(yùn)行maven clean來(lái)移除target目錄重新構(gòu)建。

剛剛發(fā)生了什么?
當(dāng)你運(yùn)行jar目標(biāo)時(shí),Maven使用JAR插件來(lái)創(chuàng)建了一個(gè)JAR生成物。首先,Maven找到一系列的目標(biāo)以便能夠創(chuàng)建這個(gè)應(yīng)用程序的JAR文件;JAR插件有一個(gè)其它目標(biāo)所依賴于目標(biāo)的jar:jar goal,反過(guò)來(lái),它也依賴于其他的目標(biāo)。Maven找出下列需要的目標(biāo)來(lái)執(zhí)行:java:prepare-filesystem,java:compile,java:jarresources,
test:prepare-filesystem,test:test-resources,test:compile,and test:test。

Maven查看其需要執(zhí)行目標(biāo)中的Test插件來(lái)執(zhí)行單元測(cè)試,并且檢查本地Maven庫(kù)中的JUnit JAR文件。因?yàn)槟氵€沒(méi)有使用過(guò)Maven,所以它將從位于http://www./
maven/的Maven默認(rèn)庫(kù)中下載junit-3.8.1.jar。你將在本章后學(xué)習(xí)到有關(guān)Maven本地庫(kù)和Maven強(qiáng)大的相關(guān)管理能力的內(nèi)容。


與項(xiàng)目對(duì)象模型一同工作
Project Object Model(POM)是Maven的重要部分,你將與其一同工作貫穿本書(shū)。


我該如何做?
POM同樣涉及到項(xiàng)目的描述。project.xml描述了項(xiàng)目的源代碼、開(kāi)發(fā)者、源控制,許可和標(biāo)示信息譬如項(xiàng)目名稱和發(fā)起組織。Maven打破了過(guò)去傳統(tǒng)的構(gòu)建系統(tǒng);取而代之的是為每個(gè)構(gòu)建提供了外在說(shuō)明,Maven使用聲名的方法管理構(gòu)建。換句話說(shuō),你不用過(guò)多的告訴Maven做什么,Maven知道去查找基于project.xml中的內(nèi)容。另一方面,Ant以命令方式進(jìn)行項(xiàng)目構(gòu)建;你最終要告訴Ant編譯這個(gè)文件,建立這個(gè)目錄,綁定這些文件到WAR等等。Maven維護(hù)一個(gè)插件的分類來(lái)與標(biāo)準(zhǔn)的POM—一個(gè)結(jié)構(gòu)聲明、標(biāo)示和內(nèi)容工作。

如果你看了上次練習(xí)所生成的project.xml文件,你將注意到許多元素都在上次討論中被忽略。下面的XML列出了POM中頂級(jí)的元素,(in the order in which they are expected:
):
<project>
<extend/>
<pomVersion/>
<id/>
<name/>
<groupId/>
<currentVersion/>
<organization/>
<inceptionYear/>
<package/>
<logo/>
<gumpRepositoryId/>
<description/>
<shortDescription/>
<url/>
<issueTrackingUrl/>
<siteAddress/>
<siteDirectory/>
<distributionSite/>
<distributionDirectory/>
<repository/>
<versions/>
<branches/>
<mailingLists/>
<developers/>
<contributors/>
<licenses/>
<dependencies/>
<build/>
<reports/>
<properties/>
</project>

本章探究更多以上XML列出的元素,包括contributors,developers,dependencies,reports和repository。本章的式樣將提供這些細(xì)節(jié),但你應(yīng)該使用上面XML的摘錄來(lái)以適當(dāng)?shù)捻樞蚍胖眠@些元素到你的project.xml中。

列出有效的Goals
當(dāng)你使用Maven時(shí),你將執(zhí)行目標(biāo)。Maven插件是一組相關(guān)的插件。例如,要為一個(gè)項(xiàng)目創(chuàng)建JAR文件,你將如下所示執(zhí)行JAR插件中的jar:jar goal。
C:\dev\mavenbook\code\genapp> maven jar:jar
冒號(hào)之前的jar分類這個(gè)目標(biāo)屬于JAR插件。查看全部的JAR插件列表,鍵入以下命令:
C:\dev\mavenbook\code\genapp> maven -P jar
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ‘ \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2
Goals in jar
============
[jar] Create the deliverable jar file.
deploy ......................... Deploy a jar to the remote repository
deploy-snapshot ................ Deploy a snapshot jar to the remote
repository
install ........................ Install the jar in the local repository
install-snapshot ............... Install a snapshot jar in the local
repository
jar ............................ Create the deliverable jar file.
snapshot ....................... Create a snapshot jar, ie ‘
id-YYYYMMDD.hhmmss.jar‘
Plugin for creating JAR files. Requires Maven 1.0 RC2.

如果你需要查看每個(gè)有效的插件和目標(biāo),輸入下面內(nèi)容:
C:\dev\mavenbook\code\genapp\test-application> maven -g | more
全部的插件可能使人有些畏懼,Maven有關(guān)于一切的插件,從生成項(xiàng)目文件到IDEs到生成WAR文件以及開(kāi)始和停止應(yīng)用服務(wù)器。你將在下面的實(shí)驗(yàn)中學(xué)習(xí)到一些更有用的插件。

生成調(diào)試信息
現(xiàn)在,你可能已經(jīng)注意到Maven執(zhí)行了許多繁重的工作。如果你使用Ant,你可能已經(jīng)開(kāi)始編寫(xiě)Ant的build.xml文件并且添加編譯.jar任務(wù)和單元測(cè)試。Maven隱藏了許多復(fù)雜性,但當(dāng)調(diào)試問(wèn)題時(shí),它也能夠查看“幕后”。這個(gè)能力運(yùn)行于Maven的調(diào)試模式并且這個(gè)工具打印輸出每個(gè)構(gòu)建的細(xì)節(jié)重要的是你可以根據(jù)需要來(lái)驗(yàn)證構(gòu)建是否正確執(zhí)行。


我該如何做?
本次實(shí)驗(yàn),參考上一個(gè)測(cè)試應(yīng)用程序。當(dāng)你運(yùn)行maven test,你將收到如下信息:
java:compile:
[echo] Compiling to
C:\dev\mavenbook\code\genapp\test-application/
target/classes
[echo]
java:jar-resources:
[...]


在執(zhí)行java:comile或java:jar-resources目標(biāo)時(shí)到底發(fā)生了什么?執(zhí)行構(gòu)建項(xiàng)目中運(yùn)行maven -x test將顯示全部目標(biāo)的調(diào)試信息。讓我們來(lái)是一下,把注意力放在最早的第三個(gè)目標(biāo)上。運(yùn)行maven -x test生成下面的輸出:

[...]
java:compile:
[echo] Compiling to C:\dev\mavenbook\code\genapp\test-application/
target/classes
[javac] [DEBUG] fileset: Setup scanner in dir
C:\dev\mavenbook\code\genapp\test-application\src\java with
patternSet{ includes: [ ] excludes: [**/package.html] }
[javac] [VERBOSE] mdn\testapp\App.java omitted as mdn/testapp/App.class
is up to date.
java:jar-resources:
[DEBUG] FileSet: Setup scanner in dir
C:\dev\mavenbook\code\genapp\test-application\src\conf with
patternSet{ includes: [*.properties] excludes: [ ] }
[VERBOSE] app.properties omitted as app.properties is up to date.
[...]


java:compile的打印輸出任務(wù)可能看起來(lái)很熟悉。它是Ant的echo和javac任務(wù)的輸出。Maven常常使用Ant的進(jìn)程來(lái)執(zhí)行常用操作如:拷貝、刪除、編譯和創(chuàng)建JAR文件。

剛剛發(fā)生了什么?
這兩個(gè)目標(biāo)執(zhí)行的都是非常簡(jiǎn)單的調(diào)試輸出。java:compile目標(biāo)簡(jiǎn)單的掃描源目錄中java源碼中較新的相關(guān)類文件。java:jar-resources目標(biāo)尋找資源中包含的JAR文件。更復(fù)雜的如test:test將產(chǎn)生有關(guān)虛擬機(jī)和類加載器的調(diào)試信息。

當(dāng)Maven有問(wèn)題或某個(gè)目標(biāo)拋出異常,Maven將簡(jiǎn)單打印較少的錯(cuò)誤信息來(lái)告訴你有錯(cuò)誤發(fā)生。如果你需要等多信息,并且看到堆棧跟蹤,添加-e標(biāo)志到命令行。與-e標(biāo)志一起,Maven將打印完整的堆棧信息當(dāng)其遇到錯(cuò)誤時(shí)。

添加依賴關(guān)系
你有了一個(gè)擁有單個(gè)類文件并且已經(jīng)成功編譯執(zhí)行的項(xiàng)目。下面,你將添加一個(gè)依賴關(guān)系到項(xiàng)目描述器并且開(kāi)始使用Maven管理項(xiàng)目依賴關(guān)系。本次實(shí)驗(yàn)的目的是,假設(shè)你需要工作在Spring框架中。添加Spring框架-spring-core-1.1.4.jar和spring-web-1.1.4.jar的依賴關(guān)系。


我該如何做?
首先,你需要根據(jù)需要定位Maven默認(rèn)中心源碼庫(kù)中的JAR文件。在http://www./maven/提供了這些。在Web瀏覽器中加載這個(gè)URL你將看到一系列的目錄;我們關(guān)心的是springframework的目錄,springframework下子目錄的結(jié)構(gòu)如下所示:
http://www./maven
/springframework
/jars
spring-core-1.1.4.jar
spring-dao-1.1.4.jar
spring-web-1.1.4.jar

依照人造物,你使用dependency—groupId, artifactId和version三個(gè)元素。你能夠添加兩個(gè)依賴關(guān)系的完成品以替代test-application/project.xml中的dependencies元素如下所示:
<dependencies>
<dependency>
<groupId>springframework</groupId>
<artifactId>spring-core</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>springframework</groupId>
<artifactId>spring-web</artifactId>
<version>1.1.4</version>
</dependency>
</dependencies>


現(xiàn)在,運(yùn)行jar目標(biāo)并且看看Maven的輸出吧;它將包含下面如下這些。
Attempting to download spring-core-1.1.4.jar.
266K downloaded
Attempting to download spring-web-1.1.4.jar.
111K downloaded


圖1-1顯示了jar目標(biāo)觸發(fā)的一系列事件:
1.Maven查看POM,依據(jù)project.xml的定義,看到在springframework組中的兩個(gè)人造物的依賴關(guān)系。它將載你本地Maven的資源庫(kù)中檢查spring-core-1.1.4.jar和spring-web-1.1.4.jar。
2.當(dāng)Maven找不到這些文件,它將到http://www./maven/springframework/jars/尋找JAR文件。這些JAR文件會(huì)被下載并放置于你本地Maven的資源庫(kù)中。它們也被添加到你項(xiàng)目的classpath中。下次在你的項(xiàng)目查詢這些文件時(shí),Maven將在你本地的資源庫(kù)中提供它們。

image
圖1-1.Maven本地和遠(yuǎn)程資源庫(kù)為test application項(xiàng)目提供的spring Jar。

剛剛發(fā)生了什么?
Maven為你節(jié)省了相當(dāng)?shù)臅r(shí)間和不必要的麻煩。Maven到來(lái)之前,依賴關(guān)系常常被捆綁到一個(gè)項(xiàng)目的目錄或者項(xiàng)目應(yīng)該指向到添加正確的JAR到你的classpath。使用Maven管理依賴關(guān)系顯然有著明顯的優(yōu)勢(shì);作為初學(xué)者,如果你的項(xiàng)目依賴30個(gè)外部的JAR文件,這就不需要在你的資源庫(kù)中存儲(chǔ)成兆的JAR文件。這意味著當(dāng)你在項(xiàng)目的外部檢查資源控制的時(shí)候更少的存儲(chǔ)空間和更快的下載時(shí)間。另外,如果你有多個(gè)項(xiàng)目依賴相同的外部依賴,Maven僅需要下載一次依賴關(guān)系,并且每個(gè)項(xiàng)目引用一個(gè)單獨(dú)的副本在你本地的資源庫(kù)中。當(dāng)依賴關(guān)系能夠從Maven資源庫(kù)遠(yuǎn)程下載的時(shí)候,沒(méi)有強(qiáng)制的原因讓你存儲(chǔ)你項(xiàng)目的依賴關(guān)系的版本。

當(dāng)Maven下載依賴關(guān)系,其在你本地的機(jī)器上從遠(yuǎn)程的Maven資源庫(kù)拷貝一個(gè)文件到你本地的Maven資源庫(kù)。Maven如何定位依賴關(guān)系的?它使用project.xml中dependency元素的信息,如圖1-2所示。

image
圖1-2.POM和Maven資源庫(kù)的映射。

指定的groupId告訴Maven查看特定的目錄-springframework。指定type告訴Maven查找特定的子目錄如jar和war(注意s是Maven附加到type元素上的);本例中,type是被忽略的,JAR類型是默認(rèn)類型。當(dāng)你指定了artifactId,你正告訴Maven哪個(gè)文件將從jar目錄下載。頂級(jí)目錄表現(xiàn)為組標(biāo)示符,JAR文件名的第一部分表現(xiàn)為artifact標(biāo)示符,文件名最后的部分,包括擴(kuò)展名表現(xiàn)為version標(biāo)示符。Maven使用下面的公式來(lái)決定一個(gè)來(lái)自于資源庫(kù)中的依賴關(guān)系。[REPO_ROOT]參考你遠(yuǎn)程的資源庫(kù):
[REPO_ROOT]/<groupId>/<type>s/<artifactId>-<currentVersion>.<type>


提示

Maven2.0的說(shuō)明中,資源庫(kù)可能開(kāi)始于類似Java包的
結(jié)構(gòu)。作為springframework的替代,groupId被提議
的結(jié)構(gòu)為org.springframework。另外,每個(gè)版本將有
一個(gè)分隔目錄用以增加Maven資源庫(kù)的效率。更多有關(guān)
改變的提交建議,參見(jiàn)http://docs./display/
MAVEN/Repository+Layout+-+Final。


一個(gè)本地的資源庫(kù)來(lái)處理依賴關(guān)系。在Unix機(jī)器上,你的Maven資源庫(kù)能在~/.maven/repository目錄找到,在Windows機(jī)器上,你的Maven的資源庫(kù)在你的%USERPROFILE%目錄。如果你看一看本地Maven的資源庫(kù),你將會(huì)注意到它正包含一個(gè)springframework的目錄。%USERPROFILE%\.maven\repository\springframework\jars目錄包含spring-core依賴關(guān)系的兩個(gè):spring-core-1.1.4.jar文件和spring-core-1.1.4.jar.md5文件,其包含MD5文件用于驗(yàn)證sprint-core JAR文件的完整性。Maven 1當(dāng)前并沒(méi)有使用MD5來(lái)驗(yàn)證完成品的完整性,但在將來(lái)的版本可能會(huì)用其來(lái)驗(yàn)證完成品的完整性。

提示

在Windows機(jī)器上,%USERPROFILE%通常決定于C:\D-
ocuments and Settings\vmassol這種目錄。%USERPR-
OFILE%被用在Unix的主目錄。(%USERPROFILE% is
used in the spirit of the abbreviation for a Unix home directory。)


關(guān)于...
...使用id元素?


如果你工作在現(xiàn)存的Maven項(xiàng)目,你可能有依賴關(guān)系使用id元素。下面的dependencies元素示范了使用單獨(dú)id元素來(lái)附加Jakarta Commons Math的1.0版本:
<dependencies>
<dependency>
<id>commons-math</id>
<version>1.0</version>
</dependency>
</dependencies>

單獨(dú)使用id元素工作僅在groupId和artifactId匹配時(shí),如果你瀏覽Maven資源庫(kù),你將看到下面的目錄結(jié)構(gòu):
/commons-math
/jars
commons-math-1.0.jar
commons-math-1.1.jar

使用id元素工作,單獨(dú)的id標(biāo)記已經(jīng)不被贊成使用并在Maven 2中消失。當(dāng)你看到別的Maven項(xiàng)目中使用dependencies的速記符號(hào)時(shí),請(qǐng)嘗試使用groupId和artifactId來(lái)標(biāo)識(shí)你的依賴關(guān)系。

依賴快照
如果你開(kāi)發(fā)的程序依賴的依賴關(guān)系經(jīng)常改變,你可能想將依賴的每個(gè)依賴關(guān)系替代為最近構(gòu)件的硬編碼的版本。在一個(gè)項(xiàng)目依賴的依賴關(guān)系還處在beta的版本,或你正開(kāi)發(fā)一系列項(xiàng)目依賴的Maven項(xiàng)目時(shí)時(shí)特別有用,這將在第3章論述。本實(shí)驗(yàn),你將學(xué)習(xí)到如何依靠快照。


我該如何做?
在你的依賴關(guān)系塊兒中指定一個(gè)明確的版本,使用SNAPSHOT關(guān)鍵字作為版本名稱的一部分。每次你執(zhí)行Maven目標(biāo)時(shí),Maven將從遠(yuǎn)程資源庫(kù)中檢查較新的依賴關(guān)系。如果遠(yuǎn)程資源庫(kù)的版本較新Maven將下載其到本地資源庫(kù)。例如:下面的依賴關(guān)系將一直下載spring的新版JAR文件。
<dependency>
<groupId>springframework</groupId>
<artifactId>spring</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>


剛剛發(fā)生了什么?
當(dāng)你使用SNAPSHOT依賴關(guān)系,你正告訴Maven使用遠(yuǎn)程資源庫(kù)的最新版本。在你使用多項(xiàng)目插件或者當(dāng)你依賴的一個(gè)完成品尚處于開(kāi)發(fā)階段這將得心應(yīng)手。在你工作的團(tuán)隊(duì)僅有較少的開(kāi)發(fā)者組成時(shí),最好也常這么做。你將使用SNAPSHOT依賴關(guān)系當(dāng)你的項(xiàng)目依賴一個(gè)最近的開(kāi)發(fā)或者非正式版本的特別組件。SNAPSHOT依賴關(guān)系應(yīng)該在開(kāi)發(fā)階段被保留,并且,概括說(shuō),你不用改發(fā)布一個(gè)依賴于SNAPSHOT依賴關(guān)系的項(xiàng)目。

執(zhí)行脫機(jī)構(gòu)建
如果你需要在一個(gè)離線的情況下使用Maven,你可能需要知道如何確使Maven不檢查最新的SNAPSHOT依賴關(guān)系。本實(shí)驗(yàn)將向你展示如何用Maven執(zhí)行脫機(jī)構(gòu)建。


我該如何做?
這個(gè)方法很簡(jiǎn)單:僅僅使用-o命令行選項(xiàng)。例如,如果你沒(méi)有網(wǎng)絡(luò)連接,但又想執(zhí)行測(cè)試目標(biāo),運(yùn)行Maven -o test。Maven將執(zhí)行這個(gè)test目標(biāo)而不檢查依賴關(guān)系。如果你的項(xiàng)目沒(méi)有依賴SNAPSHOT構(gòu)建,你也可以斷看你的環(huán)境來(lái)添加-o標(biāo)志。如果你依賴SNAPSHOT構(gòu)建,你將需要使用-o標(biāo)志,Maven將在每次執(zhí)行目標(biāo)時(shí)嘗試檢查最新的SNAPSHOT。在這種情況下不使用-o標(biāo)志本項(xiàng)目將不會(huì)構(gòu)建成功。


關(guān)于...
... 執(zhí)行離線構(gòu)建如果你不想下載任何完成品?

當(dāng)然,這將不會(huì)工作。離線構(gòu)建的工作,你必須已經(jīng)有必需的依賴關(guān)系在你本地的資源庫(kù)。項(xiàng)目最簡(jiǎn)單的獲得Maven下載依賴
關(guān)系的方法是在每個(gè)Maven項(xiàng)目實(shí)例簡(jiǎn)單的運(yùn)行“noop”目標(biāo),build:start。這個(gè)目標(biāo)執(zhí)行之前任何其它的目標(biāo)并不執(zhí)行任何動(dòng)作。如果你運(yùn)行build:start,Maven將從project.xml獲得獲取任何依賴關(guān)系。


使用Maven控制臺(tái)
如果你再三的從命令行運(yùn)行Maven,你可以通過(guò)Maven控制臺(tái)來(lái)節(jié)省時(shí)間。Maven控制臺(tái)提供一個(gè)“外殼”,在這你可以鍵入目標(biāo)的名稱來(lái)執(zhí)行Maven。通過(guò)使用Maven可以避免每次載你想運(yùn)行一個(gè)Maven目標(biāo)時(shí)Java Virtual Machine(JVM)啟動(dòng)的等待。


我該如何做?
Maven Console是一個(gè)插件,你可以通過(guò)鍵入maven console在命令提示符。這將產(chǎn)生下面的輸出:
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ‘ \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2
The following commands are available:
list - list all available goals
help - this message
<goalname> - attain a goal
quit - quits the console
test-application 1.0 >


目前,你可以在命令行執(zhí)行任何你能執(zhí)行的目標(biāo)。開(kāi)始是一下;鍵入 java:compile。Maven將執(zhí)行 java:compile目標(biāo)并返回提示符其它的目標(biāo)。在一個(gè)序列中運(yùn)行兩個(gè)目標(biāo),你可以在提示符處輸入它們,通過(guò)“空格”-例如, clean test。眾所周知作為“goal chaining”這是你想通過(guò)Maven獲得指定一系列目標(biāo)的方法。退出Maven Console,鍵入quit,查看有效目標(biāo)列表,鍵入list。

剛剛發(fā)生了什么?
在Maven Console下Maven執(zhí)行java:compile目標(biāo)非常之快,不信么?當(dāng)你使用Maven Console時(shí)你所執(zhí)行的目標(biāo)是在一個(gè)現(xiàn)成的JVM下。當(dāng)你從命令行運(yùn)行Maven時(shí),你每次運(yùn)行一個(gè)目標(biāo)都不得不等待JVM的啟動(dòng)。如果你不確信其對(duì)性能的提升,自己試試看。在命令行下運(yùn)行java:complie 10次,再在Maven Console下同樣運(yùn)行java:compile 10次。注意時(shí)間的差別,你將發(fā)現(xiàn)JVM啟動(dòng)的時(shí)間開(kāi)始增加。如果你找到你自己常用的Maven目標(biāo),Maven Console將通過(guò)啟動(dòng)JVM一次為來(lái)節(jié)省時(shí)間。


生成Eclipse項(xiàng)目
我打賭你一定想在IDE下工作。Maven通過(guò)插件來(lái)與Eclipse,InelliJ,IDEA,JBuilder,JDeveloper以及Emacs集成。Maven很好的與全部這些工作集成,本實(shí)驗(yàn)關(guān)注其在Eclipse上的集成,一個(gè)開(kāi)源的IDE。


我該如何做?
這個(gè)過(guò)程很簡(jiǎn)單;僅僅執(zhí)行eclipse插件:
C:\dev\mavenbook\code\genapp\test-application> maven eclipse
build:start:
eclipse:generate-project:
[echo] Creating C:\dev\mavenbook\code\genapp\test-application/.project ...
eclipse:generate-classpath:
[echo] Creating C:\dev\mavenbook\code\genapp\test-application/.classpath ...
[echo] Contains JUnit tests
[echo] Setting compile of src/test to target/test-classes
Plugin ‘cactus-maven‘ in project ‘Test Application‘ is not available
[echo] Setting default output directory to target/classes
eclipse:
[echo] Now refresh your project in Eclipse (right click on the project
and select "Refresh")
BUILD SUCCESSFUL
Total time: 2 seconds


Maven創(chuàng)建兩個(gè)文件以識(shí)別Eclipse的項(xiàng)目:.project和.classpath。在Eclipse中,你就可以通過(guò)下面的步驟導(dǎo)入這個(gè)工程了:
1.啟動(dòng)Eclipse。
2.從菜單欄選擇File→Import...&#61472;
3.選擇現(xiàn)存項(xiàng)目放入Workspace并單擊Next按鈕。
4.在Import對(duì)話框選擇C:\dev\mavenbook\code\genapp\test-application目錄,并單擊Finish按鈕。

你稍候?qū)?zhí)行更多步來(lái)指向Eclipse到本地Maven資源庫(kù)。Eclipse使用一個(gè)名叫MAVEN_REPO來(lái)指向到本地Maven資源庫(kù)。你能通過(guò)在命令行執(zhí)行下面的操作設(shè)置MAVEN_REPO來(lái)使用Maven:
maven -Dmaven.eclipse.workspace=c:\eclipse\workspace eclipse:add-maven-repo
執(zhí)行這個(gè)目標(biāo)可以設(shè)置位于目錄c:\eclipse\workspace的全局變量MAVEN_REPO。
作為選擇,你可以按照這些步驟手工配置該變量:
1.從菜單欄中選擇Window→打開(kāi)Eclipse Preferences選擇preferences。
2.在樹(shù)型菜單左手邊的Preferences對(duì)話框,選擇Java→Build Path→Classpath變量。
3.單擊New按鈕來(lái)創(chuàng)建一個(gè)新的變量;這可以帶入到新變量對(duì)話框。
4.輸入MAVEN_REPR到Name域。
5.單擊Folder按鈕選擇你本地的Maven資源庫(kù)。
6.單擊OK并重新構(gòu)建你的項(xiàng)目。

你可能需要配置MAVEN_REPO僅一次;該變量是全局的它可以與全部Eclipse項(xiàng)目共享。

關(guān)于...
... JBuilder, JDeveloper, and IntelliJ IDEA?

所有這些IDE有著Eclipse一樣簡(jiǎn)單的插件。為JBuilder 項(xiàng)目生成必需的文件,運(yùn)行mave jbuilder,對(duì)于JDeveloper運(yùn)行mave jdeveloper,為IntelliJ IDEA項(xiàng)目運(yùn)行mave idea。


使用Maven的Eclipse插件
是的,這是一個(gè)你可以使用的高品質(zhì)的Maven插件。它提供了許多有趣的特性,如編輯project.xml文件的能力,支持Maven自定義,Maven資源庫(kù)瀏覽等其他功能。


我該如何做?
Mevenide (http://mevenide./mevenide-ui-eclipse/update/index.html) 是一個(gè)Eclipse插件其允許你使用Maven在Eclipse中工作。你能夠按照如下指導(dǎo)從Eclipse更新站點(diǎn)上下載它:
1.啟動(dòng)Eclipse。
2.從菜單中選擇Help→Software Updates→Find and Install。
3.在Install/Update和更新的對(duì)話框中,選擇“Search for new feature to install,”并單擊下一步。
4.在Install對(duì)話框中,單擊New Remote Site。
5.在New Update Site對(duì)話框中,鍵入Mevenide在Name域,其位置在Eclipse Updates站點(diǎn)的URL區(qū)域。Mavenid在Eclipse Update站點(diǎn)中的位置是http://mevenide./release/eclipse/update/site.xml。
6.當(dāng)單詞Mevenide出現(xiàn)在Install對(duì)話框中,選擇兩個(gè)子目標(biāo),Maven和Mevenide并單擊Next。
7.直到Maven和Mevenide被下載和安裝,重起Eclipse。

首先你會(huì)注意到Mevenide標(biāo)注所有project.xml文件為綠色圖標(biāo)。在Project Object Model編輯器中打開(kāi)project.xml,右擊任何project.xml文件并選擇Open With...→Project Object Model編輯器。該編輯器如下圖1-3所顯示。

image

Mevenide在Eclipse中提供了一系列tab讓你編輯不同的project.xml片斷。如果你學(xué)到了很多的project.xml語(yǔ)法,就知道Mevenide的Project Object Model編輯器提供了GUI接口來(lái)維護(hù)這個(gè)XML文件。如果你仍然希望直接編輯這個(gè)XML,你能夠選擇最右邊的Source tab。
除POM編輯器之外,Mevenide也為你提供了Eclipse以外執(zhí)行Maven目標(biāo)的方法。要在Eclipse中執(zhí)行一個(gè)Maven目標(biāo),選擇Run→External Tools…→External Tools…你就能夠創(chuàng)建一個(gè)Maven的配置并從全部有效的目標(biāo)中選擇你希望執(zhí)行的目標(biāo)。當(dāng)目標(biāo)在Eclipse中被執(zhí)行,通過(guò)Console視圖有效得顯示它的輸出。

Mevenide提供的另一個(gè)有趣的功能是Repository Browser。這個(gè)工具允許你檢查許多遠(yuǎn)程資源庫(kù)的內(nèi)容。打開(kāi)Repository Browser,選擇Window→Show View…→Other…,此時(shí)在Maven目錄的結(jié)果對(duì)話框中選擇Repository Browser。Repository Browser簡(jiǎn)單的以樹(shù)型顯示了資源庫(kù)中的全部依賴關(guān)系(dependency),如圖1-4所示,其顯示了HTTPClient和abbot group的依賴關(guān)系。

image
圖1-4.Mevenide Repository Browser view

如果你想搜索資源庫(kù)中完成品的細(xì)節(jié),Mevenide同樣提供了資源庫(kù)搜索功能。這將是得心應(yīng)手的因?yàn)闉榱四硞€(gè)依賴關(guān)系的細(xì)節(jié)搜索http://www./maven是非常惱人的。檢查Mevenide;它將為你節(jié)省時(shí)間。

關(guān)于...
... NetBeans和JBuilder?

Mevenide當(dāng)前的版本支持這兩個(gè)IDE的表現(xiàn)。更多詳情參見(jiàn)http://mevenide./。
... IntelliJ?
IDEA插件維持了一些目標(biāo)如同你在Eclipse中使用的目標(biāo)。更多詳情參見(jiàn)位于http://maven./reference/plugins/idea/goals.html的IDEA插件的聯(lián)機(jī)文檔。


生成Ant構(gòu)建文件
當(dāng)你想用Apache的Ant構(gòu)建的某些時(shí)候??赡苣愕捻?xiàng)目使用自動(dòng)化處理正依賴于Ant,又可能你有一些團(tuán)隊(duì)成員沒(méi)有完成到Maven的轉(zhuǎn)換并且他們希望繼續(xù)使用Ant。目前為止許多IDE提供通過(guò)Ant構(gòu)建項(xiàng)目文件,你能夠使用Maven生成build.xml文件這樣你的項(xiàng)目就能夠被Apache的Ant所構(gòu)建。


我該如何做?
運(yùn)行Ant插件。運(yùn)行maven ant將創(chuàng)建build.xml文件其包含到聚合的依賴關(guān)系的目標(biāo),build和test你的應(yīng)用程序。看看運(yùn)行默認(rèn)的jar目標(biāo)的輸出:
C:\dev\mavenbook\code\genapp\test-application>ant
Buildfile: build.xml
init:
[mkdir] Created dir: C:\dev\mavenbook\code\genapp\target\lib
get-deps:
[get] Getting: http://www./maven/springframework/jars/
spring-core-1.1.4.jar
[get] Getting: http://www./maven/springframework/jars/
spring-web-1.1.4.jar
compile:
[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\target\classes
junit-present:
[echo] = = = = = = ============ WARNING = = = == = = = = = = = = = = = = = = = = = = =
[echo] Junit isn‘t present in your ${ANT_HOME}/lib directory. Tests not
executed.
[echo] = = ==============================================
compile-tests:
internal-test:
test:
jar:
[jar] Building jar: C:\dev\mavenbook\code\genapp\test-application\
target\test-application-1.0.jar
BUILD SUCCESSFUL
Total time: 2 seconds


你可能注意到這里存在一個(gè)問(wèn)題,這是個(gè)說(shuō)明性的問(wèn)題。Apache Ant沒(méi)有自動(dòng)管理依賴關(guān)系用于可選的Ant任務(wù)。如果你向運(yùn)行JUnit單元測(cè)試,你就需要從本地Maven資源庫(kù)拷貝junit-3.8.1.jar到${ANT_HOME}/lib下。這個(gè)構(gòu)建文件包含了一個(gè)get-deps的目標(biāo)其從位于http://www./maven的遠(yuǎn)程Maven資源庫(kù)為所有的項(xiàng)目依賴關(guān)系執(zhí)行Ant獲得任務(wù)到gran。

關(guān)于...
... 試圖離開(kāi)Ant?Maven是Ant的替代者么?

是或不是。Ant并不“差”,并且多數(shù)工具仍然同Ant工作。沒(méi)有理由不提供與Apache Ant的交互,一旦你學(xué)到更多關(guān)于第2章的Jelly,你將發(fā)現(xiàn)Ant工作在Maven里應(yīng)用的更廣泛。許多項(xiàng)目使用持續(xù)集成的系統(tǒng)如其期望的Ant構(gòu)建文件。運(yùn)行maven ant provides很容易找到繼續(xù)支持這些工具。


移植一個(gè)Ant項(xiàng)目到Maven
一定數(shù)量的項(xiàng)目使用Ant作為構(gòu)建系統(tǒng),你可能打算移植到Maven上來(lái)。


我該如何做?
從頭開(kāi)始。創(chuàng)建一個(gè)默認(rèn)的Maven模版,并且移動(dòng)你的代碼到適當(dāng)?shù)奈恢?。不要設(shè)法使Maven適合你項(xiàng)目的目錄和構(gòu)建位置。Maven強(qiáng)過(guò)一個(gè)構(gòu)建工具;它是一個(gè)標(biāo)準(zhǔn)方式考慮到項(xiàng)目的布局和管理。如果你試圖使Maven適應(yīng)你項(xiàng)目的想法來(lái)構(gòu)建,你將結(jié)束使用Maven。如果你的項(xiàng)目由一個(gè)復(fù)雜的buil.xml文件組成其產(chǎn)生許多不同的交付結(jié)果,你將需要“組件化”你的項(xiàng)目請(qǐng)跟隨第3章的多項(xiàng)目描述。你可能要開(kāi)始移動(dòng)你項(xiàng)目的目錄結(jié)構(gòu)轉(zhuǎn)向標(biāo)準(zhǔn)的Maven項(xiàng)目目錄結(jié)構(gòu)。換而言之,不要試圖生搬硬套你的項(xiàng)目到Maven。
如果你對(duì)遷移到Ant感興趣,但你沒(méi)有時(shí)間停止開(kāi)發(fā),你可以使用Maven調(diào)用你現(xiàn)存的Ant目標(biāo)。如果你這么做,你將錯(cuò)失使用Maven的大部分益處,但僅僅是可能。更多信息參見(jiàn)位于http://maven./using/migrating.html的“Migrating from Ant”。

關(guān)于...
... 靈活性和選擇?

靈活性和選擇是個(gè)比較老的問(wèn)題了。我們保證Maven將改變你構(gòu)建和維護(hù)項(xiàng)目的方式方法,重要的是應(yīng)該有意的使用Maven。Ant和Maven間的差別是什么呢?Ant提供塊構(gòu)建的可重用任務(wù)如copy,move,delete和junit,Maven提供了可重用的任務(wù)構(gòu)建。Maven是一個(gè)“構(gòu)建容器”,其允許你在一系列項(xiàng)目上重用任務(wù)構(gòu)建。以單元測(cè)試為例,使用Ant,你將通過(guò)在你項(xiàng)目的build.xml文件里包含下面來(lái)執(zhí)行JUnit測(cè)試。
<junit printsummary="yes" haltonfailure="yes">
<classpath>
<pathelement location="${build.tests}"/>
<pathelement path="${java.class.path}"/>
</classpath>
<formatter type="plain"/>
<test name="my.test.TestCase" haltonfailure="no" outfile="result">
<formatter type="xml"/>
</test>
<batchtest fork="yes" todir="${reports.tests}">
<fileset dir="${src.tests}">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
</junit>

該片斷省略的不同路經(jīng)和變量的定義如build.tests和java.class.path,同時(shí)也省略的Ant目標(biāo)的定義。另外一些單元測(cè)試類,你也需要定義一個(gè)標(biāo)以目標(biāo)在源文件和單元測(cè)試中,并且一個(gè)目標(biāo)對(duì)應(yīng)創(chuàng)建一個(gè)目錄。每個(gè)項(xiàng)目需要定義同樣的邏輯以執(zhí)行單元測(cè)試。最后,大多數(shù)的Ant項(xiàng)目使用了相似的目錄結(jié)構(gòu),并且構(gòu)建邏輯重用是通過(guò)拷貝和粘貼到build.xml文件。時(shí)間推移,項(xiàng)目將變的更復(fù)雜和用戶化,目錄標(biāo)準(zhǔn)增加并且每個(gè)項(xiàng)目趨于不同的編譯、測(cè)試方法和包;久而久之,build.xml變成項(xiàng)目中的一部分了。你定制的Ant構(gòu)建文件越大,越多的(entropy creeps)會(huì)進(jìn)入到你的構(gòu)建工作。Ant作為一個(gè)構(gòu)建工具的能力要少于其作為語(yǔ)言提供構(gòu)特性的API。1.6的Ant,含有了Ant庫(kù)和宏。在完成全局可重用的表現(xiàn)上與Maven相比Ant還有一段很長(zhǎng)的路要走。

利用Maven的Test插件為所有項(xiàng)目定義通用邏輯其需要編譯和執(zhí)行單元測(cè)試。單元測(cè)試插件為編譯和執(zhí)行單元測(cè)試獲得了最好的實(shí)踐,并且它為所有項(xiàng)目達(dá)成了最有效的實(shí)踐。當(dāng)你運(yùn)行maven test,Maven從POM傳遞信息到Test插件,Test插件則依賴于Java插件來(lái)執(zhí)行編譯。在Maven中沒(méi)有一處你明確的告訴構(gòu)建容器如何執(zhí)行JUnit單元測(cè)試。如果你這么做了,在Ant中你將會(huì)面對(duì)同樣的問(wèn)題。正如你不用告訴你的Servlet容器如何解壓WAR文件一樣,你不用告訴Maven如何構(gòu)建你的項(xiàng)目。Maven是一個(gè)構(gòu)建容器。許多人最初被Maven吸引是因?yàn)樗峁┝艘蕾囮P(guān)系管理,但Maven最大的好處是它提供了標(biāo)準(zhǔn)的開(kāi)發(fā)結(jié)構(gòu)來(lái)訪問(wèn)多個(gè)項(xiàng)目。依賴關(guān)系管理僅僅是標(biāo)準(zhǔn)開(kāi)發(fā)結(jié)構(gòu)的一個(gè)簡(jiǎn)單的副產(chǎn)品。

提示

Maven提供了開(kāi)發(fā)結(jié)構(gòu),統(tǒng)一了項(xiàng)目布局,在最后你可
以嘗試讓Maven照管許多構(gòu)建任務(wù)的細(xì)節(jié)。與其花費(fèi)你
重要的時(shí)間來(lái)寫(xiě)構(gòu)建腳本,不如使用Maven插件來(lái)把焦
點(diǎn)放到編寫(xiě)你應(yīng)用程序上來(lái)。


下面的章節(jié)將向你展示如何調(diào)整和定制Maven,但你需要確定你并不要求Maven成為另一個(gè)Ant。很有可能你有一個(gè)巨大的重建于Ant的build.xml文件充滿了Jelly腳本(見(jiàn)第2章)并且的Maven項(xiàng)目和一個(gè)大的maven.xml文件。但如果這么做你則失去了所有Maven的指向。如果你發(fā)想自己包含了很多構(gòu)建相關(guān)的邏輯在你的Maven構(gòu)建,你需要慎重考慮使用Maven。高定制化的Maven構(gòu)建是矛盾的;你的Maven項(xiàng)目應(yīng)該對(duì)現(xiàn)存插件起到杠桿作用。例如,如果你的項(xiàng)目需要編譯Jave源文件,創(chuàng)建JAR文件,使用Jave插件和JAR插件。如果你忽略重用Maven插件使用Maven的Ant集成則是重復(fù)制造輪子,你最好不要使用Maven。不要濫用Maven;合理使用Maven,省省你的火氣。

生成項(xiàng)目文檔
如果你正開(kāi)發(fā)Java應(yīng)用程序或者庫(kù),你可能想生成JavaDoc。

我該如何做?
簡(jiǎn)單的執(zhí)行javadoc目標(biāo),Maven將生成項(xiàng)目的文檔。下面是執(zhí)行javadoc目標(biāo)的輸出:
C:\dev\mavenbook\code\genapp\test-application>maven javadoc
__ __
| \/ |__ _Apache__ ___
| |\/| / _` \ V / -_) ‘ \ ~ intelligent projects ~
|_| |_\__,_|\_/\___|_||_| v. 1.0.2
build:start:
xdoc:init:
maven-javadoc-plugin:report:
[mkdir] Created dir: C:\dev\mavenbook\code\genapp\test-application\
target\javadoc\src
[javadoc] Generating Javadoc
[javadoc] Javadoc execution
[javadoc] Loading source files for package mdn.testapp...
[javadoc] Constructing Javadoc information...
[javadoc] Standard Doclet version 1.5.0_01
[javadoc] Building tree for all the packages and classes...
[javadoc] Generating C:\dev\mavenbook\code\genapp\test-application\
target\docs\apidocs\constant-values.html...
[javadoc] Copying file C:\Documents and Settings\tobrien\.maven\cache\
maven-javadoc-plugin-1.7\plugin-resources\stylesheet.css to file C:\dev\
mavenbook\code\genapp\test-application\target\docs\apidocs\stylesheet.css...
[javadoc] Building index for all the packages and classes...
[javadoc] Building index for all classes...
[delete] Deleting directory C:\dev\mavenbook\code\genapp\testapplication\
target\javadoc\src
BUILD SUCCESSFUL
Total time: 7 seconds
Once this goal has been executed, JavaDoc is available in testapplication/
target/javadoc/src.


剛剛發(fā)生了什么?
再次,Maven作了全部繁重的工作。你想要JaveDoc,你告訴Maven生成JaveDoc,故事結(jié)束。注意你不用告訴Maven任何你項(xiàng)目的情況;它“知道”如何做,Maven這很多這樣的事都是直截了當(dāng)?shù)?;在你告訴Maven有關(guān)你的項(xiàng)目后你就不用做什么了。Maven操作細(xì)節(jié)。



介紹Maven給你的團(tuán)隊(duì)
Maven是一個(gè)偉大的協(xié)作工具,你能夠使用它生成開(kāi)發(fā)者活動(dòng)報(bào)告,項(xiàng)目捐贈(zèng)者和郵件列表。


我該如何做?
許多項(xiàng)目有一個(gè)郵件列表其被用于討論架構(gòu)和實(shí)現(xiàn)。并且,通過(guò)透視圖,如Tomcat,Maven和Ant等項(xiàng)目,并不僅僅是一個(gè)開(kāi)發(fā)者社區(qū)來(lái)共享捐贈(zèng)到同樣的郵件列表。郵件列表不僅用于開(kāi)源項(xiàng)目;許多組織開(kāi)始使用同樣的協(xié)作模型用于開(kāi)啟,發(fā)布開(kāi)發(fā)。因?yàn)猷]件列表是協(xié)作的關(guān)鍵部分,Maven提供了在一個(gè)項(xiàng)目的project.xml中指定郵件列表的途徑。下面引用project.xml添加郵件列表的元素:
<mailingLists>
<mailingList>
<name>Maven User List</name>
<subscribe>users-subscribe@maven.</subscribe>
<unsubscribe>users-unsubscribe@maven.</unsubscribe>
<archive>http://marc./?l=turbine-maven-user</archive>
</mailingList>
<mailingList>
<name>Maven Developer List</name>
<subscribe>dev-subscribe@maven.</subscribe>
<unsubscribe>dev-unsubscribe@maven.</unsubscribe>
<archive>http://marc./?l=turbine-maven-dev</archive>
</mailingList>
</mailingLists>


有兩種類型的團(tuán)隊(duì)成員位于Maven項(xiàng)目中:捐贈(zèng)者和開(kāi)發(fā)者。這種定義可能改變你的項(xiàng)目,捐贈(zèng)者通常被認(rèn)為是開(kāi)源社區(qū)中捐贈(zèng)過(guò)補(bǔ)丁或文檔者,開(kāi)發(fā)者是一個(gè)項(xiàng)目的核心成員。在ASF,提交者和捐獻(xiàn)者可以一同捐獻(xiàn)一個(gè)項(xiàng)目,但捐獻(xiàn)者既不寫(xiě)資源庫(kù)代碼又不提交大的項(xiàng)目決定。下面引用了project.xml添加contributor和developer元素到project.xml文件:
<developers>
<developer>
<name>Vincent Massol</name>
<id>vmassol</id>
<email>vmassol@</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Author</role>
<role>Developer</role>
</roles>
<url>http://www.</url>
<timezone>+1</timezone>
</developer>
</developers>
<contributors>
<contributor>
<name>Tim OBrien</name>
<email>tobrien@</email>
<organization>Apache Software Foundation</organization>
<roles>
<role>Author</role>
<role>Developer</role>
</roles>
<url>http://www./pub/au/1738</url>
<timezone>-6</timezone>
</contributor>
</contributors>


剛剛發(fā)生了什么?
你告訴Maven誰(shuí)在這個(gè)項(xiàng)目工作,對(duì)于今后你生成項(xiàng)目的web站點(diǎn)很有用。開(kāi)發(fā)者和捐贈(zèng)者的信息在POM中以列表的通過(guò)站點(diǎn)生成插件,很多插件為資源控制生成報(bào)告。跟資源控制對(duì)話...。


向Maven到資源控制
你使用資源控制么?把它告訴給Maven,在本書(shū)的下面你將能夠生成一些有興趣的描述報(bào)告。一旦你關(guān)聯(lián)了源代碼資源庫(kù)到你的項(xiàng)目,你將能夠是用Maven的Source Control Management(SCM)插件,其提供了許多目標(biāo)(goal)用于從諸如CVS和其子版本的版本控制系統(tǒng)更新和發(fā)布。


我該如何做?
你需要添加一個(gè)respository元素到你項(xiàng)目的project.xml文件。下面的respository元素來(lái)自于Apache Struts項(xiàng)目,并且它指向到位于有效的子版本資源庫(kù)http://svn./repos/asf/struts/core/trunk:
<repository>
<connection>
scm:svn:http://svn./repos/asf/struts/core/trunk
</connection>
<developerConnection>
scm:svn:https://svn./repos/asf/struts/core/trunk
</developerConnection>
<url>http://svn./repos/asf/struts/core/trunk</url>
</repository>

connection元素告訴Maven有關(guān)SCM只讀的位置。scm標(biāo)識(shí)該URL起始于SCM位置,svn告訴Maven該URL將是資源庫(kù)的子項(xiàng)目,并且最終的片斷定位于項(xiàng)目的trunk。你可能也指定了developerConnection,你使用該元素在你需要分隔觀眾人群的不可寫(xiě)訪問(wèn)和一般人群的可寫(xiě)訪問(wèn)源代碼。url元素提供了能夠被瀏覽的資源庫(kù)的URL。在Struts的案例中,他們選擇了指向資源庫(kù)到它自己,它能夠被一個(gè)正常的瀏覽器所瀏覽。Struts團(tuán)隊(duì)也可以指向到ViewCVS實(shí)例配置指向到ASF的資源庫(kù)的子版本,它能夠在http://cvs./viewcvs.cgi/struts/core/trunk/?root=Apache-SVN的位置找到。

當(dāng)你在一個(gè)詳細(xì)的資源控制系統(tǒng)指定了project.xml,你也可以指向到一個(gè)詳細(xì)項(xiàng)目的不同版本和分之。下面的XML展示了簡(jiǎn)化版的Apache Struts項(xiàng)目的version和branche元素。
<versions>
<version>
<id>1.2.0</id>
<name>1.2.0</name>
<tag>STRUTS_1_2_0</tag>
</version>
<version>
<id>1.2.6</id>
<name>1.2.6</name>
<tag>STRUTS_1_2_6</tag>
</version>
</versions>
<branches>
<branch>
<tag>STRUTS_1_1_BRANCH</tag>
</branch>
<branch>
<tag>STRUTS_1_2_BRANCH</tag>
</branch>
</branches>

Version被用于幾個(gè)插件,如Announcements插件,其用于為每個(gè)版本創(chuàng)建發(fā)布紀(jì)錄。

關(guān)于...
... CVS?

如果你的項(xiàng)目使用CVS,在Jakatta Catus項(xiàng)目中你將需要添加一個(gè)如repository元素的資源庫(kù)元素如下所示:
<repository>
<connection>
scm:cvs:pserver:anoncvs@cvs.:/home/cvspublic:jakarta-cactus
</connection>
<url>http://cvs./viewcvs.cgi/jakarta-cactus/</url>
</repository>

在使用CVS paserver如果你暴露你的資源庫(kù)上面的引用是合適的。如果你在SSH之上訪問(wèn)CVS,你就需要按照下面的語(yǔ)法設(shè)置你的CVS_RSH環(huán)境變量。
<repository>
<connection>
scm:cvs:pserver:anoncvs@cvs.:/home/cvspublic:jakarta-cactus
</connection>
<url>http://cvs./viewcvs.cgi/jakarta-cactus/</url>
<developerConnection>
scm:cvs:ext:tobrien@somehost:/home/cvs/repository:modulename
</developerConnection>
</repository>


創(chuàng)建項(xiàng)目Web站點(diǎn)
Maven能夠創(chuàng)建項(xiàng)目web頁(yè),包含項(xiàng)目的有關(guān)信息。


我該如何做?
創(chuàng)建一個(gè)Maven項(xiàng)目web站點(diǎn),使用Site插件運(yùn)行下面的Maven目標(biāo):
C:\dev\mavenbook\code\genapp\test-application> maven site
運(yùn)行Site插件將在test-application/target/docs/index.html目錄創(chuàng)建默認(rèn)的項(xiàng)目站點(diǎn)。如果你加載這個(gè)HTML,你將發(fā)現(xiàn)這個(gè)站點(diǎn)與眾不同的Maven感觀。圖1-5展示了一個(gè)輕量的定制web站點(diǎn),包含定制的組織logo和項(xiàng)目logo。作為替換向你展示了人工的web站點(diǎn),你能夠看出這個(gè)站點(diǎn)的項(xiàng)目當(dāng)前正使用Maven的構(gòu)建系統(tǒng)-Jaxen。

image
圖1-5.簡(jiǎn)單的Maven項(xiàng)目站點(diǎn)。

許多Maven站點(diǎn)有一個(gè)項(xiàng)目導(dǎo)航部分用于提供鏈接系統(tǒng)向所有的Maven項(xiàng)目。項(xiàng)目信息包含項(xiàng)目的有關(guān)信息,項(xiàng)目的郵件列表,項(xiàng)目的資源控制及問(wèn)題跟蹤(你將在第4章找到所有的這些)。通過(guò)在xdocs目錄里創(chuàng)建和修改XML標(biāo)記生成Maven web站點(diǎn)的目錄。在圖5,項(xiàng)目包含5個(gè)項(xiàng)目細(xì)節(jié)文檔:Overview,FAQ,Releases,CVS Access和Status。這些文檔因?yàn)楸话ㄔ趚docs/navigation.xml文件中所以他們被包含在左邊的導(dǎo)航欄。xdocs目錄是Maven存放XML XDoc格式的項(xiàng)目細(xì)節(jié)文檔的地方。下面是Jaxen的navigation.xml文檔的內(nèi)容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="jaxen" repository="jaxen" href="http://">
<title>jaxen: universal java xpath engine</title>
<body>
<links>
<item name="The Werken Company" href="http://www./"/>
</links>
<menu name="jaxen">
<item name="Overview" href="/index.html"/>
<item name="FAQ" href="/faq.html"/>
<item name="Releases" href="/releases.html"/>
<item name="CVS Access" href="/cvs-usage.html"/>
<item name="Status" href="/status.html"/>
</menu>
</body>
</project>

link元素放置一個(gè)鏈接http://www.到頁(yè)面的右手邊,項(xiàng)目的logo之下,menu元素包含了用以顯示的左右邊的導(dǎo)航區(qū)域。菜單中的一個(gè)文件是xdocs/index.xml。下面是Jaxen的xdocs/index.xml文件的簡(jiǎn)短目錄:
<?xml version="1.0"?>
<document url="http:///index.xml">
<properties>
<author email="bob@eng.">bob mcwhirter</author>
<title>jaxen</title>
</properties>
<body>
<section name="News">
<p>
Added the slidedeck from my
<a href="/pdf/intro-slides.pdf">SD-West presentation</a>.
</p>
<p>
Check out these
<a href="http:///benchmarks/xpath/index.html">Performance
Benchmarks</a> comparing dom4j and Jaxen against Xerces and Xalan.
</p>
</section>
[...]
</document>

一旦你生成了你的項(xiàng)目站點(diǎn),加載target/docs/index.html到一個(gè)瀏覽器來(lái)查看你項(xiàng)目的web站點(diǎn)。

關(guān)于...
... 這些文件的語(yǔ)法?

你能在Maven XDoc插件的FAQ(http://maven./reference/plugins/xdoc/faq.html)找到navigation.xml文件的更多相關(guān)語(yǔ)法和格式信息。并且你也能在Maven XDoc Plug-in page(http://maven./reference/plugins/xdoc/index.html)上找到更多有關(guān)individual pages格式的信息。這個(gè)插件也面也包含更多定制站點(diǎn)生成插件的輸出和行為的說(shuō)明。
看第4章有關(guān)多樣化報(bào)告的更深的分析,這樣你句能夠把項(xiàng)目活動(dòng)和結(jié)構(gòu)搞清楚了。


定制站點(diǎn)報(bào)告
站點(diǎn)生成創(chuàng)建了許多有用的報(bào)告,但依照你的風(fēng)格,你可能想取出其中的某些報(bào)告。


我該如何做?
修改project.xml中的reports元素內(nèi)容來(lái)改變Maven站點(diǎn)生成對(duì)報(bào)告的生成。下面是reports元素中的幾個(gè)有效的報(bào)告活動(dòng):

<reports>
<report>maven-changelog-plugin</report>
<report>maven-changes-plugin</report>
<report>maven-checkstyle-plugin</report>
<report>maven-clover-plugin</report>
<report>maven-cruisecontrol-plugin</report>
<report>maven-developer-activity-plugin</report>
<report>maven-faq-plugin</report>
<report>maven-file-activity-plugin</report>
<report>maven-license-plugin</report>
<report>maven-linkcheck-plugin</report>
Customizing Site Reports 37
<report>maven-javadoc-plugin</report>
<report>maven-jdepend-plugin</report>
<report>maven-jira-plugin</report>
<report>maven-junit-report-plugin</report>
<report>maven-jxr-plugin</report>
<report>maven-pmd-plugin</report>
<report>maven-simian-plugin</report>
<report>maven-tasklist-plugin</report>
</reports>


從Maven的站點(diǎn)生成中排除一個(gè)報(bào)告,僅需要移除reports元素中的report的插件元素。Maven項(xiàng)目并未指定reports元素生成一套默認(rèn)的報(bào)告:jdepend,Checkstyle,changes,changelog,developer-activity,file-activity,license,javadoc,jxr,junit,linkcheck和tacklist。當(dāng)你添加一個(gè)reports元素到你項(xiàng)目的project.xml文件,你必須列出所有你希望獲得的報(bào)告。

剛剛發(fā)生了什么?
reports元素列出了所有這些多樣的reports,但你可能想了解報(bào)告提供的全部這些。表1-1提供了報(bào)告的一些摘要描述。
image

更多全面的插件和報(bào)告列表,參見(jiàn):
Maven插件: http://maven./reference/plugins/index.html
Maven插件沙箱: http://maven./plugins-sandbox/index.html
Maven 在SourceForge上的插件: http://maven-plugins./
第三方Maven插件: http://maven./reference/3rdparty.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多