欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

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


本文Matrix永久鏡像:http://www.matrix.org.cn/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,并在顯著(zhù)地方作出說(shuō)明,
如果你發(fā)覺(jué)出處URL有誤,請聯(lián)系Matrix改正.
Maven起步

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

翻譯:Revenger


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




編者注:

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

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

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

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




讓我們開(kāi)始使用Maven。在本章結束時(shí),你應該能夠從頭建立一個(gè)Maven的項目,使用Maven進(jìn)行相關(guān)管理,創(chuàng )建基于某些感興趣報告的簡(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.apache.org/從左側的導航菜單中的Getting Maven菜單選擇下載。它將帶你進(jìn)入一個(gè)讓你選擇Windows 安裝包、zip文件、tar‘d.bzip文件或者tar‘d.gzip文件。下載適合你平臺的分類(lèi)。

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

提示

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



在Microsoft Windows平臺,下載Windows安裝包(maven-1.0.2.exe),跟隨自動(dòng)安裝過(guò)程中的提示。在使用Maven Windows 安裝器進(jìn)行安裝后,你應該定義一個(gè)用戶(hù)環(huán)境變量,MAVEN_HOME,指向你本地的Maven安裝。你此時(shí)需要進(jìn)入控制面版→系統→高級選擇環(huán)境變量按鈕,添加%MAVEN_HOME%\bin到你的PATH環(huán)境變量。進(jì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文件,解壓縮到任何目錄。設置MAVEN_HOME指 向到Maven解壓縮的目錄,并且添加%MAVEN_HOME%\Bin到你的PATH環(huán)境變量。

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

提示

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


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

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

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

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

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


我該如何做?
Maven擁有一個(gè)應用程序生成插件(Genapp)你能通過(guò)其創(chuàng )建一個(gè)新項目。首先創(chuàng )建一個(gè)空的目錄c:\dev\mavenbook\code\genapp\test-application這將成為應用程序生成后的處所。通過(guò)執行g(shù)enapp這個(gè)目標來(lái)運行Genapp插件,選擇默認的模版并且提供一些你的新項目的相關(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ì )要求用戶(hù)一些輸入,從這個(gè)輸出內容你可以看到你使用了默認的(defalut)應用程序模板,并且你提供了新項目的應用程序ID、name,和包名。默認的(default)應用程序模板創(chuàng )建了一個(gè)單獨的類(lèi),mdn.testapp.app,和一個(gè)靜態(tài)main函數和兩個(gè)JUnit測試。

Maven的應用程序生成插件生成了下面的目錄和文件:
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項目有一個(gè)參考了項目對象模型(POM)的標準目錄結構, (as described shortly)。如果你有一些現存的類(lèi)你想添加到一個(gè)項目,添加它們到src/java,如果你有一些單元測試將它們添加到src/test。如果這些已有的類(lèi)和單元測試依賴(lài)一些外部的苦,你將在隨后的章節看到如何添加一個(gè)附屬。xdos目錄包含了格式為XDoc的項目文檔。

提示

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


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

<project>
<pomVersion>3</pomVersion>
<artifactId>test-application</artifactId>
<name>Test Application</name>
<currentVersion>1.0</currentVersion>
<organization>
<name>Your Organization</name>
<url>http://www.someorganization.biz/</url>
<logo>http://www.someorganization.biz/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)你項目的全部。build元素定位應用程序原碼,單元測試和資源文件包的位置。name, artifactId, currentVersion, inceptionYear, description。
shortDescription標識該項目并且提供了該項目的信息被用作完成品的名字來(lái)創(chuàng )建項目。

提示

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


resources元素被用于JAR插件拷貝資源到JAR生成物。在該元素你指定一批資源到資源庫。本例中,自src/conf的資源將被復制到classpath的根目錄。換言之,app.properties資源將被復制到所生成的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及其插件在本項目中的行為。你將在看過(guò)本書(shū)之后使用該文件定制所生成web站點(diǎn)的品質(zhì)和JAR文件的內容。

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


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

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


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


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

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


提示

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


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

我該如果做?
通過(guò)執行jar:jar goal來(lái)創(chuàng )建一個(gè)包含應用程序的類(lèi)的jar
文件。JAR插件定義了一個(gè)速記目標命名為jar其依賴(lài)之前的jar:jar goal。執行任何一個(gè)目標將得到相同的結果。所有的插件都定義了一條這樣的捷徑;例如,測試目標執行的是Test插件里的test:test goal。執行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(目標)目錄來(lái)保存中間文件和JAR文件。在JAR首次被建立后,按照下面執行App類(lèi)。
C:\dev\mavenbook\code\genapp\test-application> java ^
More? target\test-application-1.0.jar mdn.testapp.App
Hello World!

如果你想重復此項工作,運行maven clean來(lái)移除target目錄重新構建。

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

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


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


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

如果你看了上次練習所生成的project.xml文件,你將注意到許多元素都在上次討論中被忽略。下面的XML列出了POM中頂級的元素,(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。本章的式樣將提供這些細節,但你應該使用上面XML的摘錄來(lái)以適當的順序放置這些元素到你的project.xml中。

列出有效的Goals
當你使用Maven時(shí),你將執行目標。Maven插件是一組相關(guān)的插件。例如,要為一個(gè)項目創(chuàng )建JAR文件,你將如下所示執行JAR插件中的jar:jar goal。
C:\dev\mavenbook\code\genapp> maven jar:jar
冒號之前的jar分類(lèi)這個(gè)目標屬于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è)有效的插件和目標,輸入下面內容:
C:\dev\mavenbook\code\genapp\test-application> maven -g | more
全部的插件可能使人有些畏懼,Maven有關(guān)于一切的插件,從生成項目文件到IDEs到生成WAR文件以及開(kāi)始和停止應用服務(wù)器。你將在下面的實(shí)驗中學(xué)習到一些更有用的插件。

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


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


在執行java:comile或java:jar-resources目標時(shí)到底發(fā)生了什么?執行構建項目中運行maven -x test將顯示全部目標的調試信息。讓我們來(lái)是一下,把注意力放在最早的第三個(gè)目標上。運行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)執行常用操作如:拷貝、刪除、編譯和創(chuàng )建JAR文件。

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

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

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


我該如何做?
首先,你需要根據需要定位Maven默認中心源碼庫中的JAR文件。ibiblio.org在http://www.ibiblio.org/maven/提供了這些。在Web瀏覽器中加載這個(gè)URL你將看到一系列的目錄;我們關(guān)心的是springframework的目錄,springframework下子目錄的結構如下所示:
http://www.ibiblio.org/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è)依賴(lài)關(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>


現在,運行jar目標并且看看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目標觸發(fā)的一系列事件:
1.Maven查看POM,依據project.xml的定義,看到在springframework組中的兩個(gè)人造物的依賴(lài)關(guān)系。它將載你本地Maven的資源庫中檢查spring-core-1.1.4.jar和spring-web-1.1.4.jar。
2.當Maven找不到這些文件,它將到http://www.ibiblio.org/maven/springframework/jars/尋找JAR文件。這些JAR文件會(huì )被下載并放置于你本地Maven的資源庫中。它們也被添加到你項目的classpath中。下次在你的項目查詢(xún)這些文件時(shí),Maven將在你本地的資源庫中提供它們。


圖1-1.Maven本地和遠程資源庫為test application項目提供的spring Jar。

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

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


圖1-2.POM和Maven資源庫的映射。

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


提示

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


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

提示

在Windows機器上,%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元素?


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

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

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

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


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


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

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


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


關(guān)于...
... 執行離線(xiàn)構建如果你不想下載任何完成品?

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


使用Maven控制臺
如果你再三的從命令行運行Maven,你可以通過(guò)Maven控制臺來(lái)節省時(shí)間。Maven控制臺提供一個(gè)“外殼”,在這你可以鍵入目標的名稱(chēng)來(lái)執行Maven。通過(guò)使用Maven可以避免每次載你想運行一個(gè)Maven目標時(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 >


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

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


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


我該如何做?
這個(gè)過(guò)程很簡(jiǎn)單;僅僅執行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è)文件以識別Eclipse的項目:.project和.classpath。在Eclipse中,你就可以通過(guò)下面的步驟導入這個(gè)工程了:
1.啟動(dòng)Eclipse。
2.從菜單欄選擇File→Import...&#61472;
3.選擇現存項目放入Workspace并單擊Next按鈕。
4.在Import對話(huà)框選擇C:\dev\mavenbook\code\genapp\test-application目錄,并單擊Finish按鈕。

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

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

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

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


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


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

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



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

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


圖1-4.Mevenide Repository Browser view

如果你想搜索資源庫中完成品的細節,Mevenide同樣提供了資源庫搜索功能。這將是得心應手的因為為了某個(gè)依賴(lài)關(guān)系的細節搜索http://www.ibiblio.org/maven是非常惱人的。檢查Mevenide;它將為你節省時(shí)間。

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

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


生成Ant構建文件
當你想用Apache的Ant構建的某些時(shí)候??赡苣愕捻椖渴褂米詣?dòng)化處理正依賴(lài)于A(yíng)nt,又可能你有一些團隊成員沒(méi)有完成到Maven的轉換并且他們希望繼續使用Ant。目前為止許多IDE提供通過(guò)Ant構建項目文件,你能夠使用Maven生成build.xml文件這樣你的項目就能夠被Apache的Ant所構建。


