Опубликовать снимок против публикации публикации в Gradle с непрерывной интеграцией
Я просто изучаю Gradle, исходя из обоих флагов Ant + Ivy и Maven, и я пытаюсь обернуть голову подходящим способом публикации версии моего программного обеспечения с помощью gradle. Мне также необходимо постоянно интегрировать мои проекты, не постоянно выпуская независимые артефакты.
Ant + Ivy
В мире Ant + Ivy я могу создавать объекты publishSnapshot и publishRelease. Они могут использовать разные распознаватели Ivy для разрешения и публикации в моем отдельном снимке или релизе репозиториев в Nexus.
Maven
С Maven я могу определить snapshotRepository
или repository
в моем разделе distributionManagement
, чтобы maven публиковал мой отдельный снимок или релиз репозиториев в Nexus.
Gradle
Теперь введите gradle. Как я могу достичь такой же функциональности? Я использую репозитории стиля плюща.
Спасибо за любые идеи, которые вы можете предоставить.
ANSWER
Спасибо René ниже, я наконец смог создать работоспособное решение. Суть дела состояла в том, что мне нужно было постоянно интегрироваться во все мои проекты. Для этого я подумал, что объявление зависимости, использующей номер версии latest.integration
, было единственным способом получить последнюю версию моих библиотек, и поэтому мне нужно было использовать репозитории стиля плюща.
На самом деле есть другие способы использовать последнюю версию библиотек для непрерывной интеграции моего программного обеспечения во все проекты. Решение состоит в том, чтобы использовать uploadArchives
точно так же, как указано в списке René (также обратите внимание, что вам нужно будет apply plugin: 'maven'
), чтобы это работало. Убедитесь, что ваши репозитории также являются maven-стилем, а при объявлении зависимости вы можете использовать динамическую версию цифры, как показано здесь. В моем случае я перечислил глобальный номер версии в моем общем .gradle и в нисходящих проектах, я использовал version: version
для ссылки на глобальную переменную версии Таким образом, каждый артефакт в моей системе имеет одну и ту же версию. Когда придет время для выпуска, я могу изменить это значение с 1.0-SNAPSHOT на 1.0 и построить каждый по порядку.
Ответы
Ответ 1
Вы можете настроить моментальный снимок и репозиторий выпуска в задаче "Загрузить" (например, uploadArchives
):
uploadArchives {
repositories {
mavenDeployer {
repository(url: 'http://myCompanyRepo.com:8081/releases') {
authentication(userName: 'admin', password: 'password');
}
snapshotRepository(url: 'http://myCompanyRepo.com:8081/snapshots') {
authentication(userName: 'admin', password: 'password');
}
}
}
}
Для *-SNAPSHOT
версий используется snapshotRepository
. В противном случае используется репозиторий релизов.
Ответ 2
Если вы хотите использовать новый плагин maven-publish
, вы можете загрузить его в разные хранилища с помощью инструкции if
:
apply plugin: 'maven-publish'
...
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
maven {
credentials {
username "anonymous"
}
if(project.version.endsWith('-SNAPSHOT')) {
url "http://example/artifactory/libs-snapshot-local"
} else {
url "http://example/artifactory/libs-release-local"
}
}
}
}
Ссылка: maven-publish и установка snapshotRepository и releaseRepository