有没有办法强制maven逐步复制资源文件夹更改?

我正在使用Maven 2.2.1和m2eclipse。

我有两个资源文件夹。

当我将更改保存到任何资源文件夹中的任何文件时,Maven增量构建将启动并将两个资源文件夹中的所有文件重新复制到目标文件夹。

如果资源文件夹中的文件数量相对较少,则此行为会很好 – 但是有足够的文件可能需要几分钟。

有没有办法强制maven在其增量构建中更具选择性,并只复制那些已更改的资源?

我将问题追溯到org.codehaus.plexus.util.FileUtils.copyFile()方法。 正是这种方法被maven-resource-plugin调用,最终复制资源; copyFile()方法采用’overwrite’参数,资源插件传入该参数(默认值确实为false),但是……

如果传递的filter-wrappers列表为非空,则copyFile()方法会忽略 ‘overwrite’参数! 如果您的资源的过滤设置为true,则此列表确实非空。

我可以理解copyFile()忽略’覆盖’背后的原因:只是因为目标文件较新并不意味着新的过滤文件将是相同的(即资源文件中变量的值可能已经改变,因为最后一次过滤)。
忽略’overwrite’标志对于FileUtils实现者来说是“方便的”。 但这是一个很大的代价; 不必要地更新的单个资源文件可以触发耗时但冗余的进程(即在我的情况下重建jar-with-dependencies)。 这可能只有几秒钟,但足以破坏密集的代码 – 编译 – 测试周期的流程。

我在FileUtils上寻找开放的bug,但没找到。 这让我很烦,所以我不得不把它追了下来,但我现在不能花更多的时间在这上面……几天后我想提交一份错误报告(可能会更快地实施正确的解决方案); 如果有人可以发布链接到适当的错误跟踪/报告系统,我将不胜感激。

您可以尝试更新到m2eclipse和Maven 3的最新版本。有一个新的Maven插件API告诉m2eclipse哪些文件受到Maven插件的影响。 我相信资源插件已更新到该API(但请确保在资源插件配置中未将覆盖设置设置为true)。

尝试将Maven资源插件的overwrite参数设置为false。 http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#overwrite

编辑:此参数自Maven资源插件版本2.3以来存在。 @Jared:请检查你的版本。

Maven资源插件配置中可能有一个选项可以做到这一点,但我还没有找到任何选项。 如果我是你,我会分配资源并将它们移到你所依赖的独立模块中。 然后你只需要重建你更改文件的模块而不是其他模块,事情会快得多。

我也会尝试刚刚发布的Maven 3.0。 它的速度要快得多,并且会改善您在这方面和其他方面的情况。

假设您不想更新,您似乎需要编写自己的资源插件版本。

这看起来不会太难(一些不完整的源代码在这里: http : //maven.apache.org/plugins/maven-resources-plugin/xref/index.html )你可以包括你自己的自定义配置参数,用于修改MavenResourcesExecution类的覆盖行为。

如果您感觉有社区意识,可以将补丁提交回插件存储库,以允许其他人利用更新。