У нас есть два разных артефакта, которые будут опубликованы в двух разных репозиториях maven.
- " ProjectXMergedWar" должен быть опубликован в " MyMavenRepo1" (моментальные снимки)
- " ProjectXJarRelease" следует опубликовать в MyMavenRepo2 "(выпуск)
- "ProjectXMergedWar" никогда не должен публиковаться в "MyMavenRepo2" (выпуск)
- "ProjectXJarRelease" никогда не должен публиковаться в "MyMavenRepo1" (моментальные снимки).
Мы используем плагин maven-publish, где вы настраиваете набор публикаций и репозиториев. Затем плагин создает задачи для всех комбинаций публикаций и репозиториев (см. Список задач внизу). В настоящее время задачи publish
и publishRelease
делают то, что мы хотим, но есть задачи, которые нам не нужны.
Некоторые решения могут быть:
- Можем ли мы удалить ненужные задачи **?
- Можем ли мы настроить maven-publish для генерировать только две задачи публикации (требуемые задачи *)?
- Можно ли назвать правильные классы напрямую (
repo.publish(artifact)
или что-то в этом роде)?
Я посмотрел исходный код PublishToMavenRepository
. Кажется, что действие, которое я хочу достичь, находится в protected void doPublish
.
* Требуемые задачи:
- publishProjectXMergedWarPublicationToMyMavenRepo1Repository + generatePom
- publishProjectXJarReleasePublicationToMyMavenRepo2Repository + generatePom
* * Нежелательные задачи:
- publishProjectXMergedWarPublicationToMyMavenRepo2Repository
- publishProjectXJarReleasePublicationToMyMavenRepo1Repository
Gradle файл:
apply plugin: 'maven-publish'
publishing {
publications {
ProjectXMergedWar(MavenPublication) {
artifact mergeWar
artifactId = 'projectx'
}
ProjectXJarRelease(MavenPublication) {
artifact releaseJar
artifactId = 'projectx'
}
}
repositories {
maven {
name 'MyMavenRepo1'
url 'http://artifactory/url/our-snapshot-local'
credentials { (...) }
}
maven {
name 'MyMavenRepo2'
url 'http://artifactory/url/our-release-local'
credentials { (...) }
}
}
}
task publish(dependsOn: [
'generatePomFileForProjectXMergedWarPublication',
'publishProjectXMergedWarPublicationToMyMavenRepo1Repository'
], overwrite: true) {
// We override the normal publish which would have tried to publish all combinations of defined
// publications and repositories:
// - publishProjectXMergedWarPublicationToMyMavenRepo1Repository (we use this in normal snapshot publish)
// - publishProjectXMergedWarPublicationToMyMavenRepo2Repository (not to be used)
// - publishProjectXJarReleasePublicationToMyMavenRepo1Repository (not to be used)
// - publishProjectXJarReleasePublicationToMyMavenRepo2Repository (we use this one in publishRelease)
}
task publishRelease(dependsOn: [
'generatePomFileForProjectXJarReleasePublication',
'publishProjectXJarReleasePublicationToMyMavenRepo2Repository'
])
Выход из задач:
$ ./gradlew tasks
(...)
Publishing tasks
----------------
generatePomFileForProjectXJarReleasePublication - Generates the Maven POM file for publication 'ProjectXJarRelease'.
generatePomFileForProjectXMergedWarPublication - Generates the Maven POM file for publication 'ProjectXMergedWar'.
publishProjectXJarReleasePublicationToMavenLocal - Publishes Maven publication 'ProjectXJarRelease' to the local Maven repository.
publishProjectXJarReleasePublicationToMyMavenRepo1Repository - Publishes Maven publication 'ProjectXJarRelease' to Maven repository 'MyMavenRepo1'.
publishProjectXJarReleasePublicationToMyMavenRepo2Repository - Publishes Maven publication 'ProjectXJarRelease' to Maven repository 'MyMavenRepo2'.
publishProjectXMergedWarPublicationToMavenLocal - Publishes Maven publication 'ProjectXMergedWar' to the local Maven repository.
publishProjectXMergedWarPublicationToMyMavenRepo1Repository - Publishes Maven publication 'ProjectXMergedWar' to Maven repository 'MyMavenRepo1'.
publishProjectXMergedWarPublicationToMyMavenRepo2Repository - Publishes Maven publication 'ProjectXMergedWar' to Maven repository 'MyMavenRepo2'.
publishToMavenLocal - Publishes all Maven publications produced by this project to the local Maven cache.
(...)
Other tasks
-----------
(...)
publish
publishRelease
(...)