Gradle - 插件maven-publish:如何仅将特定发布发布到存储库 [英] Gradle - plugin maven-publish: How to publish only specific publication to a repository
问题描述
- ProjectXMergedWar 我们有两个不同的工件将发布到两个不同的Maven仓库。 >应该发布到 MyMavenRepo1 (快照) 不得将ProjectXMergedWar发布为MyMavenRepo2(发行版)
- ProjectXJarRelease永远不会发布到MyMavenRepo1(快照)
我们使用插件 maven-publish ,您可以在其中配置一组出版物和回购协议。然后该插件为所有发布和存储库组合生成任务(请参阅底部的任务列表)。目前,任务 publish
和 publishRelease
正在做我们想做的事,但有些任务是我们不想要的。 p>
有些解决方案可能是:
repo.publish(artifact)
或类似的东西)?
我查看了 PublishToMavenRepository
的源代码。看起来我想要执行的操作位于 protected void doPublish
中。
* 通缉任务: * *不需要的任务: Gradle文件: 任务输出: We have two different artifacts that is going to be published to two different maven repositories. We use the plugin maven-publish where you configure a set of publications and reposistories. The plugin then generates tasks for all combinations of publications and repositories (see tasks list at the bottom). Currently the tasks Some solutions might be: I have looked at the source code of *Wanted tasks: **Unwanted tasks: Gradle file: Output from tasks:
You could disable and hide the "invalid" tasks like so:
这篇关于Gradle - 插件maven-publish:如何仅将特定发布发布到存储库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
$ b
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'
凭证{(...)}
}
maven {
name'MyMavenRepo2'
url'http:// artifactory / url / our-release-local'
凭证{(...)}
}
}
}
任务发布(dependsOn:[
'generatePomFileForProjectXMergedWarPublication',
'publishProjectXMergedWarPublicationToMyMavenRepo1Repository'
],overwrite:true){
//我们重写正常发布,试图发布定义的
//出版物和存储库的所有组合:
/ / - publishProjectXMergedWarPublicationToMyMavenRepo1Repository(我们在普通快照发布中使用它)
// - publishProjectXMergedWarPublicationToMyMavenRepo2Repository(不会被使用)
// - publishProjectXJarReleasePublicationToMyMavenRepo1Repository(不被使用)
// - publishProjectXJarReleasePublicationToMyMavenRepo2Repository(我们在publishRelease中使用这一个)
}
任务publishRelease(dependsOn:[
'generatePomFileForProjectXJarReleasePublication',
'publishProjectXJarReleasePublicationToMyMavenRepo2Repository'
])
$ ./gradlew任务
(...)
发布任务
----------------
generatePomFileForProjectXJarReleasePublication - 为出版物ProjectXJarRelease生成Maven POM文件。
generatePomFileForProjectXMergedWarPublication - 为出版物ProjectXMergedWar生成Maven POM文件。
publishProjectXJarReleasePublicationToMavenLocal - 将Maven出版物ProjectXJarRelease发布到本地Maven存储库。
publishProjectXJarReleasePublicationToMyMavenRepo1Repository - 将Maven发布'ProjectXJarRelease'发布到Maven仓库'MyMavenRepo1'。
publishProjectXJarReleasePublicationToMyMavenRepo2Repository - 将Maven发布'ProjectXJarRelease'发布到Maven仓库'MyMavenRepo2'。
publishProjectXMergedWarPublicationToMavenLocal - 将Maven发布ProjectXMergedWar发布到本地Maven存储库。
publishProjectXMergedWarPublicationToMyMavenRepo1Repository - 将Maven发布'ProjectXMergedWar'发布到Maven仓库'MyMavenRepo1'。
publishProjectXMergedWarPublicationToMyMavenRepo2Repository - 将Maven发布'ProjectXMergedWar'发布到Maven仓库'MyMavenRepo2'。
publishToMavenLocal - 将此项目生成的所有Maven出版物发布到本地Maven缓存。
(...)
其他任务
-----------
(...)
发布
publishRelease
(...)
发布{
版本库{
maven {
名称'Dev'
url'http:// dev /'
credentials { b $ b用户名'用户名'
密码'密码'
}
}
maven {
name'Prod'
url'http :// prod /'
凭证{
用户名'用户名'
密码'密码'
}
}
}
publications {
//这只会在Dev
上启用MyDevJar(MavenPublication){
artifactIdtest
version1.0
groupIdorg.example
工件文件('abc')
ext.repo ='Dev'
}
//这只会在prod
上启用MyJar(MavenPublication){
artifactIdtest
版本1.0
groupIdorg.example
工件文件('abc')
ext.repo ='Prod'
}
}
}
afterEvaluate {
tasks.withType(PublishToMavenRepository){task - >
if(task.publication.hasProperty('repo')&& task_publication.repo!= task.repository.name){
task.enabled = false
task.group = null
}
}
}
publish
and publishRelease
is doing what we want, but there are tasks we don't want.
repo.publish(artifact)
or something like that)?PublishToMavenRepository
. It seems like the action I want to achive is located in protected void doPublish
.
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
(...)
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
name 'Dev'
url 'http://dev/'
credentials {
username 'username'
password 'password'
}
}
maven {
name 'Prod'
url 'http://prod/'
credentials {
username 'username'
password 'password'
}
}
}
publications {
// This will only be enabled on Dev
MyDevJar(MavenPublication) {
artifactId "test"
version "1.0"
groupId "org.example"
artifact file('abc')
ext.repo = 'Dev'
}
// This will only be enabled on prod
MyJar(MavenPublication) {
artifactId "test"
version "1.0"
groupId "org.example"
artifact file('abc')
ext.repo = 'Prod'
}
}
}
afterEvaluate {
tasks.withType(PublishToMavenRepository) { task ->
if (task.publication.hasProperty('repo') && task.publication.repo != task.repository.name) {
task.enabled = false
task.group = null
}
}
}