maven如何只编译修改过的java文件?

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

我相信的原因:我有一个模块,在从svn合并更改后,我给了mvn install并且它没有编译修改后的文件,当我看到更改时,我看到’long’被修改为’Long’in吸气剂和二传手。

所以我只是想知道如果java文件发生了变化,maven是如何识别的?

(PS我正在使用Apache Maven 3.0.3,如果这很重要)

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

编译器网站的信息相当短,但compiler:compile目标页面包含以下属性的信息,它可以很好地调整过期计算: http : //maven.apache.org/plugins/maven-compiler-plugin/compile- mojo.html#staleMillis 。 这是关于陈旧性的唯一官方声明。

在不太了解maven的情况下,我可以告诉你,一般来说,“make”式工具使用“最后更改”的时间戳,这可以解释你对svn的问题(参见维基百科有关Subversion的弱点) 。

Robert Scholte在https://issues.apache.org/jira/browse/MCOMPILER-205上的评论解释了这个过程。 它取决于“maven-compiler-plugin”的“useIncrementalCompilation”选项(在btw的版本上,我只设法使用“useIncrementalCompilation”使用3.1而不是3.0):

我看到有一些混乱,所以需要改变一些东西,也许改进文档已经足够了。 查看代码,您将看到非增量只会查看已更改的源文件。 增量还将validation依赖项是否已更改以及是否已添加或删除文件。 如果它已经改变,它将删除完整的classes-directory。 原因是默认的java编译器非常快,可能比分析每个文件的速度要快得多。 IIUC的eclipse编译器是一个真正的增量编译器,因此我们可以根据使用的编译器决定不基于类目录。