我可以得到一个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>
答案 0 :(得分:5)
Gradle目前不支持增量Java编译。换句话说,如果JavaCompile
任务的任何输入发生更改,则将重新编译所有源。我确实希望在将来的版本中支持渐进式编译。在此之前,可以通过在多个源集(有效地表示多个编译任务)和项目上分布源来改进编译时间。前者有助于使最新检查更有效,后者允许在使用--parallel
运行时进行并行编译。
更新:自2015年起,Gradle现在支持incremental building。
答案 1 :(得分:0)
我知道这是一个老帖子。仍在回答让人们了解这个伟大而精彩的功能。
gradle的增量任务处于孵化阶段。
请通过: