为maven pom添加额外资源

时间:2009-07-09 01:55:37

标签: maven-2 resources pom.xml

我定义了一个超级pom,我在其中为资源指定了“resources”目录。在我的一个项目中,我的pom扩展了那个超级pom,我想添加一个额外的资源。我试过了:

    <resources>
        <resource>
            <targetPath>/</targetPath>
            <directory>additionalDir</directory>                
        </resource>
    </resources>

但是这导致 additionalDir在资源中并且不包括超级pom的资源。有没有办法扩展超级pom的资源?

4 个答案:

答案 0 :(得分:14)

您所描述的行为是预期的。

请记住,您的超级POM继承自Maven的default POM,而您在pom中定义的任何插件都会有效地覆盖默认POM中的设置。例如,要启用对默认资源的过滤,您必须在POM中指定路径。你这样做:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

不是这个:

<resources>
  <resource>
    <filtering>true</filtering>
  </resource>
</resources>

默认目录不会为您冒泡,即使您已在那里指定它。可能有一个特殊的MOJO为你做,但我找不到。

答案 1 :(得分:3)

请参阅build-helper-maven-plugin的usage页面。

答案 2 :(得分:0)

是的,maven在重新定义新资源部分时会覆盖父POM的资源。

但是,添加资源的简单方法是

  1. 从POM中删除资源部分
  2. 显示有效的POM
  3. 将资源从有效的POM复制到项目中
  4. 将绝对路径替换为相对路径
  5. 添加您的其他资源

答案 3 :(得分:0)

我知道这个问题现在已经很老了,但是也许有人会觉得这个有用:

您可以使用Maven资源插件轻松地做到这一点。

基本上,默认情况下,它的默认操作(调用resources:resources目标)是使用声明的过滤器将build / resources部分中列出的所有目录的内容移动到${project.build.outputDirectory}中 如果现在想添加一些其他资源而不影响这些部分,则只需将资源自己移到那里即可。不,这并不意味着将其拖放到那里。

Maven Resources Plugin提供了一个名为resources:copy-resources的目标,可以完全为您完成目标:使用过滤器将文件从一个地方复制到另一个地方,或者按照插件文档的说明进行操作:

  

您可以使用mojo copy-resources复制不在默认Maven布局中或未在build / resources元素中声明的资源,并将其附加到阶段

与其他解决方案所建议的build-helper相比,明显的优势在于,虽然build-helper仅在generate-sources阶段可以采取行动,但资源插件可以在任何阶段使用。 (尽管在打包阶段之前执行它是明智的)

here作为插件项目页面的一部分提供了有关如何使用它的完整示例。

这是用来处理未列出的资源目录“ src/non-packaged-resources”的内容 放入“ ${basedir}/target/extra-resources”中。但是,由于jar插件(用于创建jar存档)基本上会创建目录“ ${project.build.outputDirectory}”的zip存档,因此您可能希望将其放在此处。