隨筆-31  評(píng)論-2  文章-0  trackbacks-0

          概述

          Maven 最初的目的是在Jakarta Turbine項(xiàng)目中使構(gòu)建處理簡(jiǎn)單化。幾個(gè)項(xiàng)目之間使用到的Ant build文件差異很小,各個(gè)JAR都存入CVS。因此希望有一個(gè)標(biāo)準(zhǔn)的方法構(gòu)建各個(gè)工程,清晰的定義一個(gè)工程的組成,一個(gè)容易的方法去發(fā)布項(xiàng)目信息并且 去提供一種在各個(gè)項(xiàng)目之間共享JAR包。

          結(jié)果出現(xiàn)了一種功能能用于構(gòu)建和管理任何基于java的工程。Maven小組希望他們已經(jīng)做到了一些事情,這將有助于Java開發(fā)者更容易的完成每天的工作并且有助于理解任何基于java的項(xiàng)目。

          Maven的目標(biāo)

          • 使構(gòu)建過程更容易
          • 提供統(tǒng)一構(gòu)建系統(tǒng)
          • 提供高質(zhì)量的項(xiàng)目信息
          • 提供開發(fā)的最佳實(shí)踐指南
          • 能無(wú)縫的加入新的特性

          對(duì)Maven的錯(cuò)誤理解

          • Maven是一個(gè)站點(diǎn)和文檔制作工具。
          • Maven擴(kuò)展了Ant,使其能下載到各種依賴包
          • Maven是一系列可重用的Ant腳本

          Maven的版本

          Maven現(xiàn)在主要有Maven 1.x和Maven 2.x,其中現(xiàn)在最新版本是Maven 2.02。

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

          因此現(xiàn)在我們主要研究的就是Maven 2。

          Maven的安裝

          Windows 2000/xp下的安裝

          1. 解壓縮maven-2.0.2-bin.zip到你希望安裝Maven 2.0.2的所在目錄。這里假設(shè)你選擇了C:\ProgramFiles\Apache Software Foundation\maven-2.0.2.
          2. 將C:\Program Files\Apache Software Foundation\maven-2.0.2\bin目錄加入到你的%path%環(huán)境變量中。
          3. 同時(shí),確認(rèn)JAVA_HOME是否正確設(shè)置成功。
          4. 運(yùn)行 mvn --version 確認(rèn)是否安裝成功。

          顯示Maven version: 2.0.2 則表示安裝成功。

          基于Unxi-based的操作系統(tǒng)(Linux,Solaris and Mac OS X)

          1. 解壓縮發(fā)布包到你希望安裝Maven 2.0.2的所在目錄。這里假設(shè)你選擇了/usr/local/maven-
          2. 將/usr/local/maven-2.0.2/bin目錄加入到你的path環(huán)境變量中,例如:PATH=/usr/local/maven-2.0.2y/bin: $PATH。
          3. 同時(shí),確認(rèn)JAVA_HOME是否正確設(shè)置成功。
          4. 運(yùn)行 mvn --version 確認(rèn)是否安裝成功。

          顯示Maven version: 2.0.2 則表示安裝成功。

          查看依賴庫(kù)的位置
          http://mvnrepository.com/

          Maven主要功能

          Maven是一種對(duì)項(xiàng)目的管理工具,它提供了一種方式來管理以下項(xiàng)目中涉及到的工作內(nèi)容,同時(shí)以下也是Maven的主要功能:

          • 構(gòu)建項(xiàng)目(Builds)
          • 文檔編制(Documentation)
          • 報(bào)告(Reporting)
          • 依賴管理(Dependencies)
          • 配置管理(SCMs)
          • 發(fā)布管理(Releases)

          構(gòu)建項(xiàng)目

          首先創(chuàng)建一個(gè)Maven工程。Maven可用于構(gòu)建java應(yīng)用工程和java web應(yīng)用工程。

          web項(xiàng)目

          mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp

          目錄結(jié)果如下:

          my-webapp

          |-- pom.xml

          `-- src

          `-- main

          |-- webapp

          | |-- WEB-INF

          | | `-- web.xml

          | `--index.jsp

          `-- resources

          其他的目錄則需要自己補(bǔ)充。

          其pom.xml文件內(nèi)容如下:

          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>com.mycompany.app</groupId>
          <artifactId>my-webapp</artifactId>
          <packaging>war</packaging>
          <version>1.0-SNAPSHOT</version>
          <name>Maven Webapp Archetype</name>
          <url>http://maven.apache.org</url>
          <dependencies>
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
          </dependency>
          </dependencies>
          <build>
          <finalName>my-webapp</finalName>
          </build>
          </project>

          java應(yīng)用程序

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

          命令正確執(zhí)行后,生成如下目錄:

          my-app

          |-- pom.xml

          `-- src

          |-- main

          | `-- java

          | `-- com

          | `-- mycompany

          | `-- app

          | `-- App.java

          `-- test

          `-- java

          `-- com

          `-- mycompany

          `-- app

          `-- AppTest.java

          其pom.xml文件內(nèi)容如下:

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

          Maven項(xiàng)目的標(biāo)準(zhǔn)目錄介紹

          Maven提倡使用一個(gè)共同的標(biāo)準(zhǔn)目錄結(jié)構(gòu),使開發(fā)人員能在熟悉了一個(gè)Maven工程后,對(duì)其他的Maven工程也能清晰了解。這樣做也省去了很多設(shè)置的麻煩。
          以下的文檔介紹是Maven希望的目錄結(jié)構(gòu),并且也是目錄創(chuàng)建工程是采用的目錄結(jié)構(gòu)。Maven推薦大家盡可能的遵守這樣的目錄結(jié)構(gòu)。

          src/main/java - 應(yīng)用程序/庫(kù)源碼
          src/main/resources - 應(yīng)用程序/庫(kù)資源
          src/main/filters - 資源的filter文件
          src/main/assembly - assembly描述符
          src/main/config - 配置文件
          src/main/webapps - Web應(yīng)用程序源碼
          src/test/java - 測(cè)試源碼
          src/test/resources - 測(cè)試資源
          src/test/filters - 測(cè)試資源的filter
          src/site - 站點(diǎn)
          LICENSE.txt - 項(xiàng)目許可
          README.txt - 項(xiàng)目readmine

          在頂級(jí)目錄上是工程的描述文件pom.xml(如果使用Ant則還包括其他屬性文件,maven.xml或build.xml),另外還包括提供給最終用戶的文件,如,README.txt, LICENSE.txt等等。
          頂級(jí)目錄還包括兩個(gè)子目錄:src,target。頂級(jí)目錄下可能出現(xiàn)的其他目錄僅僅是CVS或.svn和其他多模塊工程的工程目錄,最好不要再有其他目錄。
          Target目錄是所有工程編譯構(gòu)建的輸出目錄。
          Src目錄包含所有工程的源碼文件,配置文件,資源文件等等。它下面的子目錄一般包含main(主要的工程源文件),test(測(cè)試文件),site(項(xiàng)目站點(diǎn)文件)。

          項(xiàng)目構(gòu)建的生命周期的介紹

          Maven 2是圍繞著構(gòu)建生命周期概念設(shè)計(jì)的。這意味著,構(gòu)建或者發(fā)布的過程已經(jīng)被清晰的定義了。
          當(dāng)我們使用Maven構(gòu)建工程時(shí),我們只需要了解幾個(gè)Maven定義好的命令即可,其他的工作則交給POM來完成。
          以下給出Maven提供的構(gòu)建生命周期列表:

          validate 驗(yàn)證項(xiàng)目是否正確,所有必要信息是否可用。
          generate-sources 生成編譯所需的任意源碼。
          process-sources 處理源碼,比如過濾一些數(shù)值。
          generate-resources 生成包里所需包含的資源。
          process-resources 處理資源,并拷貝到目標(biāo)目錄中,以便打包。
          compile 編譯項(xiàng)目源碼
          process-classes 對(duì)編譯生成的文件進(jìn)行后期處理。比如,對(duì)Java類的字節(jié)碼進(jìn)行修改。
          generate-test-sources 生成編譯所需的任意測(cè)試代碼
          process-test-sources 處理測(cè)試代碼,比如過濾一些數(shù)值。
          generate-test-resources 生成測(cè)試用資源
          process-test-resources 處理資源,并拷貝到測(cè)試用的目標(biāo)目錄中。
          test-compile 編譯測(cè)試代碼,放到測(cè)試目標(biāo)目錄
          test 用合適的單元測(cè)試框架來運(yùn)行測(cè)試。這些測(cè)試不應(yīng)當(dāng)要求代碼被打包或部署。
          package 把編譯好的代碼打包成可以發(fā)布的格式,例如JAR
          pre-integration-test 執(zhí)行集成測(cè)試之前必須完成的動(dòng)作,比如,設(shè)置集成測(cè)試所需的環(huán)境。
          integration-test 執(zhí)行集成測(cè)試。如果需要,會(huì)事先把包部署到集成測(cè)試所需的運(yùn)行環(huán)境中。
          post-integration-test 執(zhí)行集成測(cè)試之后必須完成的動(dòng)作,比如運(yùn)行環(huán)境的清理。
          verify 檢查包是否合法,是否滿足特定的質(zhì)量要求
          install 把包安裝在本地倉(cāng)庫(kù)中,以便作為本地其他項(xiàng)目的依賴。
          deploy 在集成或發(fā)布環(huán)境中完成部署,并且把最終的包拷貝到遠(yuǎn)程倉(cāng)庫(kù)中,以便被其他開發(fā)人員和工程所共享。

          因此,當(dāng)我們構(gòu)建一個(gè)項(xiàng)目時(shí),只需要了解自己希望做什么,然后執(zhí)行以上對(duì)應(yīng)的生命周期即可。
          例如,我們希望編譯我們的工程。在命令行狀態(tài)下進(jìn)入到工程的pom.xml文件所在的目錄中,使用命令:mvn compile;希望構(gòu)建打包我們的工程,使用mvn package即可。
          當(dāng)然了,maven的構(gòu)建生命周期也是可以擴(kuò)展和自定義的,這里就先不做介紹了。

          pom.xml介紹

          pom.xml包含了一個(gè)項(xiàng)目的項(xiàng)目對(duì)象模型(POM)。項(xiàng)目對(duì)象模型(POM)是Maven工作的基本單元。請(qǐng)記住,這個(gè)是非常重要的,因?yàn)镻OM包含了工程的非常重要的信息塊,并且基本上包含了和項(xiàng)目相關(guān)的任何要素。

          讓我們熟悉一下pom.xml包含的基本項(xiàng):

          • poject 這是pom.xml的頂級(jí)元素。
          • modelVersion 這是元素指出了這個(gè)POM使用的是那個(gè)版本的對(duì)象模型。這個(gè)模型的版本自身么是經(jīng)常改變的,但這種改變是為了使模型更加的穩(wěn)定。
          • groupId 這個(gè)元素指出創(chuàng)建這個(gè)工程的組織或團(tuán)隊(duì)的唯一標(biāo)識(shí),并且這個(gè)也是一個(gè)項(xiàng)目的關(guān)鍵標(biāo)識(shí),推薦使用這個(gè)組織或團(tuán)隊(duì)的完整域名。例如:org.apache.maven.plugins是為Maven plug-ins定義的groupId。
          • artifactId 這個(gè)元素指出這個(gè)工程的主要制品的基本名稱。一個(gè)工程的主要制品如果是jar文件,次要制品如果是源碼包,則次要制品的名稱的一部分也使用 artifactId。典型的制品名稱使用這樣的格 式:<artifactId>-<version>.<extension>(例如,myapp- 1.0.jar)。
          • packaging 這個(gè)元素指出制品的類型(例如:JAR,WAR,EAR等等)。這個(gè)元素不僅僅指示出制品的類型,同時(shí)也指示出工程構(gòu)建過程中的部分生命周期。Packaging的默認(rèn)值是JAR。
          • version 這個(gè)元素指出這個(gè)項(xiàng)目產(chǎn)生的制品的版本號(hào),Maven在幫助開發(fā)人員管理版本號(hào)時(shí)走了很長(zhǎng)的路,以后你將經(jīng)常看到SNAPSHOT在一個(gè)版本中,這個(gè)表示一個(gè)工程仍然在開發(fā)狀態(tài)。
          • name 這個(gè)元素指出這個(gè)工程顯示的名稱。這個(gè)常用于Maven產(chǎn)生的文檔中。
          • url 這個(gè)員算指出在哪里能發(fā)現(xiàn)工程的站點(diǎn)。這個(gè)常用于Maven產(chǎn)生的文檔中。
          • desription 這個(gè)元素提供了這個(gè)工程基本的描述。這個(gè)也常用于Maven產(chǎn)生的文檔中。

          以上只是pom.xml中的一些基本項(xiàng),完整的pom.xml的元素介紹請(qǐng)參考:

          http://maven.apache.org/maven-model/maven.html

          文檔編制

          文檔創(chuàng)建:

          對(duì)于如何創(chuàng)建和編制文檔,maven有一個(gè)簡(jiǎn)單的示例命令:

          mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-site

          執(zhí)行了以上命令后,我們將得到這樣一個(gè)目錄結(jié)構(gòu):

          my-app

          |-- pom.xml

          `-- src

          |-- site

          |-- apt

          | |-- format.apt

          | `-- index.apt

          |-- fml

          | `-- faq.fml

          |-- fr

          | |-- apt

          | | |-- format.apt

          | | `-- index.apt

          | |-- fml

          | | `-- faq.fml

          | `-- xdoc

          | `-- xdoc.xml

          |-- site.xml

          |-- site_fr.xml

          `-- xdoc

          `-- xdoc.xml

          你現(xiàn)在可以看到一個(gè)$basedir/src/site目錄,以及它包含的一些站點(diǎn)描述文件(site.xml,site_fr_xml),和各種maven支持的文檔格式相對(duì)應(yīng)的目錄和示例文檔都已經(jīng)產(chǎn)生。
          以上的創(chuàng)建只是示例,我們自己創(chuàng)建時(shí)就沒有命令行使用了,只能按照上面的目錄結(jié)構(gòu)創(chuàng)建我們需要的文檔,并在文檔中寫入我們工程的信息。
          讓我們?cè)賮砜纯磎aven所支持的文檔格式。

          文檔格式

          Maven支持3種文檔格式:

          • Xdoc format 這個(gè)是一種簡(jiǎn)單快捷的,基于original Anakia format的文件格式。
          • APT format “Almost Plain Text”,(接近普通文本格式),這是一種允許你采用接近普通文本格式的方式簡(jiǎn)單的寫出類似于wiki格式的結(jié)構(gòu)性文檔。

          如果你對(duì)此很感興趣,請(qǐng)參考完整的APT format的書寫規(guī)范

          http://maven.apache.org/guides/mini/guide-apt-format.html

          • FML formate 這個(gè)是一種FAQ結(jié)構(gòu)形式的文檔格式。

          了 解了以上的文檔格式,我們就可以按照以上文檔格式的要求,選用我們喜歡的文檔格式編寫我們的文檔。當(dāng)編寫完成后,我們需要生成所有文檔。這里生成文 檔,maven的處理是生成站點(diǎn)(site),也就是身成html頁(yè)面,這樣所有對(duì)此項(xiàng)目感興趣的人員都可以通過訪問此站點(diǎn)來了解所有的信息。生成站點(diǎn)的 命令是:

          mvn site

          文檔國(guó)際化

          當(dāng)然,你可能早就想到文檔國(guó)際化的問題,這里maven也早就處理了。在pom.xml中

          <project>
          ...
          <build>
          <plugins>
          <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <configuration>
          <locales>en,fr</locales>
          </configuration>
          </plugin>
          </plugins>
          ...
          </project>

          注意到<locales>en,fr</locales>了嗎?這里就支持了英語(yǔ)(en)和法語(yǔ) (fr)兩種語(yǔ)言的文檔。請(qǐng)注意以下生成的目錄,由于英語(yǔ)是在第一個(gè),屬于默認(rèn)語(yǔ)言,所以$basedir/src/site目錄下并沒有en的文件夾, 而有fr的文件夾,而且這個(gè)文件夾里包含了maven支持的文檔格式相對(duì)應(yīng)的目錄和示例文檔。

          報(bào)告設(shè)置

          Maven有多個(gè)報(bào)告能添加在你的文檔站點(diǎn)中,來顯示項(xiàng)目當(dāng)前的狀態(tài),這些報(bào)告采用插件的形式可在項(xiàng)目中配置。
          為了為你的文檔站點(diǎn)增加這些報(bào)告,必須增加reporting部分在pom.xml中,下面這個(gè)為標(biāo)準(zhǔn)的項(xiàng)目信息報(bào)告插件在pom.xml中的配置。

          <project>
          ...
          <reporting>
          <plugins>
          <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          </plugin>
          </plugins>
          </reporting>
          ...

          Maven在執(zhí)行mvn site命令時(shí),除了產(chǎn)生開發(fā)人員編制的文檔信息外,根據(jù)pom.xml中設(shè)置的報(bào)告,會(huì)同時(shí)生成這個(gè)項(xiàng)目信息的報(bào)告文檔。并且這個(gè)是默認(rèn)的生成項(xiàng)。

          這個(gè)默認(rèn)的生成項(xiàng)將根據(jù)項(xiàng)目的信息生成以下報(bào)告:

          • 持續(xù)集成信息(Continuous Integration)
          • 依賴性信息(Dependencies)
          • 發(fā)布追蹤信息(Issue Tracking)
          • 郵件列表信息(Mailing Lists)
          • 工程協(xié)議信息(Project License)
          • 項(xiàng)目團(tuán)隊(duì)信息(Project Team)
          • 源碼庫(kù)信息(Source Repository)

          根據(jù)筆者測(cè)試,以上信息均是在pom.xml進(jìn)行設(shè)置的。

          • 持續(xù)集成信息根據(jù)以下配置信息生成:
          <ciManagement>
          <system/>
          <url/>
          <notifiers>
          <notifier>
          <type/>
          <sendOnError/>
          <sendOnFailure/>
          <sendOnSuccess/>
          <sendOnWarning/>
          <address/>
          <configuration/>
          </notifier>
          </notifiers>
          </ciManagement>

          依賴性信息根據(jù)以下配置信息有關(guān)

          <dependencies>
          <dependency>
          <groupId/>
          <artifactId/>
          <version/>
          <type/>
          <classifier/>
          <scope/>
          <systemPath/>
          <exclusions>
          <exclusion>
          <artifactId/>
          <groupId/>
          </exclusion>
          </exclusions>
          <optional/>
          </dependency>
          </dependencies>

          issue追蹤信息

          <issueManagement>
          <system/>
          <url/>
          </issueManagement>

          郵件列表信息

          <mailingLists>
          <mailingList>
          <name/>
          <subscribe/>
          <unsubscribe/>
          <post/>
          <archive/>
          <otherArchives/>
          </mailingList>
          </mailingLists>

          筆者在pom.xml中設(shè)置以上信息后,運(yùn)行 mvn site

          工程協(xié)議信息

          <licenses>
          <license>
          <name/>
          <url/>
          <distribution/>
          <comments/>
          </license>
          </licenses>

          項(xiàng)目團(tuán)隊(duì)信息

          <organization>
          <name/>
          <url/>
          </organization>
          <developers>
          <developer>
          <id/>
          <name/>
          <email/>
          <url/>
          <organization/>
          <organizationUrl/>
          <roles/>
          <timezone/>
          <properties/>
          </developer>
          </developers>
          <contributors>
          <contributor>
          <name/>
          <email/>
          <url/>
          <organization/>
          <organizationUrl/>
          <roles/>
          <timezone/>
          <properties/>
          </contributor>
          </contributors>

          源碼庫(kù)信息

          <scm>
          <connection/>
          <developerConnection/>
          <tag/>
          <url/>
          </scm>

          默認(rèn)情況下這些文檔將生成在$basedir/src/site目錄下。
          需要得到其他的報(bào)告,則需要配置其他的報(bào)告插件。
          要想了解更多的信息,請(qǐng)參考以下網(wǎng)頁(yè):http://cvs.peopleware.be/training/maven/maven2/morePlugins.html

          依賴管理

          這里我們通過使用外部依賴(external dependencies)來大家對(duì)maven的依賴管理有一個(gè)簡(jiǎn)單而具體的了解。

          當(dāng)我們?cè)谧鲆粋€(gè)工程的時(shí)候,不可能一切都是從空白開始,對(duì)于我們做Web應(yīng)用的來說,使用框架已經(jīng)司空見慣,而這種對(duì)框架的引入使用對(duì)于Maven來說,就是工程的依賴。而我們的工程要進(jìn)行測(cè)試,則不能少了對(duì)Junit框架的依賴。

          依 賴管理是maven的一個(gè)主要特征,這個(gè)是對(duì)于用戶來說,是Maven令人振奮的一個(gè)最著名的特征。對(duì)于一個(gè)單一的工程來說,依賴管理沒有什么困難的,但 是當(dāng)你開始處理多個(gè)模塊的工程或由10多個(gè)甚至上百個(gè)模塊組成的應(yīng)用程序時(shí), Maven能幫助你輕松穩(wěn)定的控制這些大量的依賴。

          在pom.xml中dependencies部分列出了所有外部依賴,詳細(xì)描述了在編譯時(shí),測(cè)試時(shí),運(yùn)行時(shí)是否需要這個(gè)依賴。現(xiàn)在,假定我們的工程只有對(duì)Junit的依賴。它的pom.xml文件可能如下:

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

          從以上pom.xml文件可以看出,定義一個(gè)外部依賴(external dependencies)至少需要4個(gè)元素:groupId, artifactId, version, and scope。對(duì)于groupId, artifactId, version的意思,和前面我們?cè)趧?chuàng)建工程時(shí)提到的這幾個(gè)元素的意義相同,這里就不再重復(fù)介紹,scope元素指出你的工程如何使用依賴,并且它的值有 compile,test和runtime等等。想要了解更多的依賴說明的信息,請(qǐng)看:http://maven.apache.org/maven-model/maven.html

          要想了解完整的依賴機(jī)制,請(qǐng)看:http://maven.apache.org/guides/introduction/introduction-to-dependency-management.html

          有了這些依賴信息,Maven將能在工程構(gòu)建時(shí)引用依賴。

          引用的過程是:

          1. 在本地倉(cāng)庫(kù)(默認(rèn)的本地倉(cāng)庫(kù)地址為:~/.m2/repository)中查找此依賴是否存在。
          2. 如果在本地倉(cāng)庫(kù)中未發(fā)現(xiàn),則在遠(yuǎn)程倉(cāng)庫(kù)中下載此依賴,并下載到本地倉(cāng)庫(kù)中。
          3. 通過以上兩個(gè)步驟就能找到依賴。如果遠(yuǎn)程倉(cāng)庫(kù)無(wú)法訪問,則可以設(shè)置其他遠(yuǎn)程倉(cāng)庫(kù)。具體請(qǐng)看:http://maven.apache.org/guides/introduction/introduction-to-repositories.html

          一個(gè)簡(jiǎn)單的例子。比如我們要添加一個(gè)log4j到我們的工程中。

          首 先.需要了解log4j的groupId, artifactId, and version信息。可在google上搜索“site:www.ibiblio.org maven2 log4j”。這樣在搜索結(jié)果里可以找到/maven2/log4j/log4j (or /pub/packages/maven2/log4j/log4j)這樣的目錄,在這個(gè)目錄中有一個(gè)文件叫做maven-metadata.xml。這 個(gè)文件內(nèi)容如下所示:

          <metadata>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.1.3</version>
          <versioning>
          <versions>
          <version>1.1.3</version>
          <version>1.2.4</version>
          <version>1.2.5</version>
          <version>1.2.6</version>
          <version>1.2.7</version>
          <version>1.2.8</version>
          <version>1.2.11</version>
          <version>1.2.9</version>
          <version>1.2.12</version>
          </versions>
          </versioning>
          </metadata>

          這樣我們能找到groupId為log4j,artifactId為log4j,version當(dāng)然要用最新的,選擇1.2.12。scope我們?cè)O(shè)置為compile。
          這樣我們使用mvn compile 編譯工程時(shí),會(huì)看到mvn下載了log4j到我們的本地倉(cāng)庫(kù)。

          配置管理

          Maven的配置管理是作為一個(gè)單獨(dú)的Maven子項(xiàng)目在做。叫做SCM。他是這樣介紹的:

          MavenSCM 支持Maven 2.x插件(例如,maven-release-plugin)和其他工具(例如,Continuum,這個(gè)是一個(gè)和maven 2.x結(jié)合很好的一個(gè)持續(xù)集成工具。),Maven SCM提供給他們一個(gè)公共的API去做配置管理的各種操作。當(dāng)然了要執(zhí)行配置管理操作,當(dāng)然少不了配置工具了。Maven SCM給出了一個(gè)列表,說明Maven SCM現(xiàn)在所支持的配置管理工具。

          完全支持的配置管理工具:

          • CVS
          • Subversion
          • Perforce
          • StarTeam

          當(dāng)你選中了上面的一個(gè)配置管理工具,你就可以利用Maven 2.x的插件或者集成管理工具進(jìn)行配置管理了。

          持續(xù)集成工具continuum

          continuum是Maven的一個(gè)子項(xiàng)目。他是一個(gè)構(gòu)建基于java的工程的持續(xù)集成服務(wù)器。他支持以下多種工程類型:

          • Maven 1
          • Maven 2
          • Ant
          • Shell scripts

          continuum有以下特征

          • 緊密整合Maven 2.x
          • 緊密整合Maven SCM
          • 更易用的基于網(wǎng)絡(luò)的設(shè)置和界面
          • 基于Quartz(Quartz-based)的時(shí)間計(jì)劃表設(shè)置
          • 添加新項(xiàng)目十分方便
          • 郵件通知
          • 其他IM通知:IRC, Jabber, MSN
          • 責(zé)備機(jī)制(Blame Mechanism)

          在以下連接處下載此軟件:http://maven.apache.org/continuum/download.html

          安裝

          解壓縮continuum-1.0.2-bin.zip到你希望安裝Continuum 1.0.2的所在目錄。
          運(yùn)行:
          • bin/linux/run.sh 如果是UNIX平臺(tái)
          • bin/solaris/run.sh 如果是Solaris平臺(tái)
          • bin/win32/run.bat 如果是Windows平臺(tái)
          • bin/macosx/run.sh 如果是MacOS X平臺(tái).
          • bin/plexus.sh 如果是其他平臺(tái)

          當(dāng)服務(wù)器啟動(dòng)成功后,打開瀏覽器訪問:http://localhost:8080/continuum/

          注意:由于continuum判斷一個(gè)工程是否構(gòu)建成功,是使用一個(gè)命令行返回值。而windows平臺(tái)的用戶,這個(gè)返回值有問題。因此需要修改以下maven 2的bin/mvn.bat文件。這里可以直接從以下地址下載修改后的文件替換掉即可:http://maven.apache.org/continuum/scripts/mvn.bat

          添加一個(gè)項(xiàng)目到continuum

          要添加一個(gè)maven 2的項(xiàng)目到continuum,需要寫入一個(gè)pom url或者導(dǎo)入一個(gè)pom.xml,當(dāng)然導(dǎo)入的這個(gè)pom.xml文件中包含了continuum需要的各種信息。
          我們來看看導(dǎo)入的pom.xml文件中具體需要包含哪些項(xiàng):

          配置管理信息(The SCM information)

          <scm>
          <connection/>
          <developerConnection/>
          <tag/>
          <url/>
          </scm>

          開發(fā)者信息(The developers)

          <ciManagement>
          <system>continuum</system>
          <notifiers>
          <notifier>
          ...
          </notifier>
          </notifiers>
          </ciManagement>

          集成后所有的通知人信息(The notifiers)

          <notifier>
          <type>mail</type>
          <configuration>
          <address>dev@maven.apache.org</address>
          </configuration>
          <notifier>
          <notifier>
          <type>irc</type>
          <configuration>
          <host>irc.codehaus.org</host>
          <port>6667</port>
          <channel>#maven</channel>
          </configuration>
          </notifier>

          構(gòu)建工程

          • 按照定制的時(shí)間構(gòu)建
          • 點(diǎn)擊本項(xiàng)目上的build按鈕進(jìn)行構(gòu)建。

          發(fā)布管理

          配置

          要發(fā)布(Releases)一個(gè)項(xiàng)目,需要在pom.xml和setting.xml中分別配置。在pom.xml中

          <distributionManagement>
          <repository>
          <id>mycompany-repository</id>
          <name>MyCompany Repository</name>
          <url>scp://repository.mycompany.com/repository/maven2</url>
          </repository>
          </distributionManagement>

          在setting.xml中

          <settings>
          ...
          <servers>
          <server>
          <id>mycompany-repository</id>
          <username>jvanzyl</username>
          <!-- Default value is ~/.ssh/id_dsa -->
          <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
          <passphrase>my_key_passphrase</passphrase>
          </server>
          </servers>
          ...
          </settings>

          通過以上的設(shè)置,項(xiàng)目將可以發(fā)布到遠(yuǎn)程倉(cāng)庫(kù),遠(yuǎn)程服務(wù)器。

          項(xiàng)目發(fā)布現(xiàn)在支持scp,ftp和scpexe等方式。

          Setting.xml文件是一個(gè)maven的配置文件。它有下面的功能:

          • 配置本地倉(cāng)庫(kù)
          • 配置訪問網(wǎng)絡(luò)的代理服務(wù)器
          • 安全和部署的設(shè)置。
          • 為倉(cāng)庫(kù)設(shè)置景象

          想要了解更多這個(gè)文件的信息可以參考一下以下文章:http://maven.apache.org/guides/mini/guide-configuring-maven.html

          運(yùn)行發(fā)布的命令

          mvn deploy

          Maven和eclipse工具的合作

          當(dāng)有了以上的工程目錄,無(wú)論是webapp工程,還是app,我們都希望在集成開發(fā)環(huán)境中開發(fā)。Maven如何和IDE集成。現(xiàn)在我們就來進(jìn)行講解。

          首先要讓eclipse知道Maven 2的repository(倉(cāng)庫(kù))的路徑。因此要設(shè)置一個(gè)M2_REPO的變量為classpath。可以使用命令行的方式來設(shè)置:

          mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo

          還可以在eclipse中定義一個(gè)新的classpath變量通過在eclipse的菜單上選擇Window> Preferences. 選擇Java > Build Path > Classpath Variables page.

          接下來,生成eclipse的工程文件。使用命令行

          mvn eclipse:eclipse

          這樣通過在eclipse的菜單上選擇File >Import >Existing Projects into Workspace,就可以將工程導(dǎo)入eclipse中。
          通過以上2個(gè)步驟,我們就可以利用eclipse來進(jìn)行開發(fā)工作了。

          Eclipse插件mavenide

          同時(shí)在eclipse中我們可以下載一個(gè)maven的插件,用來輔助eclipse進(jìn)行maven工程的開發(fā)工作。這個(gè)插件名稱叫做mavenide。

          這個(gè)插件可使用以下更新站點(diǎn):http://m2eclipse.codehaus.org/

          并且非常方便的是,這里還提供了一個(gè)flash的演示來介紹如何安裝此插件,這個(gè)flash演示的觀看地址在:

          http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html

          要正常使用此插件請(qǐng)注意以下問題:

          • eclipse使用3.1或以上版本。
          • Mavenide的插件為0.0.5不要安裝錯(cuò)誤了。

          通過筆者在安裝好此插件的一些使用后,看到了此插件的以下一些特性。

          • 可以方便的添加依賴。
          • 在編輯完pom.xml文檔后,會(huì)自動(dòng)檢查此文檔的格式是否正確。
          • 可以將mvn的一些命令通過擴(kuò)展工具的方式在eclipse中輕松執(zhí)行。

          心得體會(huì)

          揚(yáng)長(zhǎng)避短使用Maven 2

          轉(zhuǎn)載自 http://www.javaeye.com/topic/162217

          架設(shè)私服

          比如Spring 2.5.1,可能剛release,repo1.maven.org/maven2/不一定有。你可以install到你的私服去。

          結(jié)合Ant

          很多maven不靈活的地方,可以用ant來解決

          定義meta-inf的信息

          開發(fā)OSGI的Bundle,就必須定義meta-inf信息。也可以定義自己的格式。

          不要使用maven2相關(guān)的ide插件

          多使用命令行。比如,先 mvn eclipse,然后導(dǎo)入到eclipse工程。有更新,執(zhí)行 mvn eclipse,再刷新工程就可以。
          我非常反對(duì)過多的依賴IDE。單元測(cè)試比較難做,無(wú)法做到持續(xù)集成!

          題外話:我個(gè)人強(qiáng)烈傾向于調(diào)式用mvn jetty:run,數(shù)據(jù)庫(kù)用hsqldb,便于使用dbunit。畢竟,現(xiàn)在可以用spring,jpa/hibernate做到數(shù)據(jù)庫(kù)無(wú)關(guān)性和應(yīng)用服務(wù)器無(wú)關(guān)性。

          依賴關(guān)系要設(shè)計(jì)好

          即jar和jar之間的關(guān)系,package和package之間的關(guān)系。開發(fā)前,設(shè)計(jì)的時(shí)候就要規(guī)劃好,不能什么都靠工具。工具不是萬(wàn)能的。
          尤其是開發(fā)OSGI bundle的時(shí)候,依賴關(guān)系一定要先設(shè)計(jì)好,一定要保證單向依賴性!

          實(shí)際上,我使用maven,中間也遇到了一些問題,總的說來,幫助還是非常大。尤其是,新來的開發(fā)人員搭建開發(fā)、測(cè)試環(huán)境、持續(xù)集成的時(shí)候,效果非常明顯!
          我也承認(rèn)maven2是好的思路,但是實(shí)現(xiàn)得不好。最重要的是,在新的工具出現(xiàn)前,我們只能選擇它。不過,可以結(jié)合IVY,ant,盡可能的揚(yáng)長(zhǎng)避短。

          Maven中的中文編碼問題

          在Windows下,默認(rèn)編碼是GBK,所以需要在pom中增加屬性:

          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <maven.compiler.encoding>UTF-8</maven.compiler.encoding>

          第一個(gè)在filter拷貝文件時(shí)用,第二個(gè)在編譯時(shí)用。第二個(gè)屬性是在 http://maven.apache.org/plugins/maven-compiler-plugin/ 翻到的

          Maven2主要配置文件

          pom.xml和settings.xml。
          POM是Maven的核心對(duì)象模型,對(duì)于項(xiàng)目,一般只需要pom.xml就行了。

          settings.xml配置在Maven2中存在兩種級(jí)別:
          用戶級(jí),針對(duì)操作系統(tǒng)登錄用戶而言。一般在$home/.m2/,對(duì)于windows用戶,就是目錄:C:\Documents and Settings\用戶名\.m2\settings.xml。
          全局級(jí):一般在%M2_HOME%/conf/settings.xml,M2_HOME是Maven2的根目錄環(huán)境變量名。

          maven2具體應(yīng)用

          1.下載maven2
          http://maven.apache.org/download.html

          2.設(shè)置二環(huán)境變量:解壓,如解壓在D:\mvntest,然后設(shè)置系統(tǒng)環(huán)境變量M2_HOME=D:\apache-maven-2.0.8 ,path變量里添加D:\apache-maven-2.0.8\bin,方便Maven在任何目錄下運(yùn)行。

          3.mvn -h可以查看幫助
          如執(zhí)行mvn --version可以查看版本信息
          mvn --version

          可以顯示類似這樣的信息:
          Maven version: 2.0.8
          Java version: 1.6.0
          OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"

          4.創(chuàng)建一個(gè)新項(xiàng)目:
          Maven2的運(yùn)行命令是mvn,常用命令為:

          創(chuàng)建Maven項(xiàng)目:mvn archetype:create
          編譯源代碼:mvn compile
          編譯測(cè)試代碼:mvn test-compile
          運(yùn)行測(cè)試:mvn test
          產(chǎn)生site:mvn site
          打包:mvn package
          在本地Repository中安裝jar:mvn install
          清除產(chǎn)生的項(xiàng)目:mvn clean
          清除產(chǎn)生的項(xiàng)目:mvn clean
          例如:創(chuàng)建一個(gè)新項(xiàng)目:
          mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app

          Maven指南

          http://www.sonatype.com/books/maven-book/reference_zh/public-book.html

          另一個(gè)Maven2簡(jiǎn)明教程

          安裝和配置
          把maven-2.0.4-bin.zip解壓到D:maven-2.0.4。
          下面就是配置環(huán)境變量了,這和1.0的版本是一樣的。(1)MAVEN_HOME:D:maven-2.0.4 (2)在Path 中加入%MAVEN_HOME%bin

          這樣配置就OK了。然后,我建立了如下目錄:E:appmavenApp,當(dāng)然這些可以隨便建立,呵呵。

          下面說一些Maven1.x和Maven2.x的不同(一些摘自一些網(wǎng)友文章)
          ------------------------------------
          Maven2 把配置文件壓縮成了pom.xml和settings.xml 兩個(gè)文件,簡(jiǎn)潔了不少。POM是Maven的核心對(duì)象模型,在Maven2中POM已由project.xml轉(zhuǎn)移到pom.xml中使用,版本也由3升 級(jí)為4。對(duì)于項(xiàng)目,一般只需要pom.xml就行了。在Maven2中不需要也不提倡使用maven.xml

          生命周期的引入
          在Maven2中有了明確的生命周期概念,而且都提供與之對(duì)應(yīng)的命令,使得項(xiàng)目構(gòu)建更加清晰明了。主要的生命周期階段:

          validate,驗(yàn)證工程是否正確,所有需要的資源是否可用。
          compile,編譯項(xiàng)目的源代碼。
          test-compile,編譯項(xiàng)目測(cè)試代碼。
          test,使用已編譯的測(cè)試代碼,測(cè)試已編譯的源代碼。
          package,已發(fā)布的格式,如jar,將已編譯的源代碼打包。
          integration-test,在集成測(cè)試可以運(yùn)行的環(huán)境中處理和發(fā)布包。
          verify,運(yùn)行任何檢查,驗(yàn)證包是否有效且達(dá)到質(zhì)量標(biāo)準(zhǔn)。
          install,把包安裝在本地的repository中,可以被其他工程作為依賴來使用
          deploy,在整合或者發(fā)布環(huán)境下執(zhí)行,將最終版本的包拷貝到遠(yuǎn)程的repository,使得其他的開發(fā)者或者工程可以共享。
          generate-sources,產(chǎn)生應(yīng)用需要的任何額外的源代碼,如xdoclet。

          新增Dependency Scope
          在POM 4中,<dependency>中還引入了<scope>,它主要管理依賴的部署。目前<scope>可以使用5個(gè)值:

          compile,缺省值,適用于所有階段,會(huì)隨著項(xiàng)目一起發(fā)布。
          provided,類似compile,期望JDK、容器或使用者會(huì)提供這個(gè)依賴。如servlet.jar。
          runtime,只在運(yùn)行時(shí)使用,如JDBC驅(qū)動(dòng),適用運(yùn)行和測(cè)試階段。
          test,只在測(cè)試時(shí)使用,用于編譯和運(yùn)行測(cè)試代碼。不會(huì)隨項(xiàng)目發(fā)布。
          system,類似provided,需要顯式提供包含依賴的jar,Maven不會(huì)在Repository中查找它。

          配置

          下面說些基本設(shè)置,打開D:/maven-2.0.4/conf/settings.xml

          1. 改變<localRepository>E:/app/m2/repository</localRepository> 目的:改變本地的數(shù)據(jù)倉(cāng)庫(kù)目錄(存放從遠(yuǎn)程下載的jar包),如果不改變也可以,如不改變,缺省目錄為:C:Documents and Settings主機(jī)名.m2repository

          2. 配置代理,主要目的是為了能從遠(yuǎn)程下載jar包,根據(jù)實(shí)際的網(wǎng)路情況進(jìn)行配置吧。因?yàn)槲椰F(xiàn)在單位是有代理服務(wù)器的,如果不配置,就不能從遠(yuǎn)程下載jar包了。我的配置如下(注意:如果你的網(wǎng)絡(luò)沒有代理服務(wù)器,就不用配置這個(gè)步驟)

          <proxy>
          <id>optional</id>
          <active>true</active>
          <protocol>http</protocol>
          <host>192.168.17.100</host>
          <port>8889</port>
          <nonProxyHosts>192.168.*.*</nonProxyHosts>
          </proxy>

          常用goal

          下面就是一些goal命令了,這里和Maven1有不少不同,常用的命令有:

          1. 創(chuàng)建Maven的普通java項(xiàng)目:mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=pjoName
          2. 創(chuàng) 建Maven的Web項(xiàng)目:mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
          3. 編譯源代碼:mvn compile (或者:mvn compiler:compile)
          4. 編譯測(cè)試代碼:mvn test-compile
          5. 運(yùn)行測(cè)試:mvn test
          6. 產(chǎn)生site:mvn site
          7. 打包:mvn package
          8. 在本地Repository中安裝jar:mvn install
          9. 清除產(chǎn)生的項(xiàng)目:mvn clean
          10. 生成eclipse項(xiàng)目:mvn eclipse:eclipse
          11. 生成idea項(xiàng)目:mvn idea:idea
          12. 組合使用goal命令,如只打包不測(cè)試:mvn -Dtest package
          13. 編譯測(cè)試的內(nèi)容:mvn test-compile
          14. 只打jar包: mvn jar:jar
          15. 只測(cè)試而不編譯,也不測(cè)試編譯:mvn test -skipping compile -skipping test-compile (這里要特別注意 -skipping 的靈活運(yùn)用,當(dāng)然也可以用于其他組合命令)
          16. 清除eclipse的一些系統(tǒng)設(shè)置:mvn eclipse:clean

          配置存儲(chǔ)庫(kù)

          要 求項(xiàng)目的每個(gè)開發(fā)者必須在conf目錄中配置存儲(chǔ)庫(kù)是不方便的,所以Maven可以同時(shí)查看多個(gè)存儲(chǔ)庫(kù)并且將它們?nèi)颗渲迷趐om.xml文件中。讓我們 看看一個(gè)例子,它展示了如何在應(yīng)用程序用使用多個(gè)存儲(chǔ)庫(kù)。在以下從pom.xml文件摘錄的片斷中,我們?cè)O(shè)置了兩個(gè)存儲(chǔ)庫(kù)來讓Maven尋找依賴項(xiàng)。 Ibiblio一直是默認(rèn)的存儲(chǔ)庫(kù),我們又添加了Planet Mirror作為后援存儲(chǔ)庫(kù)。我們也可以讓團(tuán)隊(duì)使用的本地web服務(wù)器作為第二個(gè)存儲(chǔ)庫(kù)。

          <repositories>
          <repository>
          <id>Ibiblio</id>
          <name>Ibiblio</name>
          <url>http://www.ibiblio.org/maven/</url>
          </repository>
          <repository>
          <id>PlanetMirror</id>
          <name>Planet Mirror</name>
          <url>http://public.planetmirror.com/pub/maven/</url>
          </repository>
          </repositories>

          一些小問題

          M2_REPO的問題

          當(dāng) 建立一個(gè)工程后,執(zhí)行 mvn eclipse:eclipse ,建立一個(gè)maven的工程,用eclipse打開后,發(fā)現(xiàn)報(bào)如下錯(cuò)誤:Unbound classpath variable: 'M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar' in project my-webapp ,這是因?yàn)樵贓clipse 沒有配置 M2_REPO 變量,配置步驟:window >> preferences >> Java >> Build Path >> Classpath Variables
          新建一個(gè) M2_REPO 的變量,變量值指向你系統(tǒng)的Maven2的數(shù)據(jù)倉(cāng)庫(kù)位置。

          POM.XML 繼承的寫法

          <project xmlns="http://maven.apache.org/POM/4.0.0" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>org.apache.hivemind</groupId>
          <artifactId>hivemind-examples</artifactId>
          <packaging>jar</packaging>
          <version>2.0-alpha-1</version>
          <parent>
          <groupId>org.apache.hivemind</groupId>
          <artifactId>hivemind-project</artifactId>
          <version>2.0-alpha-1</version>
          <relativePath>../pom.xml</relativePath>
          </parent>
          <name>HiveMind Examples</name>
          <inceptionYear>2003</inceptionYear>
          <dependencies>
          <dependency>
          <groupId>org.apache.hivemind</groupId>
          <artifactId>hivemind-framework</artifactId>
          <version>2.0-alpha-1</version>
          </dependency>

          如何安裝Jar(或war)依賴到本地的數(shù)據(jù)倉(cāng)庫(kù)中?

          下面具一個(gè)如何把dwr.jar包上傳到本地?cái)?shù)據(jù)倉(cāng)庫(kù)的例子,一看例子,大家就明了了。
          1. 下載dwr.jar包到本地,我把它放到了 C:/ (C盤根目錄)
          2. 進(jìn)入“命令行提示符”,進(jìn)入到C:/,然后執(zhí)行

          mvn install:install-file -Dfile=dwr.jar -DgroupId=dwr.mocha -DartifactId=dwrDart -Dversion=1.0 -Dpackaging=jar

          這樣就把dwr傳到了本地倉(cāng)庫(kù)中(我的本地倉(cāng)庫(kù)地址為:E:appm2repository),上傳到倉(cāng)庫(kù)中的jar包名為dwrDart- 1.0.jar,目錄結(jié)構(gòu)為dwr/mocha/dwrDart/1.0/dwrDart-1.0.jar

          maven2命令大全

          validate,驗(yàn)證工程是否正確,所有需要的資源是否可用。
          compile,編譯項(xiàng)目的源代碼。
          test-compile,編譯項(xiàng)目測(cè)試代碼。
          test,使用已編譯的測(cè)試代碼,測(cè)試已編譯的源代碼。
          package,已發(fā)布的格式,如jar,將已編譯的源代碼打包。
          integration-test,在集成測(cè)試可以運(yùn)行的環(huán)境中處理和發(fā)布包。
          verify,運(yùn)行任何檢查,驗(yàn)證包是否有效且達(dá)到質(zhì)量標(biāo)準(zhǔn)。
          install,把包安裝在本地的repository中,可以被其他工程作為依賴來使用
          deploy,在整合或者發(fā)布環(huán)境下執(zhí)行,將最終版本的包拷貝到遠(yuǎn)程的repository,使得其他的開發(fā)者或者工程可以共享。
          generate-sources,產(chǎn)生應(yīng)用需要的任何額外的源代碼,如xdoclet。

          結(jié)合Maven2進(jìn)行J2EE項(xiàng)目構(gòu)建

          http://www.javaeye.com/topic/230265

          Maven2 的新特性

          http://www.ibm.com/developerworks/cn/opensource/os-maven2/index.html

          maven 配置篇 之 settings.xml

          http://zyl.javaeye.com/blog/41612

          maven 配置篇 之pom.xml

          配置1: http://zyl.javaeye.com/blog/41754
          配置2: http://zyl.javaeye.com/blog/41761

          新建文件

          可選的描述
          添加其它文件 (最大尺寸: 5 MB)

          取消
          posted on 2009-07-02 09:39 xiaoxinchen 閱讀(535) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南充市| 赞皇县| 凌云县| 黑龙江省| 民乐县| 抚顺县| 肥西县| 潼关县| 英德市| 宁蒗| 光山县| 山阳县| 富蕴县| 绥棱县| 长宁区| 江口县| 盈江县| 新营市| 马尔康县| 翁牛特旗| 长海县| 郎溪县| 东台市| 香河县| 五寨县| 石柱| 巴南区| 隆安县| 遂昌县| 体育| 广州市| 四子王旗| 聂拉木县| 漯河市| 阿克| 淳安县| 阳朔县| 临城县| 聊城市| 绥阳县| 和田市|