【问题标题】:How does maven compile only the modified java files?maven如何只编译修改后的java文件?
【发布时间】:2012-07-31 03:30:18
【问题描述】:

我只是想知道这一点,当我给 mvn install 而不做'clean'时,maven 只编译修改后的 java 文件。 maven如何识别java文件是否被修改?我相信它没有使用文件的最后修改属性。

我相信的原因:我有一个模块,在合并来自 svn 的更改后,我给了 mvn install,但它没有编译修改后的文件,当我查看更改时,我看到 'long' 被修改为 '长在 getter 和 setter 中。

所以我只想知道 maven 如何识别 java 文件是否已更改?

(PS 我使用的是 Apache Maven 3.0.3,如果这很重要的话)

【问题讨论】:

  • 如果模块不受版本控制怎么办?
  • 然后(类文件的时间修改
  • @Fakrudeen 在这种情况下,Maven 应该更改源文件的时间戳,但它不会。
  • @ArtursLicis - 为什么?这是由用户改变的——这就是我想的重点!
  • @Fakrudeen 啊,我对另一种情况感到困惑。没错,只要检查一个类文件是否比源文件旧 => 需要重新编译。

标签: java maven compilation maven-3 last-modified


【解决方案1】:

我相信 Maven 编译器插件使用源文件和类文件的最后修改日期来确定是否需要重新编译。

编译器website 的信息相当少,但compiler:compile 目标页面包含有关以下属性的信息,该属性可以微调过时计算:http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#staleMillis。这是关于陈旧性的唯一官方声明。

【讨论】:

  • 猜猜我的想法是错误的,它确实使用了最后修改的属性。感谢您的链接!
  • @duncan-jones 保存修改日期的位置。我没有在“目标”文件夹中找到信息。例如,我在一小时运行编译中更改了两个类,而不是在一小时内更改两个类中的一个。 manen 如何找出更改的文件是什么
【解决方案2】:

在不太了解 maven 的情况下,我可以告诉您,一般来说,类似“make”的工具使用“最后更改”时间戳,这可以解释您在使用 svn 时遇到的问题(请参阅Wikipedia on Subversion's weaknesses

【讨论】:

    【解决方案3】:

    Robert Scholte 在https://issues.apache.org/jira/browse/MCOMPILER-205 的评论解释了这个过程。它取决于“maven-compiler-plugin”的“useIncrementalCompilation”选项(顺便说一句,我只设法让“useIncrementalCompilation”与 3.1 一起工作,而不是 3.0):

    我发现有些混乱,所以需要改变一些东西,也许 改进文档就足够了。看代码,你会 看到非增量只会查看更改的源文件。 Incremental 还将验证依赖项是否已更改,以及是否 文件已被添加或删除。如果它已更改,它将删除 完整的类目录。原因是默认的java 编译器非常快,可能比分析每个文件快得多 怎么办。 IIUC eclipse 编译器是真正的增量 编译器,所以我们可以根据使用的 编译器不要删除类目录。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2013-06-02
    • 2021-05-28
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多