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

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

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

開(kāi)通VIP
Maven中文手冊
Maven最早始于Jarkarta Turbine項目,目的是為了簡(jiǎn)化構建過(guò)程。這個(gè)項目下面有 幾個(gè)子項目,每個(gè)子項目都有自己的Ant文件,但是區別很小,而且生成的JAR 文件都要check inCVS中。我們希望有一種標準的方式來(lái)構建這些項目,一種可以 清晰描述項目的方式,一種易于發(fā)布項目信息的方式,一種在多個(gè)項目之間共享JARs 的方式。 

這個(gè)結果就是產(chǎn)生了一個(gè)可以用于構建、管理任何基于java的項目。我們希望我們創(chuàng )造 的這個(gè)工具可以讓Java開(kāi)發(fā)者的日常工作更加輕松,并有助于理解基于java的項目

項目對象模型
Maven
是基于項目對象模型(POM)的概念而創(chuàng )建的。在這個(gè)模型中,所有由Maven產(chǎn)生的 artifact都是清晰定義的項目模型的結果。構建,文檔,源碼度量,源碼交叉引用和其他 任何由Maven plug-in提供的東西都是由POM來(lái)控制的。 

POM 
處理機制
這篇文檔簡(jiǎn)單的描述了Maven執行過(guò)程中是如何處理POM的。這里有一些簡(jiǎn)單的POM例子 來(lái)展示繼承機制和插值機制。 

POM 
插值機制
POM(
通常以project.xml的名字出現)現在已經(jīng)被當作Jelly腳本來(lái)處理了。大部分時(shí) 候,用戶(hù)無(wú)須關(guān)心project.xml文件是不是真正的Jelly腳本,但是,如果需要的話(huà), 也可以使用內置值。我也不愿看到邏輯控制語(yǔ)句出現在project.xml中,但是由于 project.xml實(shí)際上已經(jīng)是一個(gè)隱含的jelly的腳本,所以它會(huì )有足夠的靈活性:-)。 下面是一個(gè)簡(jiǎn)單的例子。 

<?xml version="1.0" encoding="ISO-8859-1"?>
<project>

  <pomVersion>3</pomVersion>
  <groupId>maven</groupId>
  <artifactId>maven</artifactId>
  <name>Maven</name>
  <currentVersion>1.0-b5-dev</currentVersion>
  <organization>
    <name>Apache Software Foundation</name>
    <url> http://jakarta.apache.org/</url>
    <logo>/images/jakarta-logo-blue.gif</logo>
  </organization>
  <inceptionYear>2001</inceptionYear>
  <package>org.apache.${pom.artifactId}</package>
  <logo>/images/${pom.artifactId}.jpg</logo>

  <description>Maven is a project that was created in ${pom.inceptionYear}.</description>
  <shortDescription>${pom.name} is a Java Project Management Tool</shortDescription>

</project>
        POM 
繼承機制
現在有一種簡(jiǎn)單方式可以用于在POM中進(jìn)行繼承,下面是一個(gè)簡(jiǎn)單的例子: 

