В моем проекте есть два модуля, lib
и lib-api
, со следующими обязанностями
- lib-api - чистый java-модуль, содержащий только файлы интерфейса.
- lib - библиотека для Android.
и я хотел бы, чтобы jenkins опубликовал оба модуля (как банки) на внутреннем сервере артефактов, чтобы другие проекты могли их использовать.
Используя плагин Jenkins Artifactory, я смог опубликовать jar-файлы для обоих модулей в artifactory, но мой другой проект, который зависит от lib
, не может быть построен со следующей ошибкой gradle
Не удалось найти com.mygroup: lib-api: 1.0.0-SNAPSHOT
Моя установка
Скрипты сборки
lib-api / build.gradle
apply plugin: 'java'
apply plugin: 'maven-publish'
group = 'com.mygroup'
version = project.version
publishing {
publications {
api(MavenPublication) {
from components.java
}
}
}
lib / build.gradle
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
android { ... }
dependencies {
compile project(':lib-api')
}
group = 'com.mygroup'
version = project.version
Конфигурация плагина Jenkins Artifactory
- Gradle-Artifactory Integration
- Publish artifacts to Artifactory
- Publish Maven descriptors
- Используйте шаблоны, совместимые с Maven
- Publish artifacts to Artifactory
- Invoke Gradle script
- Use Gradle Wrapper
- Задачи:
clean assemble -x preDexDebug -x preDexDAT -x preDexRelease
Результат в Artifactory репо
+-- libs-snapshot-local
| +-- com
| | +-- mygroup
| | | +-- lib
| | | | +-- 1.0.0-SNAPSHOT
| | | | | `-- lib-1.0.0-20150508-1.jar
| | | | | `-- lib-1.0.0-20150508-1.pom
| | | | | `-- maven-metadata.xml
| | | | `-- maven-metadata.xml
| | | +-- lib-api
| | | | +-- 1.0.0-SNAPSHOT
| | | | | `-- lib-1.0.0-20150508-1.jar
Вопрос
Насколько я понимаю, artifactory / gradle должен быть достаточно умен, чтобы разрешить -SNAPSHOT
в последний моментальный снимок с отметкой времени, и это, кажется, подтверждается тем фактом, что ему удается разрешить lib
независимо от того, указываю ли я latest.integration
или 1.0.0-SNAPSHOT
Как я могу получить Gradle для разрешения этой транзитивной зависимости моментального снимка от artifactory? Или заставить плагин artifactory опубликовать банку таким образом, чтобы градиент мог ее разрешить?
Рабочая теория
Я заметил, что в папке lib-api
нет файла maven-metadata.xml, а в папке с версией моментального снимка нет ни одного ... ни файла pom. Я подозреваю, что проблема в этом.
Плагин Jenkins от Artifactory использует под капотом плагин artifactory gradle для заданий, для которых включена интеграция Gradle-Artifactory. Согласно документации подключаемого модуля gradle artifactory, идентификатор подключаемого модуля изменяется в зависимости от используете ли вы новый (maven-publish) или старый (maven) механизм публикации.
Может ли это быть проблемой? Плагин Artifactory применяет неправильный идентификатор плагина, возможно, потому, что он принимает решение на основе модуля библиотеки Android?