Gradle: Как мне переопределить переменную в подпроекте? - PullRequest
0 голосов
/ 21 ноября 2019

Я определяю использование строки, которая содержит переменную в корневом проекте build.gradle, и я хотел бы определить значение этой переменной по-разному в build.gradle s различных подпроектов.

Rootbuild.gradle:

ext {
    diet4jActivationClass = 'xxx'
}
subprojects {
    ...
    publishing {
        publications {
            maven(MavenPublication) {
                from(components.java)

                pom {
                    properties = [
                        'diet4j.activationclass': "${diet4jActivationClass}"
                    ]
                }
            }
        }
    }
}

Подпроект build.gradle:

ext {
    diet4jActivationClass = 'yyy'
}

Свойство POM всегда генерируется со значением xxx и никогда не с yyy. Как мне это сделать?

1 Ответ

1 голос
/ 21 ноября 2019

По умолчанию корневой проект будет оцениваться до того, как станет дочерним. Таким образом, блок subprojects {...} в корневом проекте будет оцениваться до оценки дочерних файлов build.gradle. Таким образом, во время оценки блока subprojects {...} свойство не переопределяется.

Вы можете вызвать evaluationDependsOnChildren() в корневом проекте, чтобы перевернуть порядок, но я не рекомендую этого, так как это может вызвать другие проблемы.

Возможно, вы могли бы использовать закрытие, чтобы отложить оценкусвойства?

Другой вариант - объявить свойства в корневом build.gradle, а не в подпроекте build.gradle.

Например:

project(':xxx') {
   ext {
       diet4jActivationClass = 'xxx'
   }
}
project(':yyy') {
   ext {
       diet4jActivationClass = 'yyy'
   }
} 
subprojects {...}

Илиеще один вариант - использовать afterEvaluate {...} замыкание (я действительно ненавижу этот подход, но иногда это единственный способ)

subprojects {
   afterEvaluate {...} 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...