向 Maven pom 添加额外资源
题
我定义了一个超级 pom,在其中指定资源的“资源”目录。在我的一个项目中,我的 pom 扩展了超级 pom,我想添加额外的资源。我试过:
<resources>
<resource>
<targetPath>/</targetPath>
<directory>additionalDir</directory>
</resource>
</resources>
但这会导致 仅有的 extraDir 位于资源中,不包括超级 pom 的资源。有没有办法扩展超级pom的资源?
解决方案
你所描述的行为是正常的。
请记住,你的超级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来为你做它,但我找不到一个。
其他提示
请参阅建立辅助性Maven的插件的使用页面。
是的,家复盖父球的资源时重新确定新资源部分。
然而,一个简单的方式来增加资源是
- 除资源部分从你的POM
- 显示出有效POM
- 复制的资源从有效POM进你的项目
- 替换绝对路径相对的
- 添加额外资源
我知道这个问题现在已经很老了,但也许有人会发现这个有用:
您可以使用 Maven 资源插件轻松地做到这一点。
基本上,它默认执行的操作(调用 resources:resources 目标)是使用声明的过滤器将 build/resources 部分中列出的所有目录的内容移动到 ${project.build.outputDirectory}
如果您现在想要添加一些额外的资源而不影响这些部分,您只需自己将资源移动到那里即可。不,这并不意味着将其拖放到那里。
这 Maven Resources Plugin
提供了一个名为 resources:copy-resources
这正是为你做的:使用过滤器将文件从一个地方复制到另一个地方,或者如插件文档所述:
您可以使用 mojo copy-resources 复制不在默认 maven 布局中或未在 build/resources 元素中声明的资源,并将其附加到阶段
与其他解决方案中建议的构建帮助程序相比,明显的优势是,虽然构建帮助程序只能在 generate-sources
阶段,资源插件在任何阶段都可以工作。(尽管在打包阶段之前执行它是明智的)
提供了有关如何使用它的完整示例 这里, ,作为插件项目页面的一部分。
其作用是复制未列出的资源目录的内容”src/non-packaged-resources
“ 进入 ”${basedir}/target/extra-resources
”。但由于 jar 插件(创建 jar 存档)基本上创建了目录的 zip 存档“${project.build.outputDirectory}
”,你可能想把它放在那里。