1. 程式人生 > >《Maven官方文件》外掛字首解析策略

《Maven官方文件》外掛字首解析策略

原文連結  譯者:carvendy

外掛字首解析策略

當你執行maven的時候使用一個標準的生命週期,這些外掛參與的生命週期就像是一個相當簡單的程序。無論如何,當你從命令列中引用一個指令,例如clean,Maven必須有一些可靠的方式讓clean外掛字首為maven-clean-plugin。這提供了簡潔的命令列呼叫,當儲存這些描述性的外掛的真實工件id。

對於很多複雜性的問題,不是所有外掛應該被強制使用同樣的組id(在倉庫中)。從這些組id在一個專案中假定被控制,和對於Maven多個專案可能使用的外掛,它跟隨著外掛字首匹配必須容納多個外掛組id。 對於地址關係,Maven提供了一塊新的的倉庫級別元資料(與任何單一的工件無關)對於外掛組來說,在一個外掛匹配管理者來組織多個外掛組合提供功能性的搜尋。

指定的外掛字首

為了給使用者方便的字首去引用你的外掛,一個字首必須與你的外掛相關在構建的時候。在預設的情況下,Maven將令一個猜想的字首被使用,被移除任何被“maven”或者“plugin”的連字元在這些外掛的工件id。方便的工件id格式被定為:

  • maven-${prefix}-plugin – 官方Apahe團隊的外掛(你不必使用這些命名的規則作為你的外掛,看看更多的資訊
  • ${prefix}-maven-plugin – 其他來源的外掛。

如果你的外掛工件id符合這個規則,Maven將會根據元資料中正確的字首自動匹配你外掛的組id在倉庫中的路徑。無論如何,如果你想自定義字首來引用的你外掛,你可以指定字首來引導通過配置引數在maven-plugin-plugin

在你的pom中:

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          ...
          <goalPrefix>somePrefix</goalPrefix
>
</configuration> </plugin> </plugins> </build> </project>

以上的配置講允許使用者引用你的外掛通過字首somePrefix,作為一個例子:

mvn somePrefix:goal

匹配字首外掛

對於每一個組id配置是為了搜尋,Maven將:

  1. 從每一個遠端倉庫下載maven-metadata.xml到本地倉庫,和命名為maven-metadata-${repoId}.xml 在內部使用 ${groupId}路徑。
  2. 載入元資料檔案,在maven-metadata-local.xml(如果存在)中,在內部使用 ${groupId}路徑。合併它們。
  3. 發現外掛字首在合併元資料。如果它匹配,它應該引用一個具體的組和工件對。否則,繼續在使用者外掛組中找下一個組id。 這些元資料檔案組成的組(為了清晰當這些檔案被大塊在容器之外的目錄),和一個組的外掛節點。

在列表中每個外掛包含一個字首節點表示外掛的命令列字首,和一個工件節點, 提供的字首對映對方提供了足夠的資訊來查詢和使用插入部件。當一個外掛被安裝和釋出,適當的元資料檔案被放置和如果字首匹配丟失了,修改字首匹配。

配置Maven查詢外掛

預設情況下,maven將搜尋組id org.apache.maven.plugins 為了字首工件匹配外掛,它需要在構建過程中執行。無論如何,前面提到的,使用者可能需要一個第三方的外掛。從Maven專案被假定有控制的預設外掛組,這意味著配置maven來搜尋其他組的位置為了外掛字首匹配。

這很簡單。在Maven配置檔案(當前使用者:${user.home}/.m2/settings.xml; 全域性:${maven.home}/conf/settings.xml),你可以提供一個自定義的外掛組專案,列出你想要搜尋的外掛(每個都在自己的plugingroup GroupID的子元素)。作為例子,如果我的專案使用了一個 模板檔案,我可以設定:

<pluginGroups>
  <pluginGroup>org.codehaus.modello</pluginGroup>
</pluginGroups>

這使我能夠執行以下,這將從模式生成java類:

mvn -Dversion=4.0.0 -Dmodel=maven.mdo modello:java

Maven會搜尋以下GroupID的搜尋後,在使用者設定中指定的任何外掛組:

  • org.apache.maven.plugins
  • org.codehaus.mojo

注意:當指定被使用的外掛組在搜尋的字首匹配中,秩序是關鍵!被指定的一個外掛組 com.myco.plugins有一個字首clean,我可以覆蓋maven-clean-plugin的時候,當clean:clean被呼叫的時候。 筆記2:想了解更多資訊可以檢視 settings.xml

資源