【问题标题】:Maven: correct way to enable filtering on a subset of resourcesMaven:启用对资源子集进行过滤的正确方法
【发布时间】:2011-04-20 16:08:03
【问题描述】:

考虑这个目录结构:

src/main/resources/
    resource1.properties
    subdir/
        resource2.properties

我需要resource2.properties(及其兄弟姐妹)接受Maven filtering,但宁愿从过滤中排除所有其他资源。

这是安全的:其他属性文件可能包含不应被替换的 ${xxx} 标记。我确实需要在target 上保留源目录结构。

最后,我发现实现这一点的唯一方法(以不破坏 maven-eclipse-plugin 的 eclipse:eclipse 的方式)似乎是:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>subdir/**</exclude>
        </excludes>
    </resource>
    <resource>
        <!-- 'subdir' resources need placeholder substitution (ie: "filtering") -->
        <directory>src/main/resources/subdir</directory>
        <targetPath>${project.build.outputDirectory}/subdir</targetPath>
        <filtering>true</filtering>
    </resource>
</resources>

您可以说这很复杂并且可能很脆弱。这是使用 Maven 2.2.1 和 maven-eclipse-plugin v2.8(最新)。

上面的其他稍微不那么复杂的版本已经触发了 maven-eclipse-plugin 的问题,它的抱怨类似于:

[INFO] Request to merge when 'filtering' is not identical. Original=resource src/main/resources: output=target/classes, include=[], exclude=[subdir/**|**/*.java], test=false, filtering=false, merging with=resource src/main/resources: output=target/classes, include=[subdir/**], exclude=[**/*.java], test=false, filtering=true

这让人想起this old thread:那里提到的解决方法有效(降级到 maven-eclipse-plugin 的 v2.6),但这应该不再需要,因为相关的错误被标记为已修复?

这看起来不太牵强的用例,但我正在苦苦挣扎......

【问题讨论】:

  • 我建议使用 m2eclipse 而不是 maven-eclipse-plugin...
  • 同意,虽然它肯定不是没有自己的怪癖 ;-) 这里的问题是一些团队成员坚持使用命令行工具...
  • 命令行非常好。我也更喜欢命令行,但如果我使用 eclipse,我会使用 m2eclipse,因为它使工作更简单。

标签: eclipse maven-2 m2eclipse


【解决方案1】:

这个呢:

   <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources/subdir</directory>
        <targetPath>${project.build.OutputDirectory}/subdir</targetPath>
        <filtering>true</filtering>
        <includes>
          <include>**/*</include>
        </includes>
      </resource>
    </resources>
   </build>

【讨论】:

  • 感谢@khmarbaise。看起来与我上面的解决方案非常相似。实际上,两者都有一个问题:看起来 maven-eclipse-plugin 也无法处理&lt;targetPath&gt;${project.build.OutputDirectory}/subdir&lt;/targetPath&gt;。一旦你添加这个,你会得到:[INFO] Cant canonicalize system path: {0} Embedded error: The filename, directory name, or volume label syntax is incorrect
猜你喜欢
  • 1970-01-01
  • 2013-07-03
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 2016-05-26
相关资源
最近更新 更多