从 gradle 中的 configurations.runtimeClasspath 排除依赖树

Excluding dependency tree from configurations.runtimeClasspath in gradle

我有以下 gradle 依赖项:

dependencies {
    implementation 'org.keycloak:keycloak-core:17.0.0'
    implementation 'org.keycloak:keycloak-server-spi:17.0.0'
    implementation 'org.keycloak:keycloak-server-spi-private:17.0.0'
    implementation 'org.keycloak:keycloak-services:17.0.0'

    implementation 'com.amazonaws:amazon-kinesis-producer:0.14.10'
}

我需要创建一个 fat jar,其中包含 'com.amazonaws:amazon-kinesis-producer:0.14.10' 的所有传递依赖项的 jar,但不包含其余的。到目前为止,我的任务是将所有 jars 复制到一个目录中:

task copyToLib(type: Copy) {
    into "jars"
    duplicatesStrategy "exclude"
    from configurations.runtimeClasspath.findAll { file ->
        file.name != "keycloak-services-17.0.0.jar" && file.name != "keycloak-core-17.0.0.jar"
                && file.name != "keycloak-server-spi-17.0.0.jar" && file.name != "keycloak-server-spi-private-17.0.0.jar"
                && file.name != "keycloak-common-17.0.0.jar"
    }
}

jar { dependsOn copyToLib }

它排除了我不想要的所有基于 Keycloak 的特定 jar,但我也希望不包括那些的传递依赖项。有没有一些简单的方法可以从依赖节点开始删除整个树?

旁注:我不能只从我的 dependencies {} 部分删除这些依赖项,因为我需要它们用于 IntelliJ 和编译代码,而我需要在将 jars 添加到 [=25] 时排除它们=] 图像,因为 Keycloak 基础图像已经包含所有这些,并且当我添加这些时会发生冲突。

看起来可以使用以下方法实现:

    from configurations.runtimeClasspath
            .exclude(group: 'org.keycloak', module: 'keycloak-core')
            .exclude(group: 'org.keycloak', module: 'keycloak-services')
            .exclude(group: 'org.keycloak', module: 'keycloak-server-spi-private')
            .exclude(group: 'org.keycloak', module: 'keycloak-server-spi')