我有一个多项目的gradle构建,我已经将maven-publish
插件应用于我的主构建文件中的所有subprojects
。
我还在那里定义了一个默认发布,名为mavenJava
。
这一切都很好,现在当我运行./gradlew artifactoryPublish
时,我部署了来自所有子项目的工件。
但是,我希望将我的两个子项目排除在mavenJava
出版物之外。
我尝试了很多方法,比如在主构建文件的subprojects
块中的ext
块中定义一个boolean(skipDefaultPublish
),在条件if块中包含发布定义,并在我不想发布的子项目的ext
块中覆盖这个变量。这不起作用,gradle抱怨它是Cannot configure the 'publishing' extension after it has been accessed.
。
我试过其他方法,但似乎都不起作用。
我知道唯一可行的方法是在所有子项目中定义默认的发布块,除了我不想发布的子项目,但是我有大约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
}
}
5条答案
按热度按时间uhry853o1#
根据所使用的插件,有几种方法可以发布工件。
要从发布现代(Gradle 4.x-7.x)
publish
类任务中排除特定模块,请执行以下操作:旧版
uploadArchives
:使用
com.jfrog.artifactory
插件:Kotlin语法(tnx**@jaguililla**):
kxe2p93d2#
Pheww...我想我终于想出了一种方法来做到这一点(解决方案的美学是相当值得商榷的)。
对我来说,在子项目中放入一个
publishing.publications.remove(publishing.publications.mavenJava)
行就足够了。但是,我必须注意将该行放在子项目中
publishing{...}
块的下面。所以现在,不应该发布“默认发布”的子项目看起来像这样:
6kkfgxo03#
在要排除的子项目上设置以下内容对我很有效:
这仍然需要将
maven-pulish
插件应用到项目中,但不需要额外的配置。我在这里找到了这个设置:https://discuss.gradle.org/t/disable-maven-publish-related-tasks-not-possible/13488
zf9nrax14#
让我们考虑以下多模块项目结构。
在上面的多模块项目中,如果我想排除照片服务子模块构建jar(任何分布式文件(jar/war))的功能,使其无法上传到配置的工件,那么我们必须在照片服务的
build.gradle
文件中使用以下代码片段build.gradle
pxyaymoc5#
这个问题特别是关于当一些常规配置为所有子项目引入一个发布时该怎么做,但是在一个特定的项目中,您想要删除该“默认”发布,但仍然有另一个发布。大多数答案都没有解决这个问题。
The answer by the original questioner有,但它对我不起作用。
这样做:
(其中
mavenJava
是要阻止的“默认”发布的名称)。Gradle文档在这里建议了这种解决方案:https://docs.gradle.org/current/userguide/publishing_customization.html#sec:publishing_maven:conditional_publishing