Перезаписать определение репозитория в подпроекте gradle - PullRequest
2 голосов
/ 24 мая 2019

Представьте, что у вас есть сборка gradle с подпроектом gradle. В этом подпроекте есть некоторый подключаемый скрипт-плагин, который определяет свои собственные репозитории, например:

buildscript {
    repositories {
        //jcenter()
        maven {
            url 'https://example.com/plugins.gradle.org/m2/'
        }
    }
    dependencies {
        classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'
    }
}

Теперь представьте, что вам принадлежит только основной проект, а не подпроект (это подмодуль git).

Как можно переопределить определения репозитория подпроекта из основного проекта?

PS: если вам нужно лучшее описание подпроекта, вот оно: https://github.com/docToolchain/docToolchain

Обновление: Я создал пример для игры с: https://github.com/rdmueller/SO56283254/blob/master/README.adoc

подробности см. В файле readme

Ответы [ 3 ]

2 голосов
/ 29 мая 2019

Как сказано в моем предыдущем комментарии, вы находитесь в той же ситуации, что и описанная в вопросе / запросе https://discuss.gradle.org/t/configure-buildscript-repositories-for-all-project-globally-in-init-gradle/6572/2,, который связан с открытой проблемой https://github.com/gradle/gradle/issues/1038.К сожалению, эта проблема еще не решена.

Я посмотрел глубже, и мне кажется невозможным сделать эту работу с текущей версией Gradle: нет способа "изменить" блок buildscript плагина скриптакаким-то образом вводя другие repositories, поэтому Gradle не сможет скомпилировать этот плагин скрипта перед его применением к подпроекту.

0 голосов
/ 29 мая 2019

Я считаю, что у меня есть решение для сценария, описанного в вопросе (но обратите внимание на предостережение ниже!).Вы можете поместить что-то вроде следующего в ваш settings.gradle файл корневого проекта:

gradle.allprojects { project ->
    if (project.path == ':subproject') {
        project.buildscript.repositories { repos ->
            all { repo ->
                // filtering by repo name here; you could certainly also use
                // the URL or other properties
                if (repo.name == 'maven') {
                    remove repo
                    // TODO replace with the repo you need here:
                    mavenCentral()
                }
            }
        }
    }
}

Как ответ M.Ricciuti говорит, предостережение в том, что этот выиграл 't работает для репозиториев buildscript в плагинах скриптов, таких как тот, который вы применяете для подпроекта вашего примера проекта GitHub (apply from: 'scripts/AsciiDocBasics.gradle').

0 голосов
/ 27 мая 2019

Я только что немного попробовал, хотя у меня нет проекта, в котором подпроекты содержали бы скрипт сборки:

// this lists buildscript repositories:  
getRootProject().getBuildscript().getRepositories().each { repo ->
    println "root: " + repo.getName().toString()
}

// this might list nothing:
subprojects.findAll { project ->
    project.buildscript.getRepositories().each { repo ->
        println "sub: " +  repo.getName().toString()
    }
}

Основная проблема может заключаться в том, что это настраивается сверхувниз;например.Передача аргумента командной строки, который применил бы альтернативный блок buildscript.gradle, могла бы работать, но изменение конфигурации корневого проекта в рамках подпроекта не будет.Может быть довольно необычно, что подпроекты имеют свой собственный блок buildscript (эти зависимости плагинов Gradle ведут себя не так, как обычные зависимости Java - обычно можно только решить, где их применять).

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