18

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

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

但这导致资源中只有附加目录,不包括超级 pom 的资源。有没有办法扩展超级pom的资源?

4

4 回答 4

15

您描述的行为是预期的。

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

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

不是这个:

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

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

于 2009-07-09T02:26:15.817 回答
4

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

于 2009-08-06T09:15:36.297 回答
1

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

您可以使用 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阶段采取行动,但资源插件在任何阶段都可以工作。(虽然在打包阶段之前执行它是明智的)

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

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

于 2019-01-17T21:01:46.867 回答
0

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

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

  1. 从您的 POM 中删除资源部分
  2. 显示有效的 POM
  3. 将有效 POM 中的资源复制到项目中
  4. 用相对路径替换绝对路径
  5. 添加您的其他资源
于 2016-12-11T15:02:29.897 回答