向 Maven pom 添加其他资源
Posted
技术标签:
【中文标题】向 Maven pom 添加其他资源【英文标题】:Adding additional resources to a Maven pom 【发布时间】:2010-11-09 05:51:04 【问题描述】:我定义了一个超级 pom,在其中我为资源指定了一个“资源”目录。在我的一个项目中,我的 pom 扩展了那个超级 pom,我想添加一个额外的资源。我试过了:
<resources>
<resource>
<targetPath>/</targetPath>
<directory>additionalDir</directory>
</resource>
</resources>
但这会导致 仅 additionalDir 在资源中,并且不包括超级 pom 的资源。有没有办法扩展超级pom的资源?
【问题讨论】:
【参考方案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 页面。
【讨论】:
这确实有效,但必须指定<targetPath>$project.outputDirectory</targetPath>
和 <filtering>true</filtering>
有点讨厌,这甚至没有记录(但有效)。【参考方案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 的资源。
但是,添加资源的一种简单方法是
-
从您的 POM 中删除资源部分
显示有效的 POM
将有效 POM 中的资源复制到项目中
用相对路径替换绝对路径
添加您的其他资源
【讨论】:
以上是关于向 Maven pom 添加其他资源的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Maven 依赖项 pom.xml 文件中添加其他参数
springboot maven mybatis generate插件的使用
springboot maven mybatis generate插件的使用
IDEA中的Maven项目配置了resources标签还是不能成功导出资源?