2009-12-17 40 views
1

我有一個maven2項目,它由根項目(包含pom包)和一組相互依賴的模塊組成。該項目是一個庫,在這個庫的頂部建立了一組應用程序。現在的問題。不要在jar中包裝指定資源

我的庫使用了一些無法打包在jar中的資源 - 也就是一些sqlite數據庫,我無法找到一種方法將它放在jar而不是它裏面,並將庫以這種方式放到依賴應用程序中。

謝謝。有任何想法嗎?

回答

3

創建自定義assembly將項目作爲檔案(例如ziptar.gz)分配顯然是這裏的方法。

要定製Assembly插件創建程序集的方式,您需要提供自定義descriptor(這會爲您提供所需的所有靈活性)。然後,要將程序集構建爲構建的一部分,您只需將singlesingle-directory mojos綁定到默認構建生命週期中,如插件文檔的Configuration and Usage中所述。

另一個很好的資源是Sonatype的書,它有整個章節致力於組件:請參閱Chapter 14. Maven Assemblies

1

聽起來像你可以使用maven assembly plugin來創建一個你選擇的分佈文件(zip,jar,tar ...),它將包括額外的資源。

0

這裏是Maven: The Complete Reference's Assemblies Chapter Section 8.3.2一個重要的事實:

當您生成組件爲您的正常生成過程的一部分 ,那些 組裝檔案將被連接到 您的主項目的神器。這個 意味着他們將被安裝,並且 與主神器 一起部署,然後以相同的方式解決。每個裝配神器 給定相同的基本座標 (groupId,artifactId和版本)爲 的主要項目。然而,這些 工件是附件,其中 Maven意味着它們是基於主要 項目構建的某些方面的衍生工程 。爲了提供幾個 示例,源程序集包含 項目構建的原始輸入, 和jar-with-dependencies程序集 包含項目類別及其 依賴項。附件中的 允許規避一個項目的Maven 要求,一個 神器正是因爲這個 的衍生品質。

由於組件是(通常) 連接工件,每個必須具有 分類器來從 主僞影區別,除了 正常僞像的座標。默認情況下,分類符 與裝配描述符的標識符 相同。 當使用內置組件 描述符,如上所述,該組件 描述符的標識符一般是 也一樣在descriptorRef使用 該類型 組件的標識符。

重要的是要明白,儘管大多數Maven項目只生成一個工件,但可以生成多個工件並使用分類器座標將這些工件與相同的GAV座標關聯。在你的情況,你會想用一些類似的附加組件插件的「單一」的目標:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-2</version> 
    <dependencies> 
     <dependency> 
     <groupId>org.sonatype.mavenbook.assemblies</groupId> 
     <artifactId>web-fragment-descriptor</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
     <id>assemble</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>web-fragment</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

如你願意,你可以把這些處決的許多人,但一旦你有一個以上的執行對於特定的插件,每次執行都需要一個唯一的「id」元素。 Maven Assembly插件中的「單一」目標與「程序集」目標所做的相同,除了它被設計爲綁定到生命週期。

您的其他部分問題是關於從JAR中排除特定資源,您可以通過excluding resources in your POM完成此操作。