【发布时间】:2019-11-16 17:33:27
【问题描述】:
我正在尝试从构建中排除 所有 YAML 资源文件,但 那些在文件名中带有 prod 子句的文件。
例如,假设我的资源目录包含 application-dev.yaml、application-test.yaml 和 application-prod.yaml,我会比如 application-dev.yaml 和 application-test.yaml 被排除,application-prod.yaml 被保留。
我的 POM 中处理资源的部分如下:
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<excludes>
<exclude>**/*-!(prod).yaml</exclude>
</excludes>
</resource>
<resource>
<directory>${project.basedir}/web/WEB-INF</directory>
</resource>
</resources>
但是,排除不起作用,所有 YAML 文件都会被复制,包括 application-dev.yaml 和 application-test.yaml。
我通过 ls *-!(prod).yaml 在 Bash shell 中测试了排除模式,它按预期工作。
此时我迷路了,正在寻找社区帮助。
我提前感谢大家的想法和cmets。
【问题讨论】:
-
@khmarbaise 关键是复杂的排除模式不起作用。如果我将模式简化为 *.yaml 而不是 *-!(prod).yaml,则排除工作完美。我本可以排除所有内容并包括所需的文件 - 它不太优雅,因为我必须明确提及 log4j2.xml 等等。我正在尝试使复杂的模式起作用......
-
Maven-resources-plugin 使用不支持 '!' 的基于 ant 的模式。
-
@Ramu 这是很有价值的一点,因此我改用正则表达式,因为 Ant 支持正则表达式模式。我将排除模式更改为正则表达式形式 ^.+\-((?!prod).)*\.yaml$,在 Notepad++ 中测试了该模式;但是,Maven 仍然不排除这些文件...
-
@Lev Ant 确实支持正则表达式模式,但 Ant 的文件集模式仅支持
*, ** and ?并且 Maven 资源插件也使用相同的模式。请参阅以下链接了解更多详情。 Ant Fileset [ Maven 插件使用的 DirectoryScanner](codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/…)
标签: maven maven-resources-plugin