<?xml version="1.0" encoding="ISO-8859-1"?>
  <project>
    <extend>project.xml</extend>
    
    <groupId>super-extendo</groupId>
    <artifactId>super-extendo<artifactId>
    <name>Super Extendo</name>

    <build>
      <unitTest>
        <includes>
          <include>**/*Test*.java</include>
        </includes>
        <excludes>
          <exclude>**/TestAll.java</exclude>
          <exclude>**/*Abstract*.java</exclude>
        </excludes>
      </unitTest>
    </build>
  </project>
目前對POM父對象的解析還相對較弱,現在對一層以上的繼承還沒(méi)有做過(guò)任何測試。盡管如此, 單層繼承加上插值機制已經(jīng)能夠給帶來(lái)很多好處。這些機制的意圖在于簡(jiǎn)化構建的共用問(wèn)題。 

你可以這樣定義主模板: 

<project>
  <pomVersion>3</pomVersion>
  <groupId>commons</groupId>
  <artifactId>commons-master</artifactId>
  <name>Commons Master Maven POM</name>

  <organization>
    <name>Apache Software Foundation</name>
    <url> http://www.apache.org</url>
  </organization>

  <gumpRepositoryId>jakarta</gumpRepositoryId>

  <url> http://jakarta.apache.org/commons/${pom.artifactId}.html</url>
  <issueTrackingUrl> http://nagoya.apache.org/</issueTrackingUrl>
  <siteAddress>jakarta.apache.org</siteAddress>
  <siteDirectory>/www/jakarta.apache.org/commons/${pom.artifactId}/</siteDirectory>
  <distributionDirectory>
    /www/jakarta.apache.org/builds/jakarta-commons/${pom.artifactId}/
  </distributionDirectory>

  <repository>
    <connection>
      scm:cvs server:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/${pom.artifactId}
    </connection>
    <url> http://cvs.apache.org/viewcvs/jakarta-commons/${pom.artifactId}/</url>
  </repository>
  ...
</project>
 
POM對象可以這樣定義: 

<project>
  <groupId>commons-betwixt</groupId>
  <artifactId>commons-betwixt</artifactId>
  <name>Betwixt</name>
  ...
</project>
這樣你就可以在父POM對象中,將子POM對象的${pom.artifactId}替換進(jìn)去。有許多項目的 構建都以相似的方式進(jìn)行構建,這樣一來(lái),對于項目的公共部分,你就可以使用一個(gè)主模板, 然后在子POM對象project.xml中定義有區別的部分,而這部分內容通常很少。 

這種機制確實(shí)還可以簡(jiǎn)化那些需要產(chǎn)生多個(gè)JAR包的項目。由于project.xml和標準Ant構建 不會(huì )相互干擾,我計劃在公共部分測試繼承機制。 

如果你對使用這種機制,DVSL報告會(huì )變成什么樣感到疑惑,我要說(shuō),你很上路。我已經(jīng)修改 DVSL報告來(lái)適應POM本身,這就是說(shuō)DVSL轉換是基于java對象的。在使用繼承和插值機制的 時(shí)候,為了正確的產(chǎn)生DVSL報告,這是很有必要的。象上面列出的子模板是無(wú)法工作的,我們 需要全面的解析POM。我能說(shuō)的是,它可以工作了!我所使用的處理方式可能不是最有效率的 方式,但仍有提升的空間。因為POM只會(huì )被處理一次(不管怎么說(shuō),這就它的原理,我可能漏了 某些東西),然后到處使用,至少這就是我以前試圖做的事情,所以我們很有可能會(huì )取得平衡。 

如果你不使用繼承和插值,那么一切照常工作。maven站點(diǎn)本身一切ok,有幾個(gè)剛部署的站點(diǎn) 已經(jīng)使用了我昨晚提交的東西了。 

使用插件
Maven
是一個(gè)很緊湊的內核,圍繞著(zhù)它的是許許多多的插件。Maven所有的功能都是由插件來(lái)提供 的。 

maven.xml
文件
項目中的maven.xml文件是Maven在執行過(guò)程中要使用的定制文件。 

在這個(gè)文件中,你可以加入Maven構建中需要的額外處理?;蛘咴?/span>Maven目標前后附加自己 的代碼,如jar  test。 

Maven
使用Jelly 腳本語(yǔ)言任何合法的jelly標簽都可以在maven.xml中使用。 

Maven
所采用的goal功能是由werkz標簽庫提供。更多的信息請看 wiki頁(yè)面

簡(jiǎn)單的maven.xml例子
注意由于Maven并未缺省的定義‘compile‘目標,下面這個(gè)例子沒(méi)法運行。 

這是一個(gè)簡(jiǎn)單的maven.xml例子 

<project
  default="nightly-build"
  xmlns:j="jelly:core"
  xmlns:u="jelly:util">

  <goal name="nightly-build">
    <!-- Any ant task, or jelly tags can go here thanks to jeez -->
    <j:set var="goals" value="compile,test" />
    <mkdir dir="${maven.build.dir}" />
    <u:tokenize var="goals" delim=",">${goals}</u:tokenize>
    <j:forEach items="${goals}" var="goal" indexVar="goalNumber">
      Now attaining goal number ${goalNumber}, which is ${goal}
      <attainGoal name="${goal}" />
    </j:forEach>
  </goal>

</project>
你可能會(huì )注意到這里一些有意思的東西,下面我們將逐一解釋。 

project
節點(diǎn)
project
節點(diǎn), <project>, 是任何 maven.xml 文件的根節點(diǎn)。 

項目節點(diǎn)有一個(gè)缺省的屬性:default="nightly-build",如果用戶(hù)只是簡(jiǎn)單鍵入 沒(méi)有參數的maven命令,Maven就會(huì )用nightly-build 目標作為缺省目標。 

接下來(lái)是幾個(gè)名字空間的聲明,如: 

xmlns:j="jelly:core" 
所有以j:作為前綴的節點(diǎn),Jelly都會(huì )把它視為在core標識下 預定義的標簽庫。 

xmlns:u="jelly:util" 
所有以u:作為前綴的節點(diǎn),Jelly都會(huì )把它視為在標識下 預定義的標簽庫。 


所有在maven.xml文件使用的Jelly標簽庫,都必須在project節點(diǎn)中定義,并且 分配一個(gè)名稱(chēng)空間前綴。 

Maven
已經(jīng)預先包含了jeez標簽庫作為空前綴。這個(gè)標簽庫在一個(gè)名稱(chēng)空間內包含了 ant  werkz 標簽庫。這樣,任何werkzant標簽都無(wú)須名稱(chēng)空間 即可使用,同時(shí)也簡(jiǎn)化了ant的遷移過(guò)程。 

目標
goal
是一個(gè) werkz 標簽,類(lèi)似于Anttarget;它是包含了一系列可執行標簽的容器。 

由于jeez 標簽庫已經(jīng)由maven預先注冊了,一個(gè)目標(goal)可以包含任何合法的 Ant 標簽。 

為了執行在maven.xml中定義的目標,你只需要在命令行中為Maven指定目標名即可。要執行例子中定 義的nightly-build你只需執行命令

maven nightly-build
Maven
插件定義的目標需要在目標前加上插件名,這樣一來(lái),就不會(huì )和你自己的goal沖突,如 jar:jar就是 jar 插件定義的目標,用于創(chuàng )建項目的jar包。 

Jelly
編程
在每個(gè)目標里,由Jelly標簽提供功能,讓我們來(lái)看看例子里的這些代碼。 

set
<j:set var="goals" value="compile,test" />
這行就是一個(gè)jellycore標簽set,它使用了project節點(diǎn)中定義的前綴 j: 

set
標簽設置了一個(gè)由var屬性定義的Jelly變量,值由 value 指定。和Antproerties不一樣,Jelly變量在被賦值后仍可以改變。 

mkdir
<mkdir dir="${maven.build.dir}" />
等同于Ant任務(wù) mkdir, 用于創(chuàng )建目錄,目錄名由變量 ${maven.build.dir}指定。 

tokenize
<u:tokenize var="goals" delim=",">${goals}</u:tokenize>
這行執行的是Jelly tokenize 標簽。這是Jelly util 標簽庫中標簽, 這個(gè)標簽庫已經(jīng)在項目節點(diǎn)中預先定義:u: 

tokenize
標簽在將節點(diǎn)中的內容分離成一個(gè)list,用于后續的處理。 

var 
屬性就是將被于新list的變量。 
delim 
屬性是用于分割字符串中的分隔符。 
在這個(gè)例子中,tokenize 標簽中節點(diǎn)值是一個(gè)變量:goals, 在前幾行中,這是一個(gè)由逗號分隔、compile  test 的字符串。 

forEach
<j:forEach items="${goals}" var="goal" indexVar="goalNumber">
  Now attaining goal number ${goalNumber}, which is ${goal}
  <attainGoal name="${goal}" />
</j:forEach>forEach
標簽提供簡(jiǎn)單循環(huán)功能,節點(diǎn)值就是循環(huán)體。 

items 
屬性是一個(gè)表達式,是在循環(huán)過(guò)程中需要遍歷的值集合。 
集合中的值被逐個(gè)取出,存放在var 屬性指定的變量中。你可以在 forEach 循環(huán)體訪(fǎng)問(wèn)這個(gè)變量。 
indexVar 
屬性指定了一個(gè)計數器(起始基數為0)變量,用于在處理 過(guò)程中計數。 

forEach 
標簽的節點(diǎn)值輸出了一些在處理過(guò)程中的關(guān)于目標的文本,并使用 attainGoal werkz 標簽來(lái)獲得(執行?)這些目標。 

Maven 
配置
屬性的處理機制
Maven
按下面的順序依次讀入properties文件: 


${project.home}/project.properties 
${project.home}/build.properties 
${user.home}/build.properties 

讀入的屬性遵循最后的定義有效原則。也就是說(shuō),Maven依次讀入properties文件,以新的定義 覆蓋舊的定義。${user.home}/build.propertiesMaven最后處理的文件。我們把 這些文件稱(chēng)為Maven處理的標準屬性文件集。 

另外,上述properties文件處理完畢后,Maven才會(huì )開(kāi)始處理系統屬性。所以,如果在命令行中使用 -Dproperty=value這樣的形式來(lái)指定的屬性,它會(huì )覆蓋先前定義的同名屬性。 

插件的屬性
上述屬性文件處理完后,Maven才會(huì )開(kāi)始調用插件,但是 PluginManager 會(huì )禁止插件 覆蓋已經(jīng)設置的屬性值。這和Maven一般的屬性處理方式是相反的,這是因為插件只能在Maven內部的 其他部分初始化完畢后才能處理,但是我們又希望以這樣順序去處理屬性: 


處理Plug-in 缺省屬性 
處理${project.home}/project.properties 
處理${project.home}/build.properties 
處理${user.home}/build.properties 

這樣一來(lái),即使插件處于屬性處理鏈的后端,也能覆蓋插件的任何缺省屬性。例如,Checkstyle插件 就定義了如下缺省屬性: 

maven.checkstyle.format = sun
你可能已經(jīng)猜出來(lái)了,Checksytle插件把Sun的編碼規范作為缺省的格式。但是我們仍然可以在標準屬性 文件集的任何一個(gè)文件中覆蓋這個(gè)屬性。所以如果在${project.home}/project.properties 文件定義了如下屬性值: 

maven.checkstyle.format = turbine
Checkstyle
就會(huì )使用Turbine的編碼規范。 

行為屬性
下面的這些屬性可以改變Maven行為方式。 

屬性 描述 缺省值 
maven.build.dest 
目錄名,存放編譯生成的類(lèi)  ${maven.build.dir}/classes 
maven.build.dir 
存放構建結果的目錄,如類(lèi)文件,文檔,單元測試報告等等。 
注意: ${user.home}/build.properties文件中改變maven.build.dir 的缺省值或許會(huì )得到一個(gè) 較為個(gè)性化的目錄布局。但是,這會(huì )干擾Maven由從源碼開(kāi)始的編譯工作,因為它假設jar 會(huì )被創(chuàng )建到${basedir}/target/目錄中。 
 ${basedir}/target 
maven.build.src 
源碼目錄  ${maven.build.dir}/src 
maven.conf.dir 
配置文件目錄  ${basedir}/conf 
maven.docs.dest html
格式報告的輸出目錄  ${maven.build.dir}/docs 
maven.docs.omitXmlDeclaration 
產(chǎn)生的文檔所應包含的xml聲明頭,如: 
<?xml version="1.0"?> false 
maven.docs.outputencoding 
生成文檔的缺省編碼  ISO-8859-1 
maven.docs.src 
用戶(hù)提供的文檔目錄  ${basedir}/xdocs 
maven.gen.docs xdocs
文檔轉換成html后的輸出目錄  ${maven.build.dir}/generated-xdocs 
maven.home.local maven
用于寫(xiě)入用戶(hù)信息的本機目錄,如解開(kāi)插件包、緩沖數據。  ${user.home}/.maven 
maven.mode.online 
是否連接internet  true 
maven.plugin.dir 
插件的存放目錄  ${maven.home}/plugins 
maven.plugin.unpacked.dir 
用于展開(kāi)安裝插件的目錄  ${maven.home.local}/plugins 
maven.repo.central 
在進(jìn)行dist:deploy處理的時(shí)候,發(fā)行包所要部署的目標機器  login.ibiblio.org 
maven.repo.central.directory 
在進(jìn)行dist:deploy處理的時(shí)候,發(fā)行包所要部署的目標目錄。  /public/html/maven 
maven.repo.local 
本機repository,用于存儲下載的jar包。  ${maven.home.local}/repository 
maven.repo.remote 
遠程repository,如果本機repository沒(méi)有的jar包,maven會(huì )從這里下載。   http://www.ibiblio.org/maven  
maven.repo.remote.enabled 
是否使用遠程repository。  true 
maven.scp.executable 
用于安全拷貝的可執行程序  scp 
maven.src.dir 
基礎源代碼目錄  ${basedir}/src 
maven.ssh.executable 
遠程命令可執行程序  scp 


使用代理
如果你只能通過(guò)代理訪(fǎng)問(wèn),不要緊,Maven為你提供了下列屬性: 

代理屬性 描述 
maven.proxy.host 
代理的IP地址  
maven.proxy.port 
代理端口  
maven.proxy.username 
如果代理需要認證的話(huà),在這里填寫(xiě)用戶(hù)名。 User name if your proxy requires authentication.  
maven.proxy.password 
如果代理需要認證的話(huà),在這里填寫(xiě)密碼。  

如果你實(shí)在需要代理,最好在${user.home}/build.properties文件中指定。 

## ----------------------------------------------------------
## ${user.home}/build.properties
## ----------------------------------------------------------
.
.
maven.proxy.host = my.proxyserver.com
maven.proxy.port = 8080
maven.proxy.username = username
maven.proxy.password = password
.
.
使用多個(gè)遠程Repositories
你可以在任何Maven可以處理的屬性文件中指定使用多個(gè)遠程Repositories,如: 

maven.repo.remote =  http://www.ibiblio.org/maven /, http://www.mycompany.com/maven/
項目設置
開(kāi)始一個(gè)新項目
如果你是第一次使用Maven,或者開(kāi)始一個(gè)新的項目,你可以使用GenApp來(lái)自動(dòng)創(chuàng )建Maven項目樹(shù)。 

maven -Dpackage=com.mycompany.app genapp
執行該命令后,屏幕顯示如下: 

 __  __
|  \/  |__ Jakarta _ ___
| |\/| / _ \ V / -_) ‘ \  ~ intelligent projects ~
|_|  |_\__,_|\_/\___|_||_|   v. 1.0-beta-9


    [mkdir] Created dir: <target-directory>/genapp/src/java/com/mycompany/app
    [copy] Copying 1 file to <target-directory>/genapp/src/java/com/mycompany/app
    [mkdir] Created dir: <target-directory>/genapp/src/test/com/mycompany/app
    [copy] Copying 3 files to <target-directory>/genapp/src/test/com/mycompany/app
    [copy] Copying 2 files to <target-directory>/genapp
    [copy] Copying 1 file to <target-directory>/genapp/src/conf
    BUILD SUCCESSFUL
    Total time:  3 seconds
執行完畢,即生成下面的完整項目目錄樹(shù): 

.
|-- project.properties
|-- project.xml
`-- src
    |-- conf
    |   `-- app.properties
    |-- java
    |   `-- com
    |       `-- mycompany
    |           `-- app
    |               `-- App.java
    `-- test
        `-- com
            `-- mycompany
                `-- app
                    |-- AbstractTestCase.java
                    |-- AppTest.java
                    `-- NaughtyTest.java

構建
Maven
采用了集中管理庫的理念。所有用于構建的jar包都是從集中管理的中心庫上取出。目前, 我們的中心庫放在這兒 Ibiblio. 在一個(gè)典型的Maven項目中,構建所需的 jar包會(huì )從中心庫下載。Maven只會(huì )取回依賴(lài)鏈條上缺失的包。如果你使用Maven來(lái)構建幾個(gè)項目, 這些項目可能會(huì )共享一些依賴(lài)包:Maven可以在任意個(gè)項目中共享同一個(gè)包,而無(wú)須在同一系統 中保持一個(gè)jar包的多個(gè)拷貝。 

構建生命周期

CVS中存放jar文件
我們不推薦你在CVS中存放jar包。Maven提倡在本機repository中存放用于構建共享的jar包或 和其他項目包。許多項目都依賴(lài)于諸如XML解析器、標準例程,這在Ant構建中,經(jīng)常會(huì )被復制 多份。在Maven中,這些標準例程就存放在本地repository中,供任何項目構建使用。 

重載已聲明的依賴(lài)包
你可能會(huì )發(fā)現,在某些情況下允許重載POM中已經(jīng)聲明的依賴(lài)包會(huì )很方便,甚至很有必要。 你可能會(huì )希望使用文件系統中的某個(gè)JAR包,或者你希望簡(jiǎn)單重新指定某個(gè)包的版本。對于 這樣的情況,Maven提供了一種簡(jiǎn)單的方式,允許你選擇構建所需的jar包。我們嚴重建議  你設置本機repository,但是在簡(jiǎn)單至上,或在由ant構建遷移的情況下,JAR包重載特性 會(huì )顯得非常方便。 

為了使用JAR包重載特性,你必須將maven.jar.override 屬性設置為 on。 只要設置了這個(gè)屬性,就可以在任何maven處理的屬性文件中重載JAR包。 

關(guān)于JAR重載的指令有兩種。第一種允許你指定某個(gè)特定的包的路徑,作為JAR包;的二種 允許你指定某個(gè)特定的JAR包(這個(gè)jar包必須已經(jīng)存在于本機repository)。下面是這兩 種方式: 


maven.jar.artifactId = [path]

maven.jar.artifactId = [version]

下面是一個(gè)使用JAR重載指令的屬性文件例子: 

# ------------------------------------------------------------------------
# M A V E N  J A R  O V E R R I D E
# ------------------------------------------------------------------------
maven.jar.override = on

# ------------------------------------------------------------------------
# Jars set explicity by path.
# ------------------------------------------------------------------------
maven.jar.a = ${basedir}/lib/a.jar
maven.jar.b = ${basedir}/lib/b.jar

# ------------------------------------------------------------------------
# Jars set explicity by version.
# ------------------------------------------------------------------------
maven.jar.classworlds = 1.0-beta-1
使用SNAPSHOT依賴(lài)
Maven中,SNAPSHOP是某個(gè)特定項目的最新構建的jar包。如果你的項目依賴(lài)于另一個(gè)頻繁變更 的項目,你可以在你的POM中聲明SNAPSHOP依賴(lài),以保持與那個(gè)項目的同步。例如,在你的POM 這樣寫(xiě),你可以與Jelly保持 同步更新。 

<project>
  ...
  <dependencies>

   <dependency>
     <groupId>commons-jelly</groupId>
     <artifactId>commons-jelly</groupId>
     <version>SNAPSHOT</version>
   </dependency>

  </dependencies>
 ...
</project>
上述語(yǔ)句的含義是:總是使用Maven repository中最新的Jelly構建包。SNAPSHOT依賴(lài) 總會(huì )導致依賴(lài)失敗。在這種情況下,Maven就會(huì )去Maven repository取得一個(gè)SNAPSHOT 依賴(lài)包的拷貝。如果你正在離線(xiàn)工作,Maven就會(huì )發(fā)出警告:“SNAPSHO依賴(lài)包可能已經(jīng) 過(guò)期。 

多項目構建和Reactor
Maven中,Reactor是一個(gè)用于控制多項目構建的工具。ReactorWerkz,并根據每個(gè)項目 各自定義的依賴(lài)關(guān)系來(lái)安排構建順序。Reactor的意圖在于:鼓勵創(chuàng )建/重構具有更小、更松散、 更有一致性單元的項目。r源于面向組件編程,在向組件編程中,整個(gè)系統由許多松散的個(gè)體 構成,這些個(gè)體需要聚合起來(lái)作為一個(gè)整體進(jìn)行部署。 

Reactor
可以為某個(gè)項目集執行一個(gè)任意編排的目標列表。所以,如果使用Reactor的話(huà),它 可以用來(lái)做項目站點(diǎn)生成,任意jar包生成這樣的事情。 

目前 db.apache.org 站點(diǎn)就是收集了其子項目的 豐富信息、并與一系列的Velocity 模板合成的。這一過(guò)程是由 Jelly Velocity 標簽庫來(lái)完成的。 這里是其中的機制,有興趣可以看看。 

Plexus(
一個(gè)基于Avalon的容器)組件的manifest是遍歷所有Plexus組件、并聚合而成的。這里 使用的還是Velocity模板和Jelly Volocity標簽庫。 這里是其中的機制,有興趣可以看看。 

這里是一個(gè)使用Reactor標簽,遍歷一系列組件,最后產(chǎn)生項目站點(diǎn)的例子: 

  <goal
    name="project-site"
    description="Generate the site for the entire project">

    <!-- Generate the site for each of the components. -->

    <maven:reactor
      basedir="${basedir}/components"
      postProcessing="true"
      includes="*/project.xml"
      excludes="bad-component/*"
      goals="site"
      banner="Generating Site"
      ignoreFailures="true"/>

    <!--
     |
     | At this point because ‘postProcessing‘ was turned on we have all
     | the processed POMs available to us in the ${reactorProjects} variable.
     |
     -->

    <j:forEach var="reactorProject" items="${reactorProjects}">

      ... Do whatever you want with the harvested information ...

    </j:forEach>
  </goal>
  
