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

#gradle #build.gradle #release

#gradle #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()
}```
  

Комментарии:

1. И? В чем ваш вопрос?

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

3. И как вы предоставляете свойство проекту? Расскажите точно, что вы делаете.

4. ./gradlew -PisRelease Release вот так

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

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

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

Комментарии:

1. Есть ли какой-либо другой способ, с помощью которого мне не нужно передавать его как свойство?

2. Да, но это просто предположение, которое вы хотите, например, проверить, имеет ли ваша версия этот литерал ‘Release’ … это правильно? Я могу обновить свой ответ, если вы подтвердите это

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

4. Зачем это делать? Не лучше ли просто выяснить это с помощью свойства version? Выполнение подхода isRelease может быть двойной проблемой maitaining. Что, если пользователь забудет изменить версию МОМЕНТАЛЬНОГО СНИМКА, но активирует флаг isRelease или другим способом, помещает версии выпуска, но забывает установить флаг isRelease в true. Я просто проверю свойство version и активирую репозитории с помощью этого. Что вы думаете?

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