java - 你如何使用 gradle 的 `` exclude`` 来替换依赖项?

标签 java gradle kotlin dependencies slf4j

所以我想禁用 JUnit 测试的日志记录。

最简单的方法是将绑定(bind)从 slf4j-simple 切换到 slf4j-nop

我该怎么做呢?

我试过排除:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

    implementation "com.android.support:appcompat-v7:$support_version"
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'

    implementation "org.jetbrains.anko:anko-common:$anko_version"

    implementation "org.slf4j:slf4j-simple:1.6.1"
    testImplementation("org.slf4j:slf4j-nop:1.6.1"){
        exclude(group:'org.slf4j', module:'slf4j-simple')
    }
    implementation 'io.github.microutils:kotlin-logging:1.6.10'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

但这仍然导致

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/user1291/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-nop/1.6.1/70249094d4e5653b6bdfea46f3a1a4165c1e1993/slf4j-nop-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/user1291/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.6.1/58e59bfb3e247097b8122243b3bfe0049c8cfae8/slf4j-simple-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory]

还尝试了配置:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

    implementation "com.android.support:appcompat-v7:$support_version"
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'

    implementation "org.jetbrains.anko:anko-common:$anko_version"

    implementation "org.slf4j:slf4j-simple:1.6.1"
    testImplementation "org.slf4j:slf4j-nop:1.6.1"
    implementation 'io.github.microutils:kotlin-logging:1.6.10'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

configurations{
    testImplementation.exclude(group:'org.slf4j',module:'slf4j-simple')
}

这没什么区别。

最佳答案

试试这个:

configurations.all { config ->
    config.resolutionStrategy.dependencySubstitution {
        if (config.name.toLowerCase().contains('test')) {
            substitute module('org.slf4j:slf4j-simple:1.6.1') with module('org.slf4j:slf4j-nop:1.6.1')
        }
    }
}

关于java - 你如何使用 gradle 的 `` exclude`` 来替换依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52537170/

相关文章:

java - 随机字符串在 gradle 缓存目录中作为 MD5 代码的子目录名称是什么意思?

android - java.lang.IllegalArgumentException : Illegal character (U+0) in writing xml file android 异常

serialization - 如何为 kotlin 异常生成 serialVersionUID?

java - 将多个对象合并为多种格式

build - 无论有没有分析方面的内容,如何使用gradle构建项目?

java - 使用 Java 从 postgreSQL 检索 inet 数据类型?

c++ - 如何在(Android Studio)NDK(C/C++ API)中运行Tensorflow-Lite推理?

android - 布局预览未呈现 - 可能是由于 androidx.widget

java - 使用 SFTP 入站重新下载本地删除的文件的过程是什么

java - 线程安全唯一编号生成器