如果你需要聚合N個(gè)項目的文檔,形成一個(gè)統一的視圖,你可以參考 db.apache.org站點(diǎn),它從所有的子項目中收集 信息,最終形成一個(gè)有導航條,郵件列表,開(kāi)發(fā)者列表和源碼repository統一的站點(diǎn)。這解決 了在收集子項目信息過(guò)程中的冗余、易于產(chǎn)生錯誤的問(wèn)題。db.apache.org的子項目只需關(guān)注 自身的信息,卻可以自動(dòng)的集成到高層的項目站點(diǎn)中。 

離線(xiàn)構建
如果你需要離線(xiàn)構建,你得在命令行中使用離線(xiàn)選項: 

maven -o jar:jar
        
這等同于: 

maven -Dmaven.mode.online=false jar:jar
        
或者你可以在屬性文件中設置 maven.mode.online 屬性為false。 

在聯(lián)機模式下,maven總是下載 SNAPSHOT 依賴(lài)包請參考 使用SNAPSHOT依賴(lài)。如果本機repository 上的當前版本比服務(wù)器上的還要新,你也許不想maven覆蓋你的當前版本。如果不想下載,你可以 設置屬性: 

maven.repo.remote.enabled=false
        
maven beta 9版本中,這個(gè)屬性并沒(méi)有起作用(新版本已經(jīng)解決了這個(gè)問(wèn)題)??梢赃@樣來(lái)清空 maven.repo.remote 屬性: 

