使用 Maven 发布插件从 pom 中排除依赖项?
Exclude dependency from pom using Maven Publish Plugin?
我使用以下插件:
id 'maven-publish'
id "com.github.johnrengelman.shadow" version "7.0.0"
我的依赖项:
dependencies {
shadow gradleApi()
shadow localGroovy()
implementation 'com.example:lib:0.1.0'
我的发布区块:
publishing {
publications {
pluginJar(MavenPublication) { publication ->
from project.shadow.component(publication)
artifact sourceJar
}
}
}
当我执行 运行 publishToMavenLocal
任务时,我可以看到结果 pom.xml
包含我不想要的依赖项。
假设是:
<dependency>
<groupId>com.example</groupId>
<artifactId>lib</artifactId>
<version>0.1.0</version>
<scope>runtime</scope>
</dependency>
如何配置 publications
块以从 pom.xml
(和模块)文件中摆脱这种依赖?
pom.xml
中的依赖项来自 apiElements
(compile
范围)和 runtimeElements
(runtime
范围)配置。您可以从此配置中删除要从 pom.xml
中排除的依赖项。
示例(我将使用 Kotlin DSL,因为我不熟悉 Groovy):
setOf("apiElements", "runtimeElements")
.flatMap { configName -> configurations[configName].hierarchy }
.forEach { configuration ->
configuration.dependencies.removeIf { dependency ->
dependency.name == "lib"
}
}
from(components["java"])
将此代码转换为 Groovy 并将其粘贴到您的 publication
闭包中。
我发现由于我的库有一个 runtime
依赖项,我可以使用以下内容:
components.java.withVariantsFromConfiguration(configurations.runtimeElements) {
skip()
}
我使用以下插件:
id 'maven-publish'
id "com.github.johnrengelman.shadow" version "7.0.0"
我的依赖项:
dependencies {
shadow gradleApi()
shadow localGroovy()
implementation 'com.example:lib:0.1.0'
我的发布区块:
publishing {
publications {
pluginJar(MavenPublication) { publication ->
from project.shadow.component(publication)
artifact sourceJar
}
}
}
当我执行 运行 publishToMavenLocal
任务时,我可以看到结果 pom.xml
包含我不想要的依赖项。
假设是:
<dependency>
<groupId>com.example</groupId>
<artifactId>lib</artifactId>
<version>0.1.0</version>
<scope>runtime</scope>
</dependency>
如何配置 publications
块以从 pom.xml
(和模块)文件中摆脱这种依赖?
pom.xml
中的依赖项来自 apiElements
(compile
范围)和 runtimeElements
(runtime
范围)配置。您可以从此配置中删除要从 pom.xml
中排除的依赖项。
示例(我将使用 Kotlin DSL,因为我不熟悉 Groovy):
setOf("apiElements", "runtimeElements")
.flatMap { configName -> configurations[configName].hierarchy }
.forEach { configuration ->
configuration.dependencies.removeIf { dependency ->
dependency.name == "lib"
}
}
from(components["java"])
将此代码转换为 Groovy 并将其粘贴到您的 publication
闭包中。
我发现由于我的库有一个 runtime
依赖项,我可以使用以下内容:
components.java.withVariantsFromConfiguration(configurations.runtimeElements) {
skip()
}