我有一個maven2項目,它由根項目(包含pom包)和一組相互依賴的模塊組成。該項目是一個庫,在這個庫的頂部建立了一組應用程序。現在的問題。不要在jar中包裝指定資源
我的庫使用了一些無法打包在jar中的資源 - 也就是一些sqlite數據庫,我無法找到一種方法將它放在jar而不是它裏面,並將庫以這種方式放到依賴應用程序中。
謝謝。有任何想法嗎?
我有一個maven2項目,它由根項目(包含pom包)和一組相互依賴的模塊組成。該項目是一個庫,在這個庫的頂部建立了一組應用程序。現在的問題。不要在jar中包裝指定資源
我的庫使用了一些無法打包在jar中的資源 - 也就是一些sqlite數據庫,我無法找到一種方法將它放在jar而不是它裏面,並將庫以這種方式放到依賴應用程序中。
謝謝。有任何想法嗎?
創建自定義assembly將項目作爲檔案(例如zip
或tar.gz
)分配顯然是這裏的方法。
要定製Assembly插件創建程序集的方式,您需要提供自定義descriptor(這會爲您提供所需的所有靈活性)。然後,要將程序集構建爲構建的一部分,您只需將single
或single-directory
mojos綁定到默認構建生命週期中,如插件文檔的Configuration and Usage中所述。
另一個很好的資源是Sonatype的書,它有整個章節致力於組件:請參閱Chapter 14. Maven Assemblies。
聽起來像你可以使用maven assembly plugin來創建一個你選擇的分佈文件(zip,jar,tar ...),它將包括額外的資源。
這裏是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完成此操作。