<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

    來自:http://www.jieesoft.com/modules.php?name=News&file=article&sid=155

    Maven和ANT是Apache 推出的大名鼎鼎的Build和工程管理工具,國內有人將他做了漢化工作,并推出了maven手冊漢化工作,其中手冊已經完工,對廣大程序員可是一大幫助。進入該網站
    用戶手冊

    1. 關于手冊
    2. 簡介
    3. 項目對象模型
    4. POM 處理機制
      1. POM 插值機制
      2. POM 繼承機制

    5. 使用插件
    6. maven.xml文件

      1. 簡單的maven.xml例子
      2. project節點
      3. 目標
      4. Jelly編程

    7. Maven 配置

      1. 屬性的處理機制
      2. 插件的屬性
      3. 行為屬性
      4. 使用代理
      5. 使用多個遠程Repositories

    8. 項目設置

      1. 開始一個新項目

    9. 構建

      1. 構建生命周期
      2. 在CVS中存放jar文件
      3. 重載已聲明的依賴包
      4. 使用SNAPSHOT依賴
      5. 多項目構建和Reactor
      6. 離線構建
      7. 命令行選項介紹

    10. 測試



      1. 測試資源
      2. 運行一個單獨的測試

    11. 打包



      1. JAR 資源

    12. 部署



      1. 固化SNAPSHOT依賴
      2. 拷貝依賴JAR包

    13. 命名約定

      1. 規則和指南
      2. 項目
      3. 依賴
      4. 發布多個包的項目

    14. 遠程Repository布局
    15. 本地Repository布局
    16. 生成項目站點

      1. 顏色
      2. 風格
      3. 報告





    關于手冊
    這篇Maven使用手冊意在通過提供完整的描述和例子,幫助開發人員了解Maven。 如果你有任何建議或者意見請在 Maven使用者郵件列表上發表.
    感謝選擇Maven!

    簡介
    Maven最早始于Jarkarta Turbine項目,目的是為了簡化構建過程。這個項目下面有 幾個子項目,每個子項目都有自己的Ant文件,但是區別很小,而且生成的JAR 文件都要check in到CVS中。我們希望有一種標準的方式來構建這些項目,一種可以 清晰描述項目的方式,一種易于發布項目信息的方式,一種在多個項目之間共享JARs 的方式。
    這個結果就是產生了一個可以用于構建、管理任何基于java的項目。我們希望我們創造 的這個工具可以讓Java開發者的日常工作更加輕松,并有助于理解基于java的項目.

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

    POM 處理機制
    這篇文檔簡單的描述了Maven執行過程中是如何處理POM的。這里有一些簡單的POM例子 來展示繼承機制和插值機制。

    POM 插值機制
    POM(通常以project.xml的名字出現)現在已經被當作Jelly腳本來處理了。大部分時 候,用戶無須關心project.xml文件是不是真正的Jelly腳本,但是,如果需要的話, 也可以使用內置值。我也不愿看到邏輯控制語句出現在project.xml中,但是由于 project.xml實際上已經是一個隱含的jelly的腳本,所以它會有足夠的靈活性:-)。 下面是一個簡單的例子。
    3
    maven
    maven
    Maven
    1.0-b5-dev

    Apache Software Foundation
    http://jakarta.apache.org/
    /images/jakarta-logo-blue.gif

    2001
    org.apache.${pom.artifactId}
    /images/${pom.artifactId}.jpg

    Maven is a project that was created in ${pom.inceptionYear}.
    ${pom.name} is a Java Project Management Tool

    POM 繼承機制
    現在有一種簡單方式可以用于在POM中進行繼承,下面是一個簡單的例子:
    project.xml
    super-extendo
    super-extendo
    Super Extendo

    **/*Test*.java

    **/TestAll.java
    **/*Abstract*.java

    目前對POM父對象的解析還相對較弱,現在對一層以上的繼承還沒有做過任何測試。盡管如此, 單層繼承加上插值機制已經能夠給帶來很多好處。這些機制的意圖在于簡化構建的共用問題。
    你可以這樣定義主模板:

    3
    commons
    commons-master
    Commons Master Maven POM

    Apache Software Foundation
    http://www.apache.org

    jakarta
    http://jakarta.apache.org/commons/${pom.artifactId}.html
    http://nagoya.apache.org/
    jakarta.apache.org
    /www/jakarta.apache.org/commons/${pom.artifactId}/
    /www/jakarta.apache.org/builds/jakarta-commons/${pom.artifactId}/

    scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-commons/${pom.artifactId}
    http://cvs.apache.org/viewcvs/jakarta-commons/${pom.artifactId}/
    ...

    子POM對象可以這樣定義:
    commons-betwixt
    commons-betwixt
    Betwixt
    ...

    這樣你就可以在父POM對象中,將子POM對象的${pom.artifactId}替換進去。有許多項目的 構建都以相似的方式進行構建,這樣一來,對于項目的公共部分,你就可以使用一個主模板, 然后在子POM對象project.xml中定義有區別的部分,而這部分內容通常很少。
    這種機制確實還可以簡化那些需要產生多個JAR包的項目。由于project.xml和標準Ant構建 不會相互干擾,我計劃在公共部分測試繼承機制。
    如果你對使用這種機制,DVSL報告會變成什么樣感到疑惑,我要說,你很上路。我已經修改 了DVSL報告來適應POM本身,這就是說DVSL轉換是基于java對象的。在使用繼承和插值機制的 時候,為了正確的產生DVSL報告,這是很有必要的。象上面列出的子模板是無法工作的,我們 需要全面的解析POM。我能說的是,它可以工作了!我所使用的處理方式可能不是最有效率的 方式,但仍有提升的空間。因為POM只會被處理一次(不管怎么說,這就它的原理,我可能漏了 某些東西),然后到處使用,至少這就是我以前試圖做的事情,所以我們很有可能會取得平衡。
    如果你不使用繼承和插值,那么一切照常工作。maven站點本身一切ok,有幾個剛部署的站點 已經使用了我昨晚提交的東西了。

    使用插件
    Maven是一個很緊湊的內核,圍繞著它的是許許多多的插件。Maven所有的功能都是由插件來提供 的。

    maven.xml文件
    項目中的maven.xml文件是Maven在執行過程中要使用的“定制”文件。
    在這個文件中,你可以加入Maven構建中需要的額外處理。或者在Maven的“目標”前后附加自己 的代碼,如jar 或 test。
    Maven使用Jelly 腳本語言, 任何合法的jelly標簽都可以在maven.xml中使用。
    Maven所采用的goal功能是由werkz標簽庫提供。更多的信息請看 wiki頁面.

    簡單的maven.xml例子
    注意由于Maven并未缺省的定義'compile'目標,下面這個例子沒法運行。
    這是一個簡單的maven.xml例子

    ${goals}
    Now attaining goal number ${goalNumber}, which is ${goal}

    你可能會注意到這里一些有意思的東西,下面我們將逐一解釋。

    project節點
    project節點, , 是任何 maven.xml 文件的根節點。
    項目節點有一個缺省的屬性:default="nightly-build",如果用戶只是簡單鍵入 沒有參數的maven命令,Maven就會用nightly-build 目標作為缺省目標。
    接下來是幾個名字空間的聲明,如:

    1. xmlns:j="jelly:core"
      所有以j:作為前綴的節點,Jelly都會把它視為在core標識下 預定義的標簽庫。
    2. xmlns:u="jelly:util"
      所有以u:作為前綴的節點,Jelly都會把它視為在標識下 預定義的標簽庫。

      所有在maven.xml文件使用的Jelly標簽庫,都必須在project節點中定義,并且 分配一個名稱空間前綴。
      Maven已經預先包含了jeez標簽庫作為空前綴。這個標簽庫在一個名稱空間內包含了 ant 和 werkz 標簽庫。這樣,任何werkz或ant標簽都無須名稱空間 即可使用,同時也簡化了ant的遷移過程。

      目標
      goal是一個 werkz 標簽,類似于Ant的target;它是包含了一系列可執行標簽的容器。
      由于jeez 標簽庫已經由maven預先注冊了,一個目標(goal)可以包含任何合法的 Ant 標簽。
      為了執行在maven.xml中定義的目標,你只需要在命令行中為Maven指定目標名即可。要執行例子中定 義的nightly-build你只需執行命令:
      maven nightly-build

      Maven插件定義的目標需要在目標前加上插件名,這樣一來,就不會和你自己的goal沖突,如 jar:jar就是 jar 插件定義的目標,用于創建項目的jar包。

      Jelly編程
      在每個目標里,由Jelly標簽提供功能,讓我們來看看例子里的這些代碼。
      set

      這行就是一個jelly的core標簽set,它使用了project節點中定義的前綴 j:
      set標簽設置了一個由var屬性定義的Jelly變量,值由 value 指定。和Ant的proerties不一樣,Jelly變量在被賦值后仍可以改變。
      mkdir

      等同于Ant任務 mkdir, 用于創建目錄,目錄名由變量 ${maven.build.dir}指定。
      tokenize
      ${goals}
      這行執行的是Jelly tokenize 標簽。這是Jelly util 標簽庫中標簽, 這個標簽庫已經在項目節點中預先定義:u:
      tokenize標簽在將節點中的內容分離成一個list,用于后續的處理。
    • var 屬性就是將被于新list的變量。
    • delim 屬性是用于分割字符串中的分隔符。
    • 在這個例子中,tokenize 標簽中節點值是一個變量:goals, 在前幾行中,這是一個由逗號分隔、compile 與 test 的字符串。



    forEach

    Now attaining goal number ${goalNumber}, which is ${goal}


    forEach標簽提供簡單循環功能,節點值就是循環體。


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



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

    Maven 配置

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

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


    讀入的屬性遵循“最后的定義有效”原則。也就是說,Maven依次讀入properties文件,以新的定義 覆蓋舊的定義。${user.home}/build.properties是Maven最后處理的文件。我們把 這些文件稱為Maven處理的標準屬性文件集。
    另外,上述properties文件處理完畢后,Maven才會開始處理系統屬性。所以,如果在命令行中使用 象-Dproperty=value這樣的形式來指定的屬性,它會覆蓋先前定義的同名屬性。

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

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


    這樣一來,即使插件處于屬性處理鏈的后端,也能覆蓋插件的任何缺省屬性。例如,Checkstyle插件 就定義了如下缺省屬性:
    maven.checkstyle.format = sun

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

    Checkstyle就會使用Turbine的編碼規范。

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

    屬性
    描述
    缺省值

    maven.build.dest
    目錄名,存放編譯生成的類
    ${maven.build.dir}/classes

    maven.build.dir
    存放構建結果的目錄,如類文件,文檔,單元測試報告等等。
    注意: 在${user.home}/build.properties文件中改變maven.build.dir 的缺省值或許會得到一個 較為個性化的目錄布局。但是,這會干擾Maven由從源碼開始的編譯工作,因為它假設jar包 會被創建到${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
    產生的文檔所應包含的xml聲明頭,如:

    false

    maven.docs.outputencoding
    生成文檔的缺省編碼
    ISO-8859-1

    maven.docs.src
    用戶提供的文檔目錄
    ${basedir}/xdocs

    maven.gen.docs
    xdocs文檔轉換成html后的輸出目錄
    ${maven.build.dir}/generated-xdocs

    maven.home.local
    maven用于寫入用戶信息的本機目錄,如解開插件包、緩沖數據。
    ${user.home}/.maven

    maven.mode.online
    是否連接internet
    true

    maven.plugin.dir
    插件的存放目錄
    ${maven.home}/plugins

    maven.plugin.unpacked.dir
    用于展開安裝插件的目錄
    ${maven.home.local}/plugins

    maven.repo.central
    在進行dist:deploy處理的時候,發行包所要部署的目標機器
    login.ibiblio.org

    maven.repo.central.directory
    在進行dist:deploy處理的時候,發行包所要部署的目標目錄。
    /public/html/maven

    maven.repo.local
    本機repository,用于存儲下載的jar包。
    ${maven.home.local}/repository

    maven.repo.remote
    遠程repository,如果本機repository沒有的jar包,maven會從這里下載。
    http://www.ibiblio.org/maven

    maven.repo.remote.enabled
    是否使用遠程repository。
    true

    maven.scp.executable
    用于安全拷貝的可執行程序
    scp

    maven.src.dir
    基礎源代碼目錄
    ${basedir}/src

    maven.ssh.executable
    遠程命令可執行程序
    scp

    使用代理
    如果你只能通過代理訪問,不要緊,Maven為你提供了下列屬性:

    代理屬性
    描述

    maven.proxy.host
    代理的IP地址

    maven.proxy.port
    代理端口

    maven.proxy.username
    如果代理需要認證的話,在這里填寫用戶名。 User name if your proxy requires authentication.

    maven.proxy.password
    如果代理需要認證的話,在這里填寫密碼。
    如果你實在需要代理,最好在${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
    .
    .

    使用多個遠程Repositories
    你可以在任何Maven可以處理的屬性文件中指定使用多個遠程Repositories,如:
    maven.repo.remote = http://www.ibiblio.org/maven/,http://www.mycompany.com/maven/

    項目設置

    開始一個新項目
    如果你是第一次使用Maven,或者開始一個新的項目,你可以使用GenApp來自動創建Maven項目樹。
    maven -Dpackage=com.mycompany.app genapp

    執行該命令后,屏幕顯示如下:
    __ __
    | / |__ Jakarta _ ___
    | |/| / _ V / -_) ' ~ intelligent projects ~
    |_| |___,_|_/___|_||_| v. 1.0-beta-9

    [mkdir] Created dir: /genapp/src/java/com/mycompany/app
    [copy] Copying 1 file to /genapp/src/java/com/mycompany/app
    [mkdir] Created dir: /genapp/src/test/com/mycompany/app
    [copy] Copying 3 files to /genapp/src/test/com/mycompany/app
    [copy] Copying 2 files to /genapp
    [copy] Copying 1 file to /genapp/src/conf
    BUILD SUCCESSFUL
    Total time: 3 seconds

    執行完畢,即生成下面的完整項目目錄樹:
    .
    |-- 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. 在一個典型的Maven項目中,構建所需的 jar包會從中心庫下載。Maven只會取回依賴鏈條上缺失的包。如果你使用Maven來構建幾個項目, 這些項目可能會共享一些依賴包:Maven可以在任意個項目中共享同一個包,而無須在同一系統 中保持一個jar包的多個拷貝。

    構建生命周期

    在CVS中存放jar文件
    我們不推薦你在CVS中存放jar包。Maven提倡在本機repository中存放用于構建共享的jar包或 和其他項目包。許多項目都依賴于諸如XML解析器、標準例程,這在Ant構建中,經常會被復制 多份。在Maven中,這些標準例程就存放在本地repository中,供任何項目構建使用。
    重載已聲明的依賴包
    你可能會發現,在某些情況下允許重載POM中已經聲明的依賴包會很方便,甚至很有必要。 你可能會希望使用文件系統中的某個JAR包,或者你希望簡單重新指定某個包的版本。對于 這樣的情況,Maven提供了一種簡單的方式,允許你選擇構建所需的jar包。我們嚴重建議;) 你設置本機repository,但是在簡單至上,或在由ant構建遷移的情況下,JAR包重載特性 會顯得非常方便。
    為了使用JAR包重載特性,你必須將maven.jar.override 屬性設置為 on。 只要設置了這個屬性,就可以在任何maven處理的屬性文件中重載JAR包。
    關于JAR重載的指令有兩種。第一種允許你指定某個特定的包的路徑,作為JAR包;的二種 允許你指定某個特定的JAR包(這個jar包必須已經存在于本機repository)。下面是這兩 種方式:
    maven.jar.artifactId = [path]
    maven.jar.artifactId = [version]

    下面是一個使用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依賴
    在Maven中,SNAPSHOP是某個特定項目的最新構建的jar包。如果你的項目依賴于另一個頻繁變更 的項目,你可以在你的POM中聲明SNAPSHOP依賴,以保持與那個項目的同步。例如,在你的POM中 這樣寫,你可以與Jelly保持 同步更新。
    ...
    commons-jelly
    commons-jelly
    SNAPSHOT
    ...

    上述語句的含義是:總是使用Maven repository中最新的Jelly構建包。SNAPSHOT依賴 總會導致依賴失敗。在這種情況下,Maven就會去Maven repository取得一個SNAPSHOT 依賴包的拷貝。如果你正在離線工作,Maven就會發出警告:“SNAPSHO依賴包可能已經 過期”。

    多項目構建和Reactor
    在Maven中,Reactor是一個用于控制多項目構建的工具。Reactor用Werkz包,并根據每個項目 各自定義的依賴關系來安排構建順序。Reactor的意圖在于:鼓勵創建/重構具有更小、更松散、 更有一致性單元的項目。r源于面向組件編程,在向組件編程中,整個系統由許多松散的個體 構成,這些個體需要聚合起來作為一個整體進行部署。
    Reactor可以為某個項目集執行一個任意編排的目標列表。所以,如果使用Reactor的話,它 可以用來做項目站點生成,任意jar包生成這樣的事情。
    目前 db.apache.org 站點就是收集了其子項目的 豐富信息、并與一系列的Velocity 模板合成的。這一過程是由 Jelly Velocity 標簽庫來完成的。 這里是其中的機制,有興趣可以看看。
    Plexus(一個基于Avalon的容器)組件的manifest是遍歷所有Plexus組件、并聚合而成的。這里 使用的還是Velocity模板和Jelly Volocity標簽庫。 這里是其中的機制,有興趣可以看看。
    這里是一個使用Reactor標簽,遍歷一系列組件,最后產生項目站點的例子:
    ... Do whatever you want with the harvested information ...

    如果你需要聚合N個項目的文檔,形成一個統一的視圖,你可以參考 db.apache.org站點,它從所有的子項目中收集 信息,最終形成一個有導航條,郵件列表,開發者列表和源碼repository統一的站點。這解決 了在收集子項目信息過程中的冗余、易于產生錯誤的問題。db.apache.org的子項目只需關注 自身的信息,卻可以自動的集成到高層的項目站點中。

    離線構建
    如果你需要離線構建,你得在命令行中使用離線選項:
    maven -o jar:jar

    這等同于:
    maven -Dmaven.mode.online=false jar:jar

    或者你可以在屬性文件中設置 maven.mode.online 屬性為false。
    在聯機模式下,maven總是下載 SNAPSHOT 依賴包, 請參考 使用SNAPSHOT依賴。如果本機repository 上的當前版本比服務器上的還要新,你也許不想maven覆蓋你的當前版本。如果不想下載,你可以 設置屬性:
    maven.repo.remote.enabled=false

    在maven beta 9版本中,這個屬性并沒有起作用(新版本已經解決了這個問題)。可以這樣來清空 maven.repo.remote 屬性:
    maven.repo.remote.enabled=

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

    命令行選項介紹
    如果你用命令行來構建,這里提供了一個關于命令行選項的快速參考。
    Options:
    -D,--define arg 定義一個系統屬性
    -E,--emacs 輸出簡潔的日志信息
    -X,--debug 輸出debug信息
    -b,--nobanner 禁止 logo banner
    -d,--dir arg 設置指定的工作目錄
    -e,--exception 輸出異常堆棧信息
    -f,--find arg 通過搜尋項目文件來確定執行的項目文件及其工作目錄
    -g,--goals 顯示可用的目標
    -h,--help 顯示幫助信息
    -i,--info 顯示系統信息
    -o,--offline 離線構建
    -p,--pom arg 指定項目文件
    -v,--version 顯示版本號

    測試

    測試資源
    通常情況下,你需要在測試類路徑上為測試指定某些資源。你可以在POM中使用
    下面的例子說明了如何遞歸的包含在${basedir}/src/test目錄中所有以.xml和.properties為擴展名 的文件:
    ...
    ...
    ...

    ${basedir}/src/test
    **/*.xml
    **/*.properties

    下面的例子說明了如何遞歸的包含在${basedir}/src/test目錄中所有以.xml和.properties為擴展名 的文件,但naughty.properties文件除外。請注意增加的project/build/unitTest/resources/excludes 節點:
    ...
    ...
    ...

    ${basedir}/src/test
    **/*.xml
    **/*.properties

    naughty.properties

    運行一個單獨的測試
    下面的命令運行了一個單獨的測試:
    maven -Dtestcase=org.foo.bar.MyTest test:single-test

    打包
    JAR 資源
    ...

    ${basedir}/src/conf

    *.xml
    *.properties

    ${basedir}/src/messages
    org/apache/maven/messages
    messages*.properties

    部署

    固化SNAPSHOT依賴
    在開發時使用SNAPSHOT依賴包非常方便,但是在部署的時候,你需要把所有的SNAPSHOT依賴包 固定下來,以便發布一個包含固定jar的版本。如果你發布了一個含SNAPSHOT依賴包的項目,而 這些SNAPSHOT在項目發布后發生了變更,你可能很快就會發現這個版本沒法兒工作。
    當SNAPSHOT以時間戳為版本號部署到Maven上時,Maven可以識別foo-SNAPSHOT.jar實際上相當 于foo-20030101.010101.jar。當部署的時刻來臨,你可以用下面的命令,讓Maven把SNAPSHOT 版本號變為時間戳版本號。
    maven convert-snapshots

    Maven會提供交互的方式讓你選擇哪個SNAPSHOPT依賴包應該固化下來。這一過程結束后,Maven 就會把剛才你的選擇寫會你的POM。
    如果你希望Maven簡單的、盡可能最好的固化SNAPSHOT依賴包,你可以用下面的命令:
    maven convert-snapshots-auto

    拷貝依賴JAR包
    在maven.xml這樣寫下面的語句是最簡單的拷貝依賴包的方法。
    ...
    ...

    用deploy:copy-deps標簽你就可以簡單的把項目所有的依賴包拷貝到任何 目錄,如果希望排除某個依賴包,需要給出一個依賴包的id列表,列表中依賴包就不會被拷貝。

    ...
    ...

    命名約定
    這部分將簡要的描述項目對象模型(POM)中命名約定。本篇文檔希望可以統一各式各樣jar包命名 方法,這些jar包一般為java開發者社區廣泛使用。

    規則和指南
    項目
    一個項目必須由一個唯一的的標識,標識由a-z小寫字母和連線號構成,其首字母必須以小寫字母 開頭。

    bar
    foo
    ...

    所有項目間的引用都由組id和包id構成。到現在為止,在POM與此相關的是下面將要(上面提到的?)談到的項目的 依賴聲明。
    項目的名稱應該易于閱讀,可用于文檔。

    bar
    foo
    The Grand Master Foo
    ...

    項目應該有一個組標識,組標識是名稱的基礎部分。
    bar
    foo
    The Grand Master Foo

    ...

    所有項目發布的包都應基于項目唯一的標識,并且放在基于項目的組id的目錄中。對于上面的 項目來說,假定發布的包是jar類型的包,我們就會有如下目錄結構:
    repository
    |
    +-- bar
    |-- distribution
    `-- jar
    |-- foo-1.0.jar
    `-- foo-2.0.jar


    依賴
    一個理想的典型依賴聲明的例子可能會象這樣:

    yourProject
    yourArtifact
    Your Groovey Machine
    ...

    bar
    foo
    1.0

    這樣一來,依賴于id為foo1.0 版本的bar項目 屬于org.foo.bar組。這個依賴會被解析為本地repository中jar文件。上面 的情形假定發布的包是基于包id命名的。因此對于上述依賴,Maven就會采用 foo-1.0.jar作為jar名。
    就像用戶反映的那樣,這種理想的方式并不能適應所有的項目。有幾種情形我們必須考慮調整 理想的依賴機制:

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

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

      發布多個包的項目
      Maven的依賴機制完全支持任何形式的多項目包。 Maven's dependency mechanism completely supports multiple project artifacts of any given type.
      下面的代碼包含了ant的主jar包和optional包加上hypothetical包。
      ant
      ant
      1.4.1

    ant
    ant-optional
    1.4.1
    ant
    poorly-named
    1.4.1

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

    遠程Repository布局
    這部分文檔將對Maven的遠程repositories做一個概要的說明。目前,主repository位于 Ibiblio,但是你也可以自己創建一 個遠程repositories,其結果描述可以在這部分文檔中找到。
    任何獨立的項目在repository都有自己的目錄。每個項目有一個唯一的項目id和同名目錄, 項目的發行包就放在這個目錄中。
    項目的目錄中可以存放各種各樣的artifacts,目前最為廣泛使用的兩種類型是jar包和發行包 下面是一個遠程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布局
    應該有一個接口集合的緊湊實現使本地repository目錄結構更加隨意一些。現在我只使用 了一個類來實現,顯得有些臃腫。我還是認為本地和遠程repositories應保持相同的結構 但是為了使用更樂于使用,我開始設計一些接口,用于滿足用戶自己安排自己本地Repository 布局,相似的遠程Repositor也在設計中。盡管目前本地repository仍與遠程repository 完全一致,我希望聽到更多的用戶反饋,以促進這些接口的開發,或者完全拋棄它。

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

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

    風格
    如果你感覺顏色太過于簡單,無法滿足你的要求,你可以用自己的stylesheet。為了重載 在${basedir}/xdocs/stylesheets/中的maven.css stylesheet,你可以通過設置maven.javadoc.stylesheet 屬性來指定你的 javadoc風格。

    報告
    最后,如果你希望定制哪些報告需要自動產生,你需要在你的項目描述中包含 reports 標簽庫。 到目前為止,如果沒有reports標簽指定,所有插件報告都會產生。這個標簽 允許你選擇產生哪些報告而排斥另外一些報告,而且允許你安排順序。
    目前的標準 報告集在xdoc中是硬編碼實現的,它們是:
    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

    如果你希望產生缺省的報告,但是還想增加或刪除一兩個,最好的方法是:給 xdoc:register-reports目標寫一個前置目標(postGoal)。

    排除所有Maven產生的內容
    某些情況下,用戶需要構建只有文檔的站點,或是構建聚合許多子項目的站點,但不希望 在站點上有個整體“項目文檔”導航條。設置 maven.xdoc.includeProjectDocumentation屬性值為no 即可解決這一問題。缺省的,Maven會包含“項目文檔”導航條,下面掛的是許多Maven 生成的報告。 "

     


    posted on 2008-01-10 19:43 禮物 閱讀(755) 評論(0)  編輯  收藏 所屬分類: maven2
    主站蜘蛛池模板: 亚洲乱码精品久久久久..| 亚洲AV无码久久久久网站蜜桃| 国产精品免费看久久久| 亚洲免费在线观看视频| 免费va在线观看| 日韩内射激情视频在线播放免费| 亚洲日本久久久午夜精品| 国产偷窥女洗浴在线观看亚洲| 57pao一国产成永久免费| 国产亚洲精品国产福利在线观看 | 成人电影在线免费观看| 亚洲av片不卡无码久久| 久久精品亚洲乱码伦伦中文| 成年人免费的视频| 精品一区二区三区高清免费观看 | 亚洲一卡2卡三卡4卡无卡下载| 亚洲精品国自产拍在线观看| 四虎在线最新永久免费| 久久久WWW成人免费精品| 亚洲国产日韩精品| 亚洲AV永久青草无码精品| 国产无遮挡又黄又爽免费视频 | 中文字幕乱码系列免费| 亚洲午夜在线播放| 亚洲国产精品久久久久网站| 亚洲?V乱码久久精品蜜桃 | 精品日韩亚洲AV无码一区二区三区| 全部免费a级毛片| 国产成人yy免费视频| 国产黄色片免费看| 亚洲精品无码专区在线播放| 亚洲a在线视频视频| 亚洲国产成人久久精品99 | 亚洲VA成无码人在线观看天堂| 无码国模国产在线观看免费| 亚洲视频免费播放| 野花香高清在线观看视频播放免费| 鲁死你资源站亚洲av| 亚洲13又紧又嫩又水多| 精品亚洲成AV人在线观看| 国产精品亚洲а∨无码播放|