Gradle Composite Build дождитесь завершения includeBuildJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Gradle Composite Build дождитесь завершения includeBuild

Сообщение Anonymous »

Версия Gradle: 7.6.4
EDIT: После создания небольшого примера проекта, воспроизводящего это поведение, кажется, что проблема связана с AttributeCompatibilityRule< /код>. Поскольку мы рассматриваем "jar"=="edited-jar", кажется, что Gradle переходит непосредственно к задаче jar и ее артефакту и не заботится о создании отредактированного jar. После удаления правила задача editJar правильно входит в граф выполнения, однако теперь ее невозможно скомпилировать, поскольку не все библиотеки генерируют варианты EditJar. Это намеренное поведение? Я ожидаю, что gradle проверит все варианты и отдаст приоритет запрошенному варианту и только если он не существует, откатится к совместимому варианту.
Я иметь составную сборку Gradle, используя includeBuild в файле settings.gradle.

Код: Выделить всё

#settings.gradle
rootProject.name = mainProj

includedBuild('library')
Я собираю только Gradle на mainProj, и кажется, что он правильно собирает библиотеку сначала, а затем продолжается для сборки mainProj. Кажется, это работает нормально.
Однако у меня есть сценарий, в котором результирующий артефакт библиотеки должен быть отредактирован в случае сборки выпуска (которую я запускаю с помощью свойства gradle -PreleaseBuild=true build). В библиотеке у меня есть следующая задача:

Код: Выделить всё

#library

task editJar {
dependsOn jar
onlyIf {project.hasProperty('releaseBuild')}
outputs.file file(jar.archiveFile)
doLast {
// open jar, do stuff, save it
}
}
compileJava.finalizedBy editJar
В этом случае при сборке mainProj происходит сбой, поскольку он пытается построить его, пока задача editJar все еще выполняется (и, следовательно, jar недоступен как зависимость).
Я следовал управлению зависимостями с учетом вариантов gradle и правильно создал собственную конфигурацию

Код: Выделить всё

#library

configurations {
editableJar {
extendsFrom apiElements, runtimeElements
canBeConsumed = true
attributes {
//...
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, 'edited-jar'))
}
}
}

artifacts {
editableJar(editJar.outputs.files.singleFile) {
builtBy(editJar)
}
}
и правильно установили атрибутSchema с помощью правила:

Код: Выделить всё

#mainProj
abstract class EditedJarsRule implements AttributeCompatibilityRule {

@Override
void execute(CompatibilityCheckDetails details) {
if (details.consumerValue.name == 'edited-jar' && details.producerValue.name == 'jar') {
details.compatible()
}
}
}

dependencies {
attributesSchema {
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE) {
compatibilityRules.add(EditedJarsRule)
}
}
implementation 'org.libs:library'
}
и добавили требования к атрибутам в конфигурации

Код: Выделить всё

# mainProj
if(project.hasProperty('releaseBuild')) {
compileClasspath {
attributes {
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, 'edited-jar'))
}
}
runtimeClasspath {
attributes {
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, 'edited-jar'))
}
}
}
В этом случае кажется, что моя сборка mainProj не ждет, пока библиотека:editJar > задача завершена, хотя вариант запрошен правильно (я проверил информацию о зависимостях).
Я ожидаю, что это будет правильно поддерживаться даже в составных сборках, потому что Я просто полагаюсь на конфигурации и атрибуты, которые правильно решаются с помощью gradle в графе задач, не говоря уже о том, что порядок задач работает нормально, когда нет в релизной сборке (т. е. gradle поддерживает упорядочивание во включенных сборках).

Подробнее здесь: https://stackoverflow.com/questions/792 ... -to-finish
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»