Я знаю, что репозитории 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>.
Я подумал, что, если я смогу создать свою собственную запись, я могу добавить в нее проверку, включать ли репозиторий или нет.
Спасибо!


Я не думаю, что вы действительно можете добавить новую запись, такую как 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()
}
Правильно, извините, я пропустил эту часть вашего вопроса. Я отредактировал свой ответ, чтобы показать, как можно условно добавить репозиторий (названный some other name в моем примере кода).
О, прекрасно. Спасибо.
Спасибо за идею. Похоже, это сработает. Есть ли способ сделать это условным? Поэтому добавляйте это только в том случае, если свойство указано в командной строке.