久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Maven 2.0:編譯、測試、部署,、運行

 figol 2006-09-27
一個Java項目中最困難的地方就是如何著手啟動它。在啟動項目之前,,我們必須配置好所有的邏輯關(guān)系,。比如,Java源代碼應(yīng)該放在何處,?單元測試應(yīng)該在何處進行,?依賴的jar包應(yīng)該如何放置?如何構(gòu)建項目,,如何形成文檔,,如何測試和部署項目?在這種情況下,,開發(fā)人員不同的處理選擇將會影響項目的余下部分,。您的選擇可能會使你陷入困境,也可能會在將來證明您是一位Java架構(gòu)大師,。我們假定后者是我們奮斗的目標(biāo),,接下來就進入我們的正題。

構(gòu)建一個Java項目可以使用很多工具,,其中包括Ant,。Ant作為一款具有革命性的工具,一直是眾多開發(fā)者使用工具中的首選,,它能使開發(fā)人員擺脫使用大量make命令的苦海,。對于那些不太熟悉make命令的人來說,,他們有充足的理由來表明使用命令并不是構(gòu)建Java項目的最好工具,,因為它不具備平臺獨立性并且不易使用。Ant的出現(xiàn)解決了以上的問題,,它使用了一個平臺獨立的工具,,該工具能夠解析XML配置文件,即build.xml,。雖然Ant由于其諸多的優(yōu)點而備受歡迎,,但它同樣有一些缺點。build.xml文件由于采用了極其簡短的描述方式,使得開發(fā)人員需要預(yù)先學(xué)習(xí)它的語法,。雖然學(xué)習(xí)曲線不是很陡峭,,但Java開發(fā)人員更應(yīng)該把時間放在開發(fā)上面。

Maven是新一代的生力軍,,它的境遇正好和幾年前的Ant十分類似,。Maven1.0已經(jīng)歷了幾年的時間,并且作為Ant的替代品已被廣大的開發(fā)人員所接收,,但它并沒有在很大程度使開發(fā)人員從Ant的build.xml文件中解脫出來,。Maven1.0速度慢并且笨拙,使用起來的困難度并不亞于使用Ant的項目,。事實上,,它的核心是基于Ant實現(xiàn)的。在經(jīng)過了幾乎徹底的重寫后,,Maven2.0誕生了,。

版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時請務(wù)必保留以下作者信息和鏈接
作者:Chris Hardin;mycj(作者的blog:http://blog./page/mycj)
原文:http://www./pub/a/onjava/2006/03/29/maven-2-0.html
Matrix:http://www./resource/article/44/44475_Maven2.html
關(guān)鍵字:Maven2

Maven2.0的優(yōu)點

Maven2.0有許多很好功能,,這些功能不僅僅是幫助您構(gòu)建項目,。如果您剛剛開始啟動一個Java項目,并且想使該項目快速地開展下去,,Maven2.0能夠在幾分鐘內(nèi)達到您的要求,。以下是Maven2.0的一些優(yōu)點:
--標(biāo)準(zhǔn)的項目布局和項目結(jié)構(gòu)生成器
--標(biāo)準(zhǔn)的依賴管理機制
--多項目支持
--在開發(fā)者需要的時候及時地下載新的插件和功能部件
--生成最新項目信息的網(wǎng)站
--集成了源代碼控制軟件:CVS和Subversion

以上列表展示的只是Maven2.0特點中的一小部分。但這足以使Maven2.0成為一個構(gòu)建管理系統(tǒng)可靠的選擇,。既然我們已經(jīng)知道Maven是個什么東西了,,接下來讓我們看看如何使用它。

入門

我們要做的第一件事情就是設(shè)置目錄結(jié)構(gòu),,但這并不需要讓我們手動設(shè)置,,Maven會根據(jù)您開發(fā)的項目類型來為您做這件事。一旦您下載并解壓了最新發(fā)布的Maven 2.0,,您應(yīng)該將Maven所在目錄下面的bin目錄添加到您的系統(tǒng)路徑下。您可以運行命令mvn -version來測試您的安裝,。

既然已經(jīng)安裝上了工具,,讓我們看看創(chuàng)建一個簡單的Java項目的例子。Maven使用原型來決定目錄結(jié)構(gòu)是如何展現(xiàn)的,。Maven自帶了幾個內(nèi)建的原型,,您也可以自定義原型。

mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app

您看,,這就生成了我們的項目布局,。
my-app
----src
    ----main
        ----java
           ----com
               ----oreilly
    ----test
        ----java
            ----com
                ----oreilly

對,就這么簡單。這種目錄結(jié)構(gòu)可以通過創(chuàng)建一個新的原型來覆寫,,但并不推薦這么做,,因為Maven的一個優(yōu)點就是使用標(biāo)準(zhǔn)的目錄結(jié)構(gòu)。該目錄結(jié)構(gòu)包含兩個源代碼樹,,一個是Java應(yīng)用程序的源代碼,,另一個是單元測試代碼。同時您也許會注意到,,當(dāng)?shù)谝淮芜\行Maven的時候,,它會進行一些下載工作。當(dāng)您開始調(diào)用工具時,,Maven會根據(jù)您使用的插件來更新自身的一些所需功能,。Maven默認會從Ibiblio存儲庫中得到更新。您可以在Maven安裝目錄下的conf目錄中,,或者項目自身中修改Maven遠程存儲庫的選擇,。
您會發(fā)現(xiàn)Maven在my-app目錄下創(chuàng)建了一個pom.xml文件。這是項目的最基本部分,。pom.xml文件包含了一組指令,,這些指令告訴Maven如何構(gòu)建項目和包含哪些其它的特殊指令(POM是“項目對象模型”的縮寫)。在默認的情況下,,Maven包含了JUnit的依賴以此來鼓勵單元測試,。