maven.repo.remote.enabled=
        
在命令行或屬性文件中設置都一樣。 

在下面的情形中,你需要同時(shí)設置maven.repo.remote.enabled=false maven.mode.online=true:希望javadoc插件的"-link"選項起作用,而又不希望 下載任何(包括snapshot)包。 

命令行選項介紹
如果你用命令行來(lái)構建,這里提供了一個(gè)關(guān)于命令行選項的快速參考。 

Options:
 -D,--define arg   
定義一個(gè)系統屬性
 -E,--emacs        
輸出簡(jiǎn)潔的日志信息
 -X,--debug        
輸出debug信息
 -b,--nobanner     
禁止 logo banner
 -d,--dir arg      
設置指定的工作目錄
 -e,--exception    
輸出異常堆棧信息
 -f,--find arg     
通過(guò)搜尋項目文件來(lái)確定執行的項目文件及其工作目錄
 -g,--goals        
顯示可用的目標
 -h,--help         
顯示幫助信息
 -i,--info         
顯示系統信息
 -o,--offline      
離線(xiàn)構建
 -p,--pom arg      
指定項目文件
 -v,--version      
顯示版本號
測試
測試資源
通常情況下,你需要在測試類(lèi)路徑上為測試指定某些資源。你可以在POM中使用 

