我定义了一个超级pom,我在其中为资源指定了“resources”目录。在我的一个项目中,我的pom扩展了那个超级pom,我想添加一个额外的资源。我试过了:
<resources>
<resource>
<targetPath>/</targetPath>
<directory>additionalDir</directory>
</resource>
</resources>
但是这导致仅 additionalDir在资源中并且不包括超级pom的资源。有没有办法扩展超级pom的资源?
答案 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的资源。
但是,添加资源的简单方法是
答案 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存档,因此您可能希望将其放在此处。