<project xmlns="http://maven./POM/4.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven./POM/4.0.0 http://maven./maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.oreilly</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Maven Quick Start Archetype</name>
  <url>http://maven.</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>


創(chuàng)建完項目后,我們可以往項目里添加代碼并使用Maven的所有全新技巧,。注意以下命令必須在pom.xml文件所在的目錄中運行,。
--mvn test:運行應(yīng)用程序中的單元測試
--mvn package:依據(jù)項目生成jar文件
--mvn install:將項目的jar文件添加到庫中,        以備依賴此項目時使用
--mvn site:生成項目相關(guān)信息的網(wǎng)站
--mvn clean:清除目標(biāo)目錄中的生成結(jié)果
--mvn eclipse:eclipse:生成Eclipse項目文件

接下來我們看看稍微復(fù)雜點的地方,,我們知道手動開始一個Java web項目比手動開始一個簡單的Java項目更耗時,,然而Maven的使用則能化難為易。下面的例子(實際上是一行命令)展現(xiàn)了項目結(jié)構(gòu)的構(gòu)造,。
mvn archetype:create -DgroupId=com.oreilly
    -DartifactId=Oreilly
    -DarchetypeArtifactId=maven-archetype-webapp


生成的結(jié)果結(jié)構(gòu)如下所示:
Oreilly
----src
    ----main
        ----resources
        ----webapp
            ----WEB-INF

這一次,,我們的項目由于支持了將包含在war文件中的web資源而設(shè)置有所不同。pom.xml文件中將包含一行來表明項目應(yīng)該被打包成war文件:<packaging>war</packaging>?,F(xiàn)在就可以使用mvn package命令來生成war文件,。不用擔(dān)心如何從WEB-INF/lib目錄中得到依賴項,在依賴屬性值被設(shè)置成compile的情況下,,Maven會自動包含依賴項,。也可以將以下代碼添加到pom.xml文件中來改變war文件的名稱:
<build>
    <finalName>PromoteC</finalName>
</build>


依賴管理

創(chuàng)建好項目結(jié)構(gòu),添加完一些代碼,,測試并編譯好應(yīng)用程序后,,接下來可以看看Maven是如何處理依賴關(guān)系的,。為了給項目添加一個依賴項,必須將此依賴項添加到pom.xml文件中,。下次運行Maven的時候,,它將從Ibiblio存儲庫中得到這個依賴項,并且將此依賴項添加到項目構(gòu)建路徑中,。

