Предположим, что я создал пользовательский плагин Gradle, который доступен по адресу https://repo.example.com/xyz
и применяется следующим образом:
// build.gradle.kts
buildscript {
repositories {
jcenter()
maven("https://repo.example.com/xyz")
}
dependencies {
classpath("com.example:xyz-gradle-plugin:1.2.3")
}
}
apply(plugin = "com.example.xyz")
Теперь рассмотрим, что мне нужно, чтобы мой плагин зависел от сторонней библиотеки(org.something:abc:4.5.6
), который доступен только из другого пользовательского репозитория Maven (скажем, https://repo.something.org/abc
).Я генерирую pom.xml
моего плагина соответственно:
<dependencies>
<dependency>
<groupId>org.something</groupId>
<artifactId>abc</artifactId>
<version>4.5.6</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>xyz</id>
<url>https://repo.example.com/xyz/</url>
</repository>
<repository>
<id>abc</id>
<url>https://repo.something.org/abc/</url>
</repository>
</repositories>
Теперь, когда я перестраиваю и повторно публикую плагин, клиентский код, который его использует, не может быть собран, потому что библиотека org.something:abc:4.5.6
Плагин зависит от не может быть найден.По-видимому, pom.xml
плагина получает неверную интерпретацию: информация о зависимостях извлекается из него, а раздел <repositories/>
игнорируется.
Единственный обходной путь - явное добавление maven("https://repo.something.org/abc")
к разделу buildscript
каждого проекта, использующего мой плагин, к которому я бы не стал принуждать своих пользователей.
Существуют ли альтернативные решения?
Обновление: об этом сообщалось Gradle команда как номер # 8811 .