下面的例子說(shuō)明了如何遞歸的包含在${basedir}/src/test目錄中所有以.xml.properties為擴展名 的文件: 

<project>
  ...
  <build>
    ...
    <unitTest>
      ...
      <resources>
        <resource>
          <directory>${basedir}/src/test</directory>
          <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
          </includes>
        </resource>
      </resources>
    </unitTest>
  </build>
</project>
下面的例子說(shuō)明了如何遞歸的包含在${basedir}/src/test目錄中所有以.xml.properties為擴展名 的文件,但naughty.properties文件除外。請注意增加的project/build/unitTest/resources/excludes 節點(diǎn): 

  <project>
    ...
    <build>
      ...
      <unitTest>
        ...
        <resources>
          <resource>
            <directory>${basedir}/src/test</directory>
            <includes>
              <include>**/*.xml</include>
              <include>**/*.properties</include>
            </includes>
            <excludes>
              <exclude>naughty.properties</exclude>
            </excludes>
          </resource>
        </resources>
      </unitTest>
    </build>
  </project>
運行一個(gè)單獨的測試
下面的命令運行了一個(gè)單獨的測試: 

maven -Dtestcase=org.foo.bar.MyTest test:single-test
打包
JAR 
資源

<project>
  ...
  <build>
    <resources>
      <!-- A -->
      <resource>
        <directory>${basedir}/src/conf</directory>
        <includes>
          <include>*.xml</include>
          <include>*.properties</include>
        </includes>
      </resource>
      <!-- B -->
      <resource>
        <directory>${basedir}/src/messages</directory>
        <targetPath>org/apache/maven/messages</targetPath>
        <includes>
          <include>messages*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>
