Необходимо написать условие в build.gradle , если оно удовлетворяет, оно должно загружать зависимости от определенного артефакта

Я настраиваю новый проект 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()
}```

А также? Какой у Вас вопрос?

JB Nizet 09.04.2019 08:28

Он не работает, так как никогда не находит свойство. Не могли бы вы рассказать мне, как мне этого добиться?

Sandeep 09.04.2019 08:37

А как вы предоставляете собственность проекту? Расскажите точно, что вы делаете.

JB Nizet 09.04.2019 08:52
./gradlew -PisRelease Release вот так
Sandeep 09.04.2019 09:58

Опубликуйте полный минимальный пример, воспроизводящий ошибку. Я пробовал это так, но, вероятно, сделал неверные предположения на основе того, что вы опубликовали.

JB Nizet 09.04.2019 10:11
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
1
5
552
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто передайте это так:

-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 на ту, которая вам нужна. Это просто пример.

Надеюсь, поможет

Есть ли другой способ, которым мне не нужно передавать его как собственность?

Sandeep 09.04.2019 14:50

Да, но это просто предположение, что вы хотите проверить, есть ли в вашей версии этот литерал «Release» ... это правильно? Я могу обновить свой ответ, если вы подтвердите это

dcalap 09.04.2019 16:05

isRelease — это переменная, отправляемая конечным пользователем через jenkinsfile, чтобы сообщить jenkins, является ли это сборкой выпуска, и если это сборка выпуска, она не должна загружать зависимости из URL-адреса моментального снимка gradle. Пожалуйста, дайте мне знать, как я могу этого достичь?

Sandeep 10.04.2019 08:06

Зачем это делать? Не лучше ли просто выяснить это с помощью свойства версии? Выполнение подхода isRelease может быть проблемой двойной поддержки. Что делать, если пользователь забывает изменить версию SNAPSHOT, но активирует флаг isRelease или наоборот, ставит версии выпуска, но забывает установить флаг isRelease в true. Я просто проверю свойство версии и активирую этим репозитории. Как вы думаете?

dcalap 10.04.2019 09:26

Я обновил решение, проверьте ОБНОВЛЕНИЕ и дайте мне знать, если оно работает для вас.

dcalap 10.04.2019 11:05

Мне помогло предыдущее решение. Спасибо за обновления. @dcalap

Sandeep 30.09.2019 12:10

Другие вопросы по теме