【问题标题】:Adding additional resources to a Maven pom向 Maven pom 添加其他资源
【发布时间】:2010-11-09 05:51:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: maven-2 resources pom.xml


    【解决方案1】:

    您描述的行为是预期的。

    请记住,您的超级 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 可以为你做,但我找不到。

    【讨论】:

    • 我想知道,这如何解决操作的问题?你能说得清楚一点吗?应该在哪里做任何改变
    【解决方案2】:

    查看 build-helper-maven-plugin 的 usage 页面。

    【讨论】:

    • 这确实有效,但必须指定 &lt;targetPath&gt;${project.outputDirectory}&lt;/targetPath&gt;&lt;filtering&gt;true&lt;/filtering&gt; 有点讨厌,这甚至没有记录(但有效)。
    【解决方案3】:

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

    您可以使用 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 存档,因此您可能希望将其放在那里。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-22
        • 2014-12-27
        • 1970-01-01
        • 2014-03-07
        • 1970-01-01
        相关资源
        最近更新 更多