關(guān)于依賴的問題有幾個重要的事情值得注意,。在寫這篇文章的時候,Maven中最大的麻煩之處就是不能從Maven存儲庫中獲取Sun的jar文件,。這個問題歸因于Sun在其代碼中設(shè)置的許可證限制,。解決這個問題的辦法有兩種,一種是下載這些代碼并將它們安裝在您本地的存儲庫中,,另一種是做一個外部聲明,,并將這個聲明指向文件系統(tǒng)中依賴項所在的位置。希望Sun能夠盡早地創(chuàng)建自己的存儲庫,,盡管如此,,Maven也會被升級來使之能夠下載這些資源,只是在下載之前它會提示用戶接受許可證協(xié)議,。

另外一個麻煩的地方就是有時候使用的最新的庫文件可能在遠程存儲庫中不存在,。另一種可能是由于無法訪問Internet,需要所有的依賴項都能在本地獲取,。這些問題的最好解決方案就是將jar文件安裝到本地的存儲庫中,。將本地的存儲庫放在一臺web服務(wù)器上也同樣是個便利之舉,這樣整個開發(fā)團隊就能從此獲益,,每個人都沒有必要去管理自己的存儲庫了,。改變Maven的存儲庫路徑只需簡單地編輯其安裝目錄下conf文件夾下面的settings.xml文件即可。

在Maven中使用依賴是簡單的,。讓我們看看往上述pom.xml文件中添加一個依賴項的情況,。我們雖然已經(jīng)使用了JUnit,但讓我們將功能強大的Quartz庫添加到項目中,。Quartz是一款用純Java編寫的關(guān)于時間安排的開源項目,,它是您時間安排需求方面的很好的選擇。
<dependency>
   <groupId>quartz</groupId>
   <artifactId>quartz</artifactId>
   <version>1.5.1</version>
   <scope>compile</scope>
</dependency>


我們僅僅只需添加<dependencies>這個元素,,Maven就能下載Quartz并將其作為項目中的一個依賴項,。不用擔(dān)心Quartz的依賴項,一個Maven的存儲庫將包含依賴項自身依賴的資源信息,,當(dāng)Maven下載Quartz的時候,,它自身的依賴資源也同樣會被下載,。為了驗證版本為1.5.1的Quartz存在于Ibiblio庫中,,我們可以瀏覽Maven存儲庫,。注意到scope參數(shù)的使用,它告訴了Maven依賴項在何種階段是所需的,。在使用JUnit的情況下,,我們設(shè)置scope參數(shù)的值為test來告訴Maven這個依賴項只是在測試階段所需的,而不是運行時所需的資源,。以下是scope參數(shù)值的說明:
--compile:默認值,。表明是所有任務(wù)所需的資源
--test:運行所有的測試用例時所需資源
--runtime:表明是運行時所需資源
--provided:JDK部分或應(yīng)用服務(wù)器的classpath所需的資源

現(xiàn)在,如何處理那些麻煩的Sun的jar包和那些需要但卻不能在遠程存儲庫中找到的jar包了,?我們必須使用Maven來手動將這些jar包安裝到本地的存儲庫中,。不用擔(dān)心,這沒有聽上去那么困難,。為了做個示例,,我們將安裝Java Activation框架的jar包。首先我們必須從Sun的站點上下載此jar包,,接著我們使用Maven將它導(dǎo)入本地的存儲庫中,。您自己也可以按照Maven上傳資源指南中的指導(dǎo)將缺少的jar包安裝到Ibiblio中。
mvn install:install-file -Dfile=activation.jar
    -DgroupId=javax.activation -DartifactId=activation
    -Dversion=1.0 -Dpackaging=jar


現(xiàn)在,,新的jar包就像其它的項目依賴項一樣安裝到了本地存儲庫中,。在只需添加依賴聲明后,我們就已準(zhǔn)備就緒了,。在添加jar包和聲明它們?yōu)橐蕾図棔r,,必須確保版本信息的正確性。版本的不匹配會導(dǎo)致Maven在尋找資源時的失敗,。在導(dǎo)入Sun的jar包時,,如果您需要尋求標(biāo)準(zhǔn)命名參數(shù)的幫助,可以參考Sun標(biāo)準(zhǔn)jar包命名,。記住,,在目前您不能通過存儲庫來公開發(fā)布這些jar包,這將違反Sun的使用條款,。
<dependency>
   <groupId>javax.activation</groupId>
   <artifactId>activation</artifactId>
   <version>1.0</version>
   <scope>compile</scope>
</dependency>


