【发布时间】:2014-01-29 13:59:23
【问题描述】:
我们有两个不同的工件将发布到两个不同的 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
(...)
【问题讨论】:
标签: gradle maven-plugin