【问题标题】:Maven exclude resources not working as expectedMaven 排除未按预期工作的资源
【发布时间】:2019-11-16 17:33:27
【问题描述】:


我正在尝试从构建中排除 所有 YAML 资源文件, 那些在文件名中带有 prod 子句的文件。
例如,假设我的资源目录包含 application-dev.yamlapplication-test.yamlapplication-prod.yaml,我会比如 application-dev.yamlapplication-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.yamlapplication-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


【解决方案1】:

为了解决这个问题,我会使用 maven 配置文件和资源插件 maven resource plugin 您可以根据需要(prod、dev 等)为资源文件名设置变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 2017-07-21
    • 1970-01-01
    • 2011-10-30
    • 2014-07-20
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多