Gradle build - устранение зависимостей из загруженного архива
Я довольно новичок в Gradle. У меня есть многопроектная сборка, которая использует некоторые зависимости, которые в настоящее время упакованы в проекте (с использованием репозиториев и flatDir), так как они недоступны в артефакте. Я хочу удалить эту локальную папку и загрузить несколько архивов, содержащих эти зависимости, распаковать их и продолжить сборку как обычно. Я буду использовать https://plugins.gradle.org/plugin/de.undercouch.download для загрузки, но я не знаю, как это сделать, прежде чем разрешать зависимости (и в идеале, загружать, если это еще не сделано). На данный момент сборка завершается неудачей на этапе настройки, насколько я могу судить:
`A problem occurred configuring project ':sub-project-A'.
> Could not resolve all files for configuration ':sub-project-A:compileCopy'.
Could not find :<some-dependency>:.
РЕДАКТИРОВАТЬ: Загрузка файлов работает. Все еще борется с распаковкой архивов:
task unzipBirt(dependsOn: downloadPackages, type: Copy) {
println 'Unpacking archiveA.zip'
from zipTree("${projectDir}/lib/archiveA.zip")
include "ReportEngine/lib"
into "${projectDir}/new_libs"
}
Как мне сделать это запустить на этапе настройки?
2 ответа
Я в конечном итоге с помощью копирования, чтобы заставить распаковать в фазе конфигурации
copy {
..
from zipTree(zipFile)
into outputDir
..
}
Смотрите Project.files(Object...), в котором говорится
В этот метод можно передать любой из следующих типов:
...
Задача. Преобразован в выходные файлы задачи. Задача выполняется, если набор файлов используется в качестве входных данных для другой задачи.
Так что вы можете сделать:
task download(type: Download) {
...
into "$buildDir/download" // I'm guessing the config here
}
task unzip {
dependsOn download
inputs.dir "$buildDir/download"
outputs.dir "$buildDir/unzip"
doLast {
// use project.copy here instead of Copy task to delay the zipTree(...)
copy {
from zipTree("$buildDir/download/archive.zip")
into "$buildDir/unzip"
}
}
}
task dependency1 {
dependsOn unzip
outputs.file "$buildDir/unzip/dependency1.jar"
}
task dependency2 {
dependsOn unzip
outputs.file "$buildDir/unzip/dependency2.jar"
}
dependencies {
compile files(dependency1)
testCompile files(dependency2)
}
Примечание: если в молнии много банок, вы можете сделать
['dependency1', 'dependency2', ..., 'dependencyN'].each {
tasks.create(it) {
dependsOn unzip
outputs.file "$buildDir/unzip/${it}.jar"
}
}