Мне нужно создать 2 артефакта из 1 проекта, используя Gradle.У меня есть 3 файла Gradle, родительский файл, build.gradle и proj1.gradle и proj2.gradle для каждого из артефактов.Я хочу вызывать конкретные задачи проекта из родительского файла сборки.Это мой файл settings.gradle, в котором я определяю проект и связываю файл gradle с каждым проектом:
rootProject.name = 'Parent'
include 'proj1'
include 'proj2'
project(':proj1').buildFileName = 'buildProj1.gradle'
project(':proj2').buildFileName = 'buildProj2.gradle'
Это файл build.gradle для вызова определенных задач:
project(':Parent') {
dependencies {
project(':proj1')
project(':proj2')
}
}
task compileAll (dependsOn: [':proj1:compileProj1']){
compileAll.finalizedBy ':proj2:compileProj2'
}
Ошибка в том, что он находит задачу compileProj1
.
Как вызвать задачу подпроекта из родительского файла сборки?
ОБНОВЛЕНИЕ
В соответствии с приведенным ниже предложением я постараюсь объяснить, что мне нужно сделать, как можно более кратко.
У меня есть устаревший проект ANT, который был частью огромного проекта Ant.Теперь он автономен и должен быть преобразован в проект Gradle.Этот 1 проект создает 2 файла ear, используя набор сценариев сборки.Один файл уха является подмножеством другого.В Ant-сборке для правильного создания этих ear-файлов выполнялись следующие шаги: 1. Выполнение задач BuildScript1: очистка всех, зависимости загрузки, компиляция и этап 2. Выполнение задач BuildScript2: чистая компиляция, компиляция иЭтап 3. Выполнить задачу BuildScript1: пакет 4. Задача запуска BuildScript2: пакет
У этих задач есть много, много зависимых задач и вызываемых макросов.Таким образом, планируется импортировать сценарий сборки для каждого файла ear в его собственный файл gradle и создать граф зависимостей в родительском файле gradle для указанных выше задач.
Это задачи gradle, определенные в файле First Ear:
task ear1Clean(dependsOn: ['clean-all', copyDependencies])
task ear1Compile(dependsOn: ['compile-and-stage'])
ear1Compile.finalizedBy 'deploy'
Это задачи gradle, определенные для файла Second Ear:
task ear2Compile(dependsOn: ['clean-compile'])
ear2Compile.finalizedBy 'compile-and-stage'
//Package the Load ear
task ear2Package(dependsOn: ['deploy'])
В родительском файле gradle build.gradle я хочу сделать что-то вроде этого:
task compileAll (dependsOn: [':proj1:ear1Compile']){
compileAll.finalizedBy ':proj2:ear2Compile'
}
Надеюсь, это все прояснит ...
ОБНОВЛЕНИЕ
Это то, что у меня есть до сих пор ... Файл Settings.gradle:
include 'loadRemote', 'load'
rootProject.name = 'EquipLoad'
project(':loadRemote').buildFileName = 'buildRemote.gradle'
project(':load').buildFileName = 'buildLoad.gradle'
Родительский файл: build.gradle
allprojects {
task cleanCompileStage {
doLast { task ->
println "Clean, compile, stage $task.project.name"
}
}
}
tasks.getByPath(":load:cleanCompileStage").dependsOn(":loadRemote:cleanCompileStage")
В каждом из файлов gradle load и loadRemote определены задачи cleanCompileStage
.Когда я запускаю его с помощью: gradle -q cleanCompileStage
Я не получаю сообщение об ошибке, и эта распечатка выводит:
Clean, compile, stage EquipLoad
Clean, compile, stage loadRemote
Clean, compile, stage load
Однако он вызывает задачи в файлах проекта gradle.Я поместил println
операторов в конкретные задачи проекта, и они не называются.
remoteLoad.gradle и load.gradle обращаются к одному и тому же коду проекта.В файлах gradle они импортируют различные файлы сборки ant для различий между сборками.Файловая структура для файлов Gradle выглядит следующим образом:
|--build.gradle
|--remoteLoad.gradle
|--load.gradle
UPDATE Добавьте файлы load.gradle и remoteLoad.gradle в папки Load
и RemoteLoad
соответственно.Однако при запуске gradle файлы gradle не могут найти файл build.xml, который я импортирую.Могу ли я добавить директиву path к команде ant.importBuild 'build.xml'
Я пробовал: ant.importBuild '../build.xml'
, но она не работает.