</project>
部署

固化SNAPSHOT依賴(lài)
在開(kāi)發(fā)時(shí)使用SNAPSHOT依賴(lài)包非常方便,但是在部署的時(shí)候,你需要把所有的SNAPSHOT依賴(lài)包 固定下來(lái),以便發(fā)布一個(gè)包含固定jar的版本。如果你發(fā)布了一個(gè)含SNAPSHOT依賴(lài)包的項目,而 這些SNAPSHOT在項目發(fā)布后發(fā)生了變更,你可能很快就會(huì )發(fā)現這個(gè)版本沒(méi)法兒工作。 

SNAPSHOT以時(shí)間戳為版本號部署到Maven上時(shí),Maven可以識別foo-SNAPSHOT.jar實(shí)際上相當 foo-20030101.010101.jar。當部署的時(shí)刻來(lái)臨,你可以用下面的命令,讓MavenSNAPSHOT 版本號變?yōu)闀r(shí)間戳版本號。 

maven convert-snapshots
Maven
會(huì )提供交互的方式讓你選擇哪個(gè)SNAPSHOPT依賴(lài)包應該固化下來(lái)。這一過(guò)程結束后,Maven 就會(huì )把剛才你的選擇寫(xiě)會(huì )你的POM。 

如果你希望Maven簡(jiǎn)單的、盡可能最好的固化SNAPSHOT依賴(lài)包,你可以用下面的命令: 

maven convert-snapshots-auto
拷貝依賴(lài)JAR
maven.xml這樣寫(xiě)下面的語(yǔ)句是最簡(jiǎn)單的拷貝依賴(lài)包的方法。 

