使用 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 中的依赖项来自 apiElementscompile 范围)和 runtimeElementsruntime 范围)配置。您可以从此配置中删除要从 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()
}