您或許想將依賴項存入一個源代碼控制器的庫中,,源代碼控制器決不能執(zhí)行這個任務(wù)。依賴項是經(jīng)常變化的,,并且通常有一套數(shù)字方案來標(biāo)明其版本,。這就是說,您明確地希望有一個內(nèi)部遠程存儲庫的備份,,如果您有一個,,這將確保在存儲庫服務(wù)器崩潰并且不能恢復(fù)的情況下,您不會丟失所有的自定義資源,。不將依賴項放入源代碼控制器中也會節(jié)省源代碼控制器的存儲庫服務(wù)器上的大量磁盤空間,。

配置存儲庫

要求項目的每個開發(fā)者必須在conf目錄中配置存儲庫是不方便的,,所以Maven可以同時查看多個存儲庫并且將它們?nèi)颗渲迷趐om.xml文件中。讓我們看看一個例子,,它展示了如何在應(yīng)用程序用使用多個存儲庫,。在以下從pom.xml文件摘錄的片斷中,我們設(shè)置了兩個存儲庫來讓Maven尋找依賴項,。Ibiblio一直是默認的存儲庫,,我們又添加了Planet Mirror作為后援存儲庫。我們也可以讓團隊使用的本地web服務(wù)器作為第二個存儲庫,。
<repositories>
    <repository>
      <id>Ibiblio</id>
      <name>Ibiblio</name>
      <url>http://www./maven/</url>
    </repository>
    <repository>
      <id>PlanetMirror</id>
      <name>Planet Mirror</name>
      <url>http://public./pub/maven/</url>
    </repository>
  </repositories>


使用pom.xml父文件來構(gòu)建多個項目

軟件公司通常的一種做法就是將多個項目構(gòu)建到主要產(chǎn)品中,。維護依賴關(guān)系鏈和一次性地構(gòu)建整個產(chǎn)品足以成為一個挑戰(zhàn),但是如果使用Maven的話,,事情將變得簡單,。如果您創(chuàng)建了一個指向其它子模塊的pom.xml父文件,Maven將為您處理整個構(gòu)建過程,。它將分析每個子模塊的pom.xml文件,,并且按照這些子模塊的相互依賴順序來構(gòu)建項目。如果每個項目明確地指明它們的依賴項,,那么子模塊在父文件中的放置順序是不造成任何影響的,。但是考慮到其他的開發(fā)者,最好保證子模塊在pom.xml父文件中的放置順序和您期望的子項目被構(gòu)建的順序一樣,。下面我們看個示例,。
pom.xml主文件如下:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.oreilly</groupId>
  <version>1.0-SNAPSHOT</version>
  <artifactId>my-app</artifactId>
  <packaging>pom</packaging>
  <modules>
    <module>Common</module>
    <module>Utilities</module>
    <module>Application</module>
     <module>WebApplication</module>
  </modules>
</project>


我們需要確保WebApplication子模塊包含了所有的三個jar包,所以需要將這些jar包聲明為依賴項,。在這個例子中,,Utilities項目依賴于Common項目,所以Utilities項目中需要添加一個對Common項目的依賴,。Application子模塊也是同樣的道理,,因為它依賴于Common和Utilities項目,Utilities又賴于Common,。如果這個例子中有60個子模塊,,并且它們都相互依賴,這會使得新開發(fā)者難以算出什么項目依賴于其它項目,,所以這正好是要求確保pom.xml父文件中項目放置順序要清除的原因,。

以下是Utility模塊的依賴項:
<dependencies>
    <dependency>
      <groupId>com.oreilly</groupId>
      <artifactId>Common</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>


以下是如何聲明Application模塊的依賴項:
<dependencies>
    <dependency>
      <groupId>com.oreilly</groupId>
      <artifactId>Common</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>com.oreilly</groupId>
      <artifactId>Utilities</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>


最后是WebApplication模塊的依賴項:
<dependencies>
    <dependency>
      <groupId>com.oreilly</groupId>
      <artifactId>Common</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>com.oreilly</groupId>
      <artifactId>Utilities</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    
    <dependency>
      <groupId>com.oreilly</groupId>
      <artifactId>Application</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    
</dependencies>


現(xiàn)在,我們只需為每個子模塊的pom.xml文件添加一個元素來表明它們是一個邏輯構(gòu)建的一部分:
<parent>
    <groupId>com.oreilly</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>


