我有一个多项目 gradle 构建,我已经应用了 maven-publish
所有人的插件subprojects
在我的主构建文件中。
我还在那里定义了一个名为 mavenJava
的默认发布。 .
这一切都很好,现在当我运行 ./gradlew artifactoryPublish
我从所有子项目中部署工件。
但是,我想将我的两个子项目排除在发布此 mavenJava
之外。出版物。
我尝试了很多方法,例如在 skipDefaultPublish
中定义 bool 值 ( ext
)阻止 subprojects
在我的主构建文件中阻止并在条件 if block 中包含发布定义并在 ext
中覆盖此变量我不想发布它的子项目 block 。这不起作用,gradle 提示它 Cannot configure the 'publishing' extension after it has been accessed.
.
我尝试了其他的东西,但似乎没有任何效果。
我知道唯一可行的是在所有子项目中定义默认发布 block ,除了我不想发布的那些,但我有大约 20 个子项目,但只有两个不应该发布这种类型的工件,所以这不会这似乎不是最好的选择。
那么有什么方法可以配置所有子项目以发布工件但仅在两个子项目中覆盖它,以便他们不这样做?
更新
试图澄清我的项目是什么样的。
根构建.gradle
subprojects {
apply plugin: 'maven-publish'
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
artifactId = getCustomProjectId()
groupId = 'com.our.group.id'
}
}
}
apply plugin: "com.jfrog.artifactory"
artifactory {
contextUrl = ourContextUrl
publish {
repository {
repoKey = "ourRepoKey"
username = "ourArtifactoryUser"
password = "ourArtifactoryPass"
}
defaults {
publications('mavenJava')
publishArtifacts = true
publishPom = true
}
}
}
}
在一个应该发布工件的子项目中,而不是默认的:
project(':exsub'){
publishing {
publications {
mavenSrc(MavenPublication) {
groupId "com.our.group.id"
artifactId "stuff-src"
artifact srcStuff
}
}
}
artifactoryPublish {
// publications.removeAll() //<- putting this here doesn't work
// publications.remove('mavenJava') //<- neither does this
publications ('mavenSrc') //<- this adds mavenSrc to the publication list but does not remove the mavenJava publication from it
}
}
最佳答案
根据使用的插件,有多种发布工件的方法。
排除特定模块与现代 (Gradle 4.x-7.x) 一起发布 publish
像任务:
tasks.withType(PublishToMavenRepository).configureEach { it.enabled = false }
旧版 uploadArchives
:uploadArchives.enabled = false
与 com.jfrog.artifactory
插入:artifactoryPublish.skip = true
关于gradle - 从 gradle 中的发布中排除一两个子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55579031/