Я настраиваю новый проект gradle и хочу написать условие в build.gradle, чтобы он загружал зависимость от определенного артефакта, если это условие удовлетворяет.
Я использую project.hasProperty("property")
, и мой блок репозиториев выглядит следующим образом.
mavenCentral()
if (project.hasProperty("isRelease")){
println("Inside gradle")
maven { url 'release url' }
} else {
println("Inside snapshot")
maven { url 'snapshot url' }
}
mavenLocal()
}```
Он не работает, так как никогда не находит свойство. Не могли бы вы рассказать мне, как мне этого добиться?
А как вы предоставляете собственность проекту? Расскажите точно, что вы делаете.
./gradlew -PisRelease Release
вот так
Опубликуйте полный минимальный пример, воспроизводящий ошибку. Я пробовал это так, но, вероятно, сделал неверные предположения на основе того, что вы опубликовали.
Просто передайте это так:
-PisRelease=Release
Я пробовал в этом коде:
repositories {
if (project.isRelease == "Release"){
println("I'm in")
}
mavenLocal()
}
и работал исправно.
ОБНОВИТЬ с решением говорил в комментарии о прямой проверке свойства версии. Я поместил версию в build.gradle, но работает и с версией в gradle.properties.
build.gradle
version = "1.0.0-SNAPSHOT"
repositories {
if (isRelease()){
maven { url 'release url' }
} else {
maven { url 'snapshot url' }
}
mavenLocal()
}
def isRelease() {
if (project.version.contains("SNAPSHOT")){
println("Is a SNAPSHOT")
} else if (!project.version.contains("SNAPSHOT") || project.version.contains("RC")){
println("Is Release")
}
}
Конечно, вы можете изменить логику isRelease
на ту, которая вам нужна. Это просто пример.
Надеюсь, поможет
Есть ли другой способ, которым мне не нужно передавать его как собственность?
Да, но это просто предположение, что вы хотите проверить, есть ли в вашей версии этот литерал «Release» ... это правильно? Я могу обновить свой ответ, если вы подтвердите это
isRelease — это переменная, отправляемая конечным пользователем через jenkinsfile, чтобы сообщить jenkins, является ли это сборкой выпуска, и если это сборка выпуска, она не должна загружать зависимости из URL-адреса моментального снимка gradle. Пожалуйста, дайте мне знать, как я могу этого достичь?
Зачем это делать? Не лучше ли просто выяснить это с помощью свойства версии? Выполнение подхода isRelease может быть проблемой двойной поддержки. Что делать, если пользователь забывает изменить версию SNAPSHOT, но активирует флаг isRelease или наоборот, ставит версии выпуска, но забывает установить флаг isRelease в true. Я просто проверю свойство версии и активирую этим репозитории. Как вы думаете?
Я обновил решение, проверьте ОБНОВЛЕНИЕ и дайте мне знать, если оно работает для вас.
Мне помогло предыдущее решение. Спасибо за обновления. @dcalap
А также? Какой у Вас вопрос?