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" 
    }
}
Другие вопросы по тегам