使用资源过滤时如何在Eclipse中的pom.xml上忽略丢失的过滤器文件错误?

时间:2017-05-26 16:53:16

标签: java eclipse maven maven-3 maven-resources-plugin

我有一个像这样的多模块项目:

parent
|
+-- childA
|   +-- src/main/resources/application.properties
|
+-- childB
    +-- src/main/resources/application.properties
    +-- src/main/filters/filter.properties

我使用childB中的application.properties过滤了childA和childB中的filter.properties

我跟着this strategy将过滤器文件附加到childB的工件上,然后将其解压缩到childA的目标上:

childA/target/filters/filter.properties

childA有这样的资源过滤:

<build>
  <filters>
    <filter>target/filters/filter.properties</filter>
  </filters>
</build>

Eclipse正在childA/pom.xml标记错误:

  

加载属性文件时出错   &#39;父\ childA \目标\滤波器\ filter.properties&#39;   (org.apache.maven.plugins:行家资源-插件:3.0.2:复制资源:默认资源:处理资源)

我在构建应用程序时可以使用过滤器文件,因此我并不担心。

如何更新childA的pom.xml以永久忽略此错误?

2 个答案:

答案 0 :(得分:1)

从Eclipse Luna升级到Neon后,问题就消失了。

答案 1 :(得分:0)

您已从目标文件夹中获取了filter.properties个文件。这不是正确的方法。你应该从你的角度考虑它 src/main/filters/filter.properties档案。

<filters>
    <filter>${basedir}/src/main/filters/filter.properties</filter>
</filters>

有关更多信息,请参阅本教程:Error loading property file Maven

更新#2:

从我这边,您可以将属性文件保存在父级中。然后使用以下过滤器在ChildA和childB上给出引用。希望它能奏效。

<filters>
    <filter>${basedir}/src/main/filters/filter.properties</filter>
</filters>

更新#3:

斯蒂芬·康纳利在下面的帖子中说道:

  

考虑将项目列为依赖项时会发生什么。   如果您通过使用mojo来指定其依赖项来指定它们   从磁盘上的.properties文件,Maven无法复制它   何时从Maven存储库中提取依赖项。所以   Maven无法确定依赖关系。因此它可以   永远不会工作。

     

您可以做的是使用外部系统(例如ANT)来生成   模板中的pom.xml,其中的版本已替换为该文件。   然后使用实例化的模板进行构建。

资源链接: https://stackoverflow.com/a/14727072

此处提出类似问题:Maven2 property that indicates the parent directory

Dennis Lundbarg在this post中将此问题称为反模式:

  

使用相对路径引用另一个模块中的文件是一个   反模式。这样做的一个原因是它会破坏你的构建   你正在使用像Jenkins这样的构建服务器。构建服务器将   将每个模块签出到一个单独的文件夹中,该文件夹不在   您的项目正在使用的相同文件夹结构。

     

共享资源(如配置文件)的最佳实践方法是   将它们存储在部署到存储库的存档中。什么时候   完成后你可以使用它作为依赖,制作   类路径上可用的资源,或使用依赖项:unpack   目标是将文件提取到您想要的任何位置。