Java 为什么可以';t gradlew build命令只编译和构建已更改的内容,并使过程更快?
eclipse下自动构建的特性比/gradlew构建的速度要快得多 经过一些研究,我发现它只编译和生成更改的文件,并将其替换到生成文件夹中 那么为什么/gradlew build命令不能编译和生成已更改的文件,并将其替换到build文件夹中,从而加快整个构建过程呢 我最近开始在hotswap agent+DCEVM中使用自动生成功能 为什么gradlew build命令不能只编译和构建已更改的内容,并使过程更快 没有可靠的方法来确定需要重新编译的内容。例如,编译时常量是内联的,在类文件中没有它们来自何处的痕迹(它可以在源文件中找到,这意味着解析它们和浪费时间;它可以存储在一些辅助文件中,而一些工具可以这样做) 有关详细信息,请参阅的“限制”部分 原因可能是他们没有经过gradle的配置步骤 当然可以,但是配置步骤通常不会花那么长时间 Eclipse知道哪些文件已更改 好的观点(在holwgler的评论中)Java 为什么可以';t gradlew build命令只编译和构建已更改的内容,并使过程更快?,java,eclipse,performance,gradle,buildship,Java,Eclipse,Performance,Gradle,Buildship,eclipse下自动构建的特性比/gradlew构建的速度要快得多 经过一些研究,我发现它只编译和生成更改的文件,并将其替换到生成文件夹中 那么为什么/gradlew build命令不能编译和生成已更改的文件,并将其替换到build文件夹中,从而加快整个构建过程呢 我最近开始在hotswap agent+DCEVM中使用自动生成功能 为什么gradlew build命令不能只编译和构建已更改的内容,并使过程更快 没有可靠的方法来确定需要重新编译的内容。例如,编译时常量是内联的,在类文件中没有它们
不久前,我花了一些时间试图加快gradle的编译速度,但我放弃了。Eclipse速度非常快,原因有很多:
- 增量编译
- 使用所有内核的多线程
- 了解所有更改的文件
- 通过JIT优化整个编译器代码
- 可能是缓存文件依赖项
- 丑陋的高度优化代码
要找出时间花在哪里,请使用
./gradlew clean; ./gradlew --profile jar
对我来说,90%的时间只是:compileJava
为什么gradlew build命令不能只编译和构建已更改的内容,并使过程更快
没有可靠的方法来确定需要重新编译的内容。例如,编译时常量是内联的,在类文件中没有它们来自何处的痕迹(它可以在源文件中找到,这意味着解析它们和浪费时间;它可以存储在一些辅助文件中,而一些工具可以这样做)
有关详细信息,请参阅的“限制”部分
原因可能是他们没有经过gradle的配置步骤
当然可以,但是配置步骤通常不会花那么长时间
Eclipse知道哪些文件已更改
好的观点(在holwgler的评论中)
不久前,我花了一些时间试图加快gradle的编译速度,但我放弃了。Eclipse速度非常快,原因有很多:
- 增量编译
- 使用所有内核的多线程
- 了解所有更改的文件
- 通过JIT优化整个编译器代码
- 可能是缓存文件依赖项
- 丑陋的高度优化代码
要找出时间花在哪里,请使用
./gradlew clean; ./gradlew --profile jar
对我来说,90%的时间都是
:compileJava
gradlew是否使用?如果不是,我使用2.7。我尝试使用4.10,但令人惊讶的是它花费了更多的时间。2.7花了将近40秒,而4.10花了一分钟多。Eclipse在1秒内完成所有操作。原因可能是他们没有经过gradle的配置步骤。无论如何,我不知道gradle支持增量构建功能。如果你写的话,我愿意接受你的答案。如果您提到为什么gradle比eclipse自动构建花费更多的时间,这将是一个额外的收获。当Gradle4.10下载时,这只是第一次慢一点吗?当前的Gradle版本6.0.1应该比Gradle 4.10更快。Eclipse知道哪些文件已经更改,也许Gradle Eclipse插件构建程序使用这些信息来避免耗时地访问文件以找出更改的内容。Gradle 4.10的第一次构建花费了更多的时间。我说的是后续构建。还有一件事,使用eclipse的build automatically功能在构建之后部署构建是否安全,或者我们必须手动调用./gradlew build。我假设这个eclipse特性只适用于热交换,我们不应该冒险?如果不是,我使用2.7。我尝试使用4.10,但令人惊讶的是它花费了更多的时间。2.7花了将近40秒,而4.10花了一分钟多。Eclipse在1秒内完成所有操作。原因可能是他们没有经过gradle的配置步骤。无论如何,我不知道gradle支持增量构建功能。如果你写的话,我愿意接受你的答案。如果您提到为什么gradle比eclipse自动构建花费更多的时间,这将是一个额外的收获。当Gradle4.10下载时,这只是第一次慢一点吗?当前的Gradle版本6.0.1应该比Gradle 4.10更快。Eclipse知道哪些文件已经更改,也许Gradle Eclipse插件构建程序使用这些信息来避免耗时地访问文件以找出更改的内容。Gradle 4.10的第一次构建花费了更多的时间。我说的是后续构建。还有一件事,使用eclipse的build automatically功能在构建之后部署构建是否安全,或者我们必须手动调用./gradlew build。我假设这个eclipse特性只适用于热交换,我们应该