Определение моего собственного репозитория maven в скрипте сборки Android Gradle

Я знаю, что репозитории Maven можно добавить, как правило, с помощью чего-то похожего на следующий фрагмент.

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()
    }
}

Однако на самом деле я хотел бы создать свою собственную запись в репозитории Maven. Итак, добавив к приведенному выше примеру, это может выглядеть примерно так.

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()
        myNewRepo()
    }
}

Обратите внимание, что «myNewRepo» - это новый репозиторий, который был добавлен внизу. Если я просто добавлю строку, как показано выше, я получу следующую ошибку от gradle.

Could not find method myRepo() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.

Причина, по которой я это делаю, заключается в том, что у меня есть список из нескольких моих собственных репозиториев Maven, и становится обременительным иметь каждую из этих записей для всех моих приложений. Например, моя текущая реализация выглядит так.

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()
        maven {
            url: "some url"
            name: "some name"
        }
        maven {
            url: "some url"
            name: "some name"
        }
        maven {
            url: "some url"
            name: "some name"
        }
        maven {
            url: "some url"
            name: "some name"
        }
        maven {
            url: "some url"
            name: "some name"
        }
    }
}

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

Другой моей мотивацией для этого является то, что я хотел бы иметь возможность добавить некоторые из этих репозиториев maven условно на основе некоторого свойства ввода, предоставленного для gradle, например.

gradle -Puse_repo=true <task>.

Я подумал, что, если я смогу создать свою собственную запись, я могу добавить в нее проверку, включать ли репозиторий или нет.

Спасибо!

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. Мы...
2
0
430
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я не думаю, что вы действительно можете добавить новую запись, такую ​​как jcenter(), поскольку эти записи по сути являются просто методами встроенного интерфейса RepositoryHandler.

Однако, если вы просто пытаетесь переместить свои собственные конфигурации репозитория в отдельный метод / закрытие, вы можете выбрать один из следующих вариантов:

def myNewRepos = {
    maven {
        url = "some url"
        name = "some name"
    }
    if (project.hasProperty('use_repo')
          && project.property('use_repo') == 'true') {
        maven {
            url = "some other url"
            name = "some other name"
        }
    }
    // ... any others ...
}

/* OPTION 1: */
repositories {
    mavenLocal()
    // ... any others ...
}
repositories myNewRepos

/* OPTION 2: */
repositories {
    mavenLocal()
    // ... any others ...

    myNewRepos.delegate = owner
    myNewRepos()
}

Спасибо за идею. Похоже, это сработает. Есть ли способ сделать это условным? Поэтому добавляйте это только в том случае, если свойство указано в командной строке.

Jon 23.12.2018 22:37

Правильно, извините, я пропустил эту часть вашего вопроса. Я отредактировал свой ответ, чтобы показать, как можно условно добавить репозиторий (названный some other name в моем примере кода).

Chriki 23.12.2018 22:50

О, прекрасно. Спасибо.

Jon 23.12.2018 22:54

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