gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:16:43 25 4
gpt4 key购买 nike

我可以让 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编译时,它会创建两个.class文件File1.class和File2.class。当我更改 File2.java 并重新编译时,仅重建 File2。这是我期望的行为吗?

Gradle:当我执行gradlecompileJava时,它会创建两个.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>

最佳答案

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

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

关于java - Gradle javaCompile 任务是否总是重新编译所有 java 类(包括未更改的?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com