在pom.xml父文件所在的同一個目錄中,,存在有項目目錄:Common, Utilities, Application, 和WebApplication,。當(dāng)我們在該目錄中運行mvn package命令時,這些項目會按照依賴順序而被構(gòu)建,。

插件和報表

Maven2.0有大量的插件可以使用,。不幸的是,,由于Maven的重寫,Maven1.0的插件不能在2.0中使用,。盡管如此,還是存在一些可以使用的Maven2.0的插件,。下面pom.xml文件中的插件配置示例是直接從Maven2.0網(wǎng)站上得來的,。這個插件是用來配置編譯選項的。
<plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.5</source>
        <target>1.5</target>
      </configuration>
    </plugin>
  </plugins>


Maven報表插件可以用來生成不同的報表,,這些報表是在當(dāng)你使用mvn site命令生成項目的站點時產(chǎn)生的,。下面的例子展示了如何使用<reporting>元素來配置這類插件中的一個。
<reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>


Maven Plugin Matrix是一個十分實用的工具,,它能給出哪些Maven插件適合于哪些版本的Maven,。

Maven 和 Eclipse

如何能使全世界最好的IDE變得更好了?答案是使用Maven2的插件,,它能幫助您尋找依賴項并自動地將它們添加到pom.xml文件中,。雖然最好的方法是首先使用Maven來創(chuàng)建您的項目,然后再用命令mvn eclipse:eclipse來生成Eclipse項目文件,,這樣最初就能得到一個好的目錄結(jié)構(gòu),,但Maven也可通過其Eclipse插件來管理任何項目。

您可以在Eclipse自身的升級器中輸入站點http://m2eclipse./來安裝插件,。在安裝完成并重啟IDE后,,您需要在Eclipse的參數(shù)選項中配置此插件,設(shè)置本地存儲庫的位置,。這是很重要的一步,,因為如果Eclipse默認的存儲庫不能匹配您默認的需求,Maven會重新下載您的依賴項,。配置完成后,,將項目導(dǎo)入Eclipse,鼠標(biāo)右擊該項目,,選擇Maven 2 -> Enable?,F(xiàn)在您可以回到之前的步驟,您可以有更多的選項比如添加依賴項,,這將彈出一個搜索框,,您可以搜索依賴項并添加它們,插件會替你編輯pom.xml文件,。

插件會使用Maven來構(gòu)建您的項目,,就像Eclipse使用Ant來構(gòu)建項目一樣。如果您想獲取更多的關(guān)于Eclipse整合Maven的信息,,可以查閱Maven站點上的Eclipse集成Maven 2.x使用指南,。

另一方面,,如果您是一個IntelliJ使用愛好者,您也能通過運行指令mvn idea:idea來完成同樣的任務(wù),。這些IDE        工具能夠節(jié)省開發(fā)人員的時間,。例如,如果一個開發(fā)人員為一個項目添加了一些特征,,團隊里的其他開發(fā)人員只需從源代碼控制器的存儲庫中重新獲取項目文件即可,,這就節(jié)省了每個開發(fā)人員必須配置IDE的時間。

結(jié)論

Maven2.0有著許多實用的特點,,并且完成任務(wù)十分出色,。Maven中最值得稱贊的地方就是使用了標(biāo)準(zhǔn)的目錄結(jié)構(gòu)和部署。這就使得開發(fā)人員能夠適應(yīng)不同的項目,,并且不用學(xué)習(xí)任何結(jié)構(gòu)方面新的東西,,也不用掌握特殊的指令來構(gòu)建結(jié)構(gòu)。Maven可以通過純腳本來實現(xiàn),。在文檔方面,,由于使用了項目站點構(gòu)建工具,所以當(dāng)項目構(gòu)建完成后,,您可以查看所有開發(fā)的當(dāng)前狀態(tài),。

毫無疑問,當(dāng)提到構(gòu)建配置的伸縮性,,易用性和項目管理方面時,,Maven2.0足可以將Ant取而代之。在接下來的幾年內(nèi),,我們將看到Maven作為標(biāo)準(zhǔn)構(gòu)建技術(shù)更多的使用,,直到有人帶來了大家公認的“高級捕鼠器”。您可以從下面列出的Maven項目站點上下載Maven,。

資源
Matrix:http://www.
Onjava:http://www.
Maven項目站點

Chris Hardin 是McLeod軟件公司的高級Java工程師,。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多