<project
  xmlns:deploy="deploy">

  <goal name="deploy-my-project">
    ...
    <deploy:copy-deps todir="/path"/>
    ...
  </goal>

</project>
deploy:copy-deps標簽你就可以簡(jiǎn)單的把項目所有的依賴(lài)包拷貝到任何 目錄,如果希望排除某個(gè)依賴(lài)包,需要給出一個(gè)依賴(lài)包的id列表,列表中依賴(lài)包就不會(huì )被拷貝。 

<project
  xmlns:deploy="deploy">

  <goal name="deploy-my-project">
    ...
    <deploy:copy-deps todir="/path" excludes="servletapi,commons-util"/>
    ...
  </goal>
</project>
命名約定
這部分將簡(jiǎn)要的描述項目對象模型(POM)中命名約定。本篇文檔希望可以統一各式各樣jar包命名 方法,這些jar包一般為java開(kāi)發(fā)者社區廣泛使用。 

規則和指南
項目
一個(gè)項目必須由一個(gè)唯一的的標識,標識由a-z小寫(xiě)字母和連線(xiàn)號構成,其首字母必須以小寫(xiě)字母 開(kāi)頭。 

<project>
  <groupId>bar</groupId>
  <artifactId>foo</artifactId>
  ...
</project>
所有項目間的引用都由組id和包id構成。到現在為止,在POM與此相關(guān)的是下面將要(上面提到的?)談到的項目的 依賴(lài)聲明。 

項目的名稱(chēng)應該易于閱讀,可用于文檔。 

<project>
  <groupId>bar</groupId>
  <artifactId>foo</artifactId>
  <name>The Grand Master Foo</name>
  ...
</project>
項目應該有一個(gè)組標識,組標識是名稱(chēng)的基礎部分。 

<project>
  <groupId>bar</groupId>
  <artifactId>foo</artifactId>
  <name>The Grand Master Foo</name>
  ...
</project>
所有項目發(fā)布的包都應基于項目唯一的標識,并且放在基于項目的組id的目錄中。對于上面的 項目來(lái)說(shuō),假定發(fā)布的包是jar類(lèi)型的包,我們就會(huì )有如下目錄結構: 

repository
 |
 +-- bar
     |-- distribution
     `-- jar
         |-- foo-1.0.jar
         `-- foo-2.0.jar
依賴(lài)
一個(gè)理想的典型依賴(lài)聲明的例子可能會(huì )象這樣: 

<project>
  <groupId>yourProject</groupId>
  <artifactId>yourArtifact</artifactId>
  <name>Your Groovey Machine</name>
  ...

  <dependencies>

   <dependency>
     <groupId>bar</groupId>
     <artifactId>foo</artifactId>
     <version>1.0</version>
   </dependency>

 </dependencies>

</project>
這樣一來(lái),依賴(lài)于idfoo1.0 版本的bar項目 屬于org.foo.bar組。這個(gè)依賴(lài)會(huì )被解析為本地repositoryjar文件。上面 的情形假定發(fā)布的包是基于包id命名的。因此對于上述依賴(lài),Maven就會(huì )采用 foo-1.0.jar作為jar名。 

就像用戶(hù)反映的那樣,這種理想的方式并不能適應所有的項目。有幾種情形我們必須考慮調整 理想的依賴(lài)機制: 


發(fā)布的jar包的并未使用項目作為基礎名,如xercesImpl就是所有發(fā)布的jar包的基礎名 它與gump idmaven中的id都不一樣。 
發(fā)布的jar包沒(méi)有使用任何版本聲明,如許多commons組件并沒(méi)有把版本號作為包名的一部分。 
有些項目即沒(méi)有使用項目id作為基礎名也沒(méi)有版本聲明。例如,最壞的情形是Java Activation Framework jar包,它沒(méi)有遵循其他Sun的命名規則,也沒(méi)有在jar包中聲明 版本號,甚至在manifest中都沒(méi)有任何版本信息。 

在多數情形下,任何例外的情況都可以用 <jar>(可選節點(diǎn))、或者是重命名來(lái)解決。 現在,許多Jarkata的產(chǎn)品在repository已經(jīng)被重命名,因為在不久的未來(lái),絕大多數的Jarkarta 項目將用maven進(jìn)行構建。但這不是公司政策,我們不需要解決所有情況的問(wèn)題。 

發(fā)布多個(gè)包的項目
Maven
的依賴(lài)機制完全支持任何形式的多項目包。 Maven‘s dependency mechanism completely supports multiple project artifacts of any given type. 

下面的代碼包含了ant的主jar包和optional包加上hypothetical包。 


<dependencies>

  <!-- A -->
  <dependency>
    <groupId>ant</groupId>
    <artifactId>ant</artifactId>
    <version>1.4.1</version>
  </dependency>

  <!-- B -->
  <dependency>
    <groupId>ant</groupId>
    <artifactId>ant-optional</artifactId>
    <version>1.4.1</version>
  </dependency>

  <!-- C -->
  <dependency>
    <groupId>ant</groupId>
    <artifactId>poorly-named</artifactId>
    <version>1.4.1</version>
  </dependency>

</dependencies>
所以A), B)  C)實(shí)際上是指向屬于同一組的單個(gè)包的指針,這就是說(shuō),一個(gè)單獨的依賴(lài)就是對某個(gè)組中的某個(gè) 包的引用。目前artifact如果沒(méi)有特別說(shuō)明的話(huà),一般指的是jar包。但是依賴(lài)也可能是一個(gè)war文件或一個(gè) 發(fā)行包。我們試圖在提供多數情況下(構建大多需要jar)使用的缺省方式的同時(shí),也顧及靈活性。 

