我们有两种不同的工件将发布到两个不同的Maven存储库。Gradle - 插件maven-publish:如何仅将特定发布发布到存储库
- “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
摇篮文件:从任务
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
(...)
克努特,你的回答似乎不错,但由于某种原因,它不是为我工作了,我已经添加了一个新的职位和我的解决方案,如果你可以看看。 – Lifely