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

时间:2014-02-04 18:55:05

标签: java gradle

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

我有一个结构

的项目
root
  /src/main/java
     /pkg1/File1.java
     /pkg2/File2.java
  /build.gradle
  /build.xml (for comparing against ant)

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

我的build.gradle文件只有1行

apply plugin: 'java'

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>

2 个答案:

答案 0 :(得分:5)

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

更新:自2015年起,Gradle现在支持incremental building

答案 1 :(得分:0)

我知道这是一个老帖子。仍在回答让人们了解这个伟大而精彩的功能。

gradle的增量任务处于孵化阶段。

请通过: