代码之家  ›  专栏  ›  技术社区  ›  Jared

是否有方法强制Maven以增量方式复制资源文件夹更改?

  •  10
  • Jared  · 技术社区  · 15 年前

    我使用的是maven 2.2.1和m2eclipse。

    我有两个资源文件夹。

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

    如果资源文件夹中的文件数量相对较少,这种行为也会很好——但是足够多的文件使复制需要几分钟。

    有没有一种方法可以强制Maven在其增量构建中更具选择性,并且只复制那些已更改的资源?

    5 回复  |  直到 15 年前
        1
  •  8
  •   R.G.    15 年前

    我把问题归结为org.codehaus.plexus.util.fileutils.copyfile()方法。maven资源插件调用这个方法来最终复制资源;copyFile()方法接受一个“overwrite”参数,这个参数是资源插件 传入(默认值确实是假的),但是…

    copyFile()方法 忽视 如果传递的筛选器包装列表非空,则为“overwrite”参数!如果您的资源的过滤设置为true,那么这个列表实际上是非空的。

    我可以理解copyFile()忽略“overwrite”的原因:仅仅因为目标文件较新并不意味着新筛选的文件将相同(即,资源文件中变量的值可能在上次筛选后已更改)。
    忽略“overwrite”标志对于fileutils实现者是“方便的”。但这是一个巨大的代价;不必要地更新单个资源文件可能会触发耗时但冗余的过程(例如,在我的例子中,使用依赖项重建JAR)。这可能只需要几秒钟,但足以中断密集的代码编译测试周期的流程。

    我在fileutils上寻找开放的bug,但没有找到任何。这让我心烦意乱,所以我不得不追查它,但我现在不能花更多的时间在上面…在几天内,我想提交一份bug报告(可能更快地实现正确的解决方案);如果有人可以发布到适当的bug跟踪/报告系统的链接,我会很感激。

        2
  •  1
  •   Eugene Kuleshov    15 年前

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

        3
  •  1
  •   Peter Knego    15 年前

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

    已编辑:此参数自Maven资源插件版本2.3以来就存在。 @贾里德:请检查一下你的版本。

        4
  •  0
  •   Manfred Moser    15 年前

    Maven资源插件配置中可能有一个选项可以这样做,但我没有找到任何选项。如果我是你,我会将资源拆分,并将它们转移到你所依赖的单独模块中。然后您只需重新构建在其中更改了文件的模块,而不是其他模块,这样做的速度会更快。

    我也会尝试刚刚发布的Maven3.0。它会更快地改善你在这方面和其他方面的情况。

        5
  •  0
  •   Gary    15 年前

    假设您不想更新,那么您可能需要编写自己版本的资源插件。

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

    如果你有社区意识,你可以将补丁提交回插件库,让其他人利用更新。