在新环境中,gradle build
需要很长时间,因为所有的依赖项都要被下载。
有没有一种方法只下载依赖项以加快后续的构建速度?
这样我们就可以预填一个CI构建环境了。
编辑:已更新至Gradle 6+。
一些注意事项:
main
源集的JAR文件,但可以泛化。runtime
文件夹的部分。当您需要获取JAR文件(和传递依赖项)时,此解决方案非常方便,因为您只需注释掉删除文件夹的部分即可。
考虑以下build.gradle
文件(作为任意的具体示例):
apply plugin: 'java'
dependencies {
implementation 'org.apache.commons:commons-io:1.3.2'
implementation 'org.kie.modules:org-apache-commons-lang3:6.2.0.Beta2'
}
repositories {
jcenter()
}
task getDeps(type: Copy) {
from sourceSets.main.runtimeClasspath
into 'runtime/'
doFirst {
ant.delete(dir: 'runtime')
ant.mkdir(dir: 'runtime')
}
doLast {
ant.delete(dir: 'runtime')
}
}
示例运行:
$ find /Users/measter/.gradle/caches -name "commons-io*1.3.2.jar"
$ gradle getDeps
$ find /Users/measter/.gradle/caches -name "commons-io*1.3.2.jar"
/Users/measter/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/1.3.2/[snip]/commons-io-1.3.2.jar
from sourceSets.test.runtimeClasspath
,并将其放在build/
目录下,以便clean
可以删除它。这是我的getDeps任务。task getDeps(type: Copy) {
from sourceSets.main.runtimeClasspath
from sourceSets.test.runtimeClasspath
into 'build/deps'
doFirst {
ant.delete(dir: 'build/deps')
}
}
- Neon您可以创建一个自定义任务来解决所有配置(这样做,它也会下载依赖项而不构建项目)。
task downloadDependencies {
doLast {
configurations.findAll{it.canBeResolved}.each{it.resolve()}
}
}
我的回答会偏向于gradle插件和内置任务。
我会在命令行中使用“gradle assemble”。
这是“gradle build”的一个次要版本。
这样,您可以减少运行或构建任何东西之前的准备时间。
请查看以下链接以获取文档: https://docs.gradle.org/current/userguide/java_plugin.html#lifecycle_tasks
一般来说,当我克隆一个新的存储库时,我的步骤如下:
-gradle assemble
-进行一些编码
-gradle run(并基本测试直到完成)
-gradle build(制作可分发文件)
注意:此最后一步可能有额外的配置用于.jar文件作为输出(这取决于你)。
npm install
等价的“依赖项”Docker缓存层,请使用 @JochenBedersdorfer。 - Novaterata