我有一个maven2项目,由根项目(带有pom包装)和一组彼此依赖的模块组成。该项目是一个库,其中包含一组构建在此库之上的应用程序。现在问题。
我的库使用了一些无法在jar中打包的资源 - 即一些sqlite数据库,我找不到一种方法将它放在jar附近而不是放在jar里面,并以这种方式将库放到依赖的应用程序中。 / p>
感谢。有什么想法吗?
答案 0 :(得分:3)
创建自定义assembly以将项目分发为存档(例如zip
或tar.gz
)显然是这里的方式。
要自定义Assembly Plugin创建程序集的方式,您需要提供自定义descriptor(这为您提供了所需的所有灵活性)。然后,要构建程序集作为构建的一部分,您所要做的就是将single
或single-directory
mojos绑定到默认构建生命周期,如插件的Configuration and Usage中所述。文档。
另一个很好的资源是Sonatype的书,其中有一章专门讨论装配:见Chapter 14. Maven Assemblies 。
答案 1 :(得分:1)
听起来你可以使用maven assembly plugin创建一个你选择的分发文件(zip,jar,tar ......),其中包含额外的资源。
答案 2 :(得分:0)
以下是来自Maven: The Complete Reference's Assemblies Chapter Section 8.3.2的重要事实:
当您将程序集生成为部分时 正常的构建过程,那些 装配档案将附加到 你的主要项目的工件。这个 意味着他们将被安装和 与主要工件一起部署, 然后在很多时候可以解决 同样的方式。每个装配工件都是 给出相同的基本坐标 (groupId,artifactId和version)为 主要项目。但是,这些 工件是附件,其中包含 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来完成此任务。