Gradle javaCompile任务是否总是重新编译所有java类(包括未更改的?)

loo*_*oka 0 java gradle

我可以得到一个ant编译只重建已经改变的java类,但我不能让Gradle这样做.

我有一个结构项目

root
  /src/main/java
     /pkg1/File1.java
     /pkg2/File2.java
  /build.gradle
  /build.xml (for comparing against ant)
Run Code Online (Sandbox Code Playgroud)

File1和File2不相互依赖.File1和File2包含正确的包信息

我的build.gradle文件只有1行

apply plugin: 'java'
Run Code Online (Sandbox Code Playgroud)

Ant:当我这样做时,ant compile它会创建两个.class文件File1.class和File2.class.当我更改File2.java并重新编译时,只有File2重建.这是我期望的行为?

Gradle:当我这样做时,gradle compileJava它会创建两个.class文件File1.class和File2.class.当我只更改File2.java并重新编译时,重建了File1和File2.为什么File1在这里重新编译?

这可能是由于配置问题?或者目前Gradle是不可能的?也许这首先是一个坏主意,如果是这样,为什么?

为了完整性,ant文件看起来像这样:

<property name="src" location="src/main/java/"/>
<property name="build" location="build"/>

<target name="init">
  <tstamp/>
  <mkdir dir="${build}"/>
</target>

<target name="compile" depends="init" description="compile the source " >
  <javac srcdir="${src}" destdir="${build}" includeDestClasses="true"/>
</target>
Run Code Online (Sandbox Code Playgroud)

Pet*_*ser 5

Gradle目前不支持增量Java编译.换句话说,如果JavaCompile任务的任何输入发生更改,则将重新编译所有源.我确实希望在将来的版本中支持渐进式编译.在此之前,可以通过在多个源集(有效地表示多个编译任务)和项目上分布源来改进编译时间.前者有助于使最新的检查更有效,后者允许在运行时进行并行编译--parallel.

更新:Gradle现在支持自2015年以来的增量构建.