不要在jar中打包指定的资源

时间:2009-12-17 17:26:47

标签: java maven-2

我有一个maven2项目,由根项目(带有pom包装)和一组彼此依赖的模块组成。该项目是一个库,其中包含一组构建在此库之上的应用程序。现在问题。

我的库使用了一些无法在jar中打包的资源 - 即一些sqlite数据库,我找不到一种方法将它放在jar附近而不是放在jar里面,并以这种方式将库放到依赖的应用程序中。 / p>

感谢。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

创建自定义assembly以将项目分发为存档(例如ziptar.gz)显然是这里的方式。

要自定义Assembly Plugin创建程序集的方式,您需要提供自定义descriptor(这为您提供了所需的所有灵活性)。然后,要构建程序集作为构建的一部分,您所要做的就是将singlesingle-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来完成此任务。