我該如何做?
運行Ant插件。運行maven ant將創(chuàng )建build.xml文件其包含到聚合的依賴(lài)關(guān)系的目標,build和test你的應用程序??纯催\行默認的jar目標的輸出:
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.ibiblio.org/maven/springframework/jars/
spring-core-1.1.4.jar
[get] Getting: http://www.ibiblio.org/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)管理依賴(lài)關(guān)系用于可選的Ant任務(wù)。如果你向運行JUnit單元測試,你就需要從本地Maven資源庫拷貝junit-3.8.1.jar到${ANT_HOME}/lib下。這個(gè)構建文件包含了一個(gè)get-deps的目標其從位于http://www.ibiblio.org/maven的遠程Maven資源庫為所有的項目依賴(lài)關(guān)系執行Ant獲得任務(wù)到gran。

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

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


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


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

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

靈活性和選擇是個(gè)比較老的問(wèn)題了。我們保證Maven將改變你構建和維護項目的方式方法,重要的是應該有意的使用Maven。Ant和Maven間的差別是什么呢?Ant提供塊構建的可重用任務(wù)如copy,move,delete和junit,Maven提供了可重用的任務(wù)構建。Maven是一個(gè)“構建容器”,其允許你在一系列項目上重用任務(wù)構建。以單元測試為例,使用Ant,你將通過(guò)在你項目的build.xml文件里包含下面來(lái)執行JUnit測試。
<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目標的定義。另外一些單元測試類(lèi),你也需要定義一個(gè)標以目標在源文件和單元測試中,并且一個(gè)目標對應創(chuàng )建一個(gè)目錄。每個(gè)項目需要定義同樣的邏輯以執行單元測試。最后,大多數的Ant項目使用了相似的目錄結構,并且構建邏輯重用是通過(guò)拷貝和粘貼到build.xml文件。時(shí)間推移,項目將變的更復雜和用戶(hù)化,目錄標準增加并且每個(gè)項目趨于不同的編譯、測試方法和包;久而久之,build.xml變成項目中的一部分了。你定制的Ant構建文件越大,越多的(entropy creeps)會(huì )進(jìn)入到你的構建工作。Ant作為一個(gè)構建工具的能力要少于其作為語(yǔ)言提供構特性的API。1.6的Ant,含有了Ant庫和宏。在完成全局可重用的表現上與Maven相比Ant還有一段很長(cháng)的路要走。

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