遠程Repository布局
這部分文檔將對Maven的遠程repositories做一個(gè)概要的說(shuō)明。目前,主repository位于 Ibiblio,但是你也可以自己創(chuàng )建一 個(gè)遠程repositories,其結果描述可以在這部分文檔中找到。 

任何獨立的項目在repository都有自己的目錄。每個(gè)項目有一個(gè)唯一的項目id和同名目錄, 項目的發(fā)行包就放在這個(gè)目錄中。 

項目的目錄中可以存放各種各樣的artifacts,目前最為廣泛使用的兩種類(lèi)型是jar包和發(fā)行包 下面是一個(gè)遠程repository快照: 

repository
 |
 |-- ant
 |   |-- distribution
 |   `-- jars
 |       |-- ant-1.4.1.jar
 |       `-- ant-optional-1.4.1.jar
 +-- jsse
 |-- distribution
 `-- jars
     |-- jsse.jar
     |-- jcert.jar
     `-- jnet.jar
本地Repository布局
應該有一個(gè)接口集合的緊湊實(shí)現使本地repository目錄結構更加隨意一些?,F在我只使用 了一個(gè)類(lèi)來(lái)實(shí)現,顯得有些臃腫。我還是認為本地和遠程repositories應保持相同的結構 但是為了使用更樂(lè )于使用,我開(kāi)始設計一些接口,用于滿(mǎn)足用戶(hù)自己安排自己本地Repository 布局,相似的遠程Repositor也在設計中。盡管目前本地repository仍與遠程repository 完全一致,我希望聽(tīng)到更多的用戶(hù)反饋,以促進(jìn)這些接口的開(kāi)發(fā),或者完全拋棄它。 

生成項目站點(diǎn)
Maven
可以為項目產(chǎn)生一個(gè)完成的web站點(diǎn)。這個(gè)web站點(diǎn)將包含各種各樣、由許多Maven插件 產(chǎn)生的報告,如javadocs,代碼度量,單元測試,changlog,及其它... 本節文檔接下來(lái)的 部分將闡述Maven支持的站點(diǎn)定制選項。 

顏色
考慮到一致性,缺省情況下,所有Maven產(chǎn)生的站點(diǎn)都使用相似的外觀(guān)。這使用戶(hù)一眼就能 認出由Maven產(chǎn)生的站點(diǎn),產(chǎn)生熟悉的感覺(jué),更加方便信息的獲取。當然,Maven開(kāi)發(fā)組也 考慮到用戶(hù)可能會(huì )希望定制他們的站點(diǎn)。修改Maven產(chǎn)生的站點(diǎn),最簡(jiǎn)單的方法是指定你要 使用的顏色搭配。這只需要在project.properties簡(jiǎn)單的設置適當的屬性 即可。下面是所有可用的屬性描述在 xdoc plugin。 

風(fēng)格
如果你感覺(jué)顏色太過(guò)于簡(jiǎn)單,無(wú)法滿(mǎn)足你的要求,你可以用自己的stylesheet。為了重載 ${basedir}/xdocs/stylesheets/中的maven.css stylesheet,你可以通過(guò)設置maven.javadoc.stylesheet 屬性來(lái)指定你的 javadoc風(fēng)格。 

報告
最后,如果你希望定制哪些報告需要自動(dòng)產(chǎn)生,你需要在你的項目描述中包含 reports 標簽庫。 到目前為止,如果沒(méi)有reports標簽指定,所有插件報告都會(huì )產(chǎn)生。這個(gè)標簽 允許你選擇產(chǎn)生哪些報告而排斥另外一些報告,而且允許你安排順序。 

目前的標準 報告集在xdoc中是硬編碼實(shí)現的,它們是: 

maven-changelog-plugin
maven-changes-plugin
maven-checkstyle-plugin
maven-developer-activity-plugin
maven-file-activity-plugin
maven-javadoc-plugin
maven-jdepend-plugin
maven-junit-report-plugin
maven-jxr-plugin
maven-license-plugin
maven-linkcheck-plugin
maven-pmd-plugin
maven-tasklist-plugin
      
如果你希望產(chǎn)生缺省的報告,但是還想增加或刪除一兩個(gè),最好的方法是:給 xdoc:register-reports目標寫(xiě)一個(gè)前置目標(postGoal)。 

<postGoal name="xdoc:register-reports">
  <attainGoal name="maven-changelog-plugin:deregister"/>  
  <attainGoal name="maven-myown-plugin:register"/>  
</postGoal>
        
排除所有Maven產(chǎn)生的內容
某些情況下,用戶(hù)需要構建只有文檔的站點(diǎn),或是構建聚合許多子項目的站點(diǎn),但不希望 在站點(diǎn)上有個(gè)整體項目文檔導航條。設置 maven.xdoc.includeProjectDocumentation屬性值為no 即可解決這一問(wèn)題。缺省的,Maven會(huì )包含項目文檔導航條,下面掛的是許多Maven 生成的報告。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
結合Maven2進(jìn)行J2EE項目構建
maven
maven自導遠程下載包,maven常用命令
Maven Dependency設置,詳解!
Maven2使用手冊
maven2 (二) SCM
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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