提示

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


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

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

我該如何做?
簡(jiǎn)單的執行javadoc目標,Maven將生成項目的文檔。下面是執行javadoc目標的輸出:
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,故事結束。注意你不用告訴Maven任何你項目的情況;它“知道”如何做,Maven這很多這樣的事都是直截了當的;在你告訴Maven有關(guān)你的項目后你就不用做什么了。Maven操作細節。



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


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


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


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


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


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

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

當你在一個(gè)詳細的資源控制系統指定了project.xml,你也可以指向到一個(gè)詳細項目的不同版本和分之。下面的XML展示了簡(jiǎn)化版的Apache Struts項目的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ā)布紀錄。

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

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

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


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


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


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

許多Maven站點(diǎn)有一個(gè)項目導航部分用于提供鏈接系統向所有的Maven項目。項目信息包含項目的有關(guān)信息,項目的郵件列表,項目的資源控制及問(wèn)題跟蹤(你將在第4章找到所有的這些)。通過(guò)在xdocs目錄里創(chuàng )建和修改XML標記生成Maven web站點(diǎn)的目錄。在圖5,項目包含5個(gè)項目細節文檔:Overview,FAQ,Releases,CVS Access和Status。這些文檔因為被包括在xdocs/navigation.xml文件中所以他們被包含在左邊的導航欄。xdocs目錄是Maven存放XML XDoc格式的項目細節文檔的地方。下面是Jaxen的navigation.xml文檔的內容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="jaxen" repository="jaxen" >
<title>jaxen: universal java xpath engine</title>
<body>
<links>
<item name="The Werken Company" />
</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.werken.com到頁(yè)面的右手邊,項目的logo之下,menu元素包含了用以顯示的左右邊的導航區域。菜單中的一個(gè)文件是xdocs/index.xml。下面是Jaxen的xdocs/index.xml文件的簡(jiǎn)短目錄:
<?xml version="1.0"?>
<document url="http://jaxen.org/index.xml">
<properties>
<author email="bob@eng.werken.com">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 >Performance
Benchmarks</a> comparing dom4j and Jaxen against Xerces and Xalan.
</p>
</section>
[...]
</document>

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

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

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


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


我該如何做?
修改project.xml中的reports元素內容來(lái)改變Maven站點(diǎn)生成對報告的生成。下面是reports元素中的幾個(gè)有效的報告活動(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è)報告,僅需要移除reports元素中的report的插件元素。Maven項目并未指定reports元素生成一套默認的報告:jdepend,Checkstyle,changes,changelog,developer-activity,file-activity,license,javadoc,jxr,junit,linkcheck和tacklist。當你添加一個(gè)reports元素到你項目的project.xml文件,你必須列出所有你希望獲得的報告。

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


更多全面的插件和報告列表,參見(jiàn):
Maven插件: http://maven.apache.org/reference/plugins/index.html
Maven插件沙箱: http://maven.apache.org/plugins-sandbox/index.html
Maven 在SourceForge上的插件: http://maven-plugins.sourceforge.net/
第三方Maven插件: http://maven.apache.org/reference/3rdparty.html
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
用Maven做項目管理
Maven入門(mén)指南(一) | 并發(fā)編程網(wǎng)
教程--開(kāi)始使用Maven
maven2 起步
使用Maven 2創(chuàng )建WebLogic Portal應用程序
spring boot 項目部署到服務(wù)器 兩種方式
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久