如何配置 gradle 仅使用 logback-classic 进行 Android 中的单元测试?

2024-04-01

我有一个使用 slf4j + logback 的 Android 应用程序。 Gradle 文件如下所示:

...
compile('com.github.tony19:logback-android-core:1.1.1-6') {
    exclude group: 'ch.qos.logback.core.net'
}

compile('com.github.tony19:logback-android-classic:1.1.1-6') {
    exclude group: 'ch.qos.logback.core.net'
}

compile 'org.slf4j:slf4j-api:1.7.25'

我在 asset/ 中有 logback.xml 。当我运行应用程序时,日志记录按预期工作。最近我决定添加新的单元测试(常规的,不是 android 单元测试),但我看到日志消息没有显示。

我已将以下内容添加到 grangle 文件中:

testCompile('ch.qos.logback:logback-classic:1.2.3') {
    exclude group: 'com.github.tony19'
}

现在显示日志消息,但在每次运行单元测试时我都会收到此警告:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/o/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.3/7c4f3c474fb2c041d8028740440937705ebb473a/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/o/.gradle/caches/modules-2/files-2.1/com.github.tony19/logback-android-classic/1.1.1-6/614c66c9ece69eef48c65a8558de4fd7266d9f69/logback-android-classic-1.1.1-6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

有没有办法专门指定哪个 slf4j 绑定用于常规应用程序运行,哪个仅用于单元测试(或任何其他解决方案)?

依赖关系图:

compile - Classpath for compiling the main sources.
+--- com.bolyartech.forge.android:forge-android:7.1.0
|    +--- com.bolyartech.forge:base:5.1.0
|    |    +--- org.slf4j:slf4j-api:1.7.7 -> 1.7.25
|    |    +--- com.darwinsys:hirondelle-date4j:1.5.1
|    |    +--- com.google.guava:guava:20.0
|    |    +--- javax.inject:javax.inject:1
|    |    \--- com.squareup.okhttp3:okhttp:3.1.2
|    |         \--- com.squareup.okio:okio:1.6.0
|    +--- com.google.dagger:dagger:2.9
|    |    \--- javax.inject:javax.inject:1
|    +--- com.android.support:support-annotations:25.3.1 -> 26.0.1
|    +--- javax.annotation:jsr250-api:1.0
|    +--- com.android.support.test.espresso:espresso-idling-resource:2.2.2
|    \--- net.sourceforge.streamsupport:streamsupport:1.5.1
+--- com.bolyartech.scram_sasl:scram_sasl:2.0.1
+--- com.android.support:multidex:1.0.1
+--- com.squareup:otto:1.3.8
+--- com.google.code.gson:gson:2.7
+--- com.github.franmontiel:PersistentCookieJar:v0.9.3
|    \--- com.squareup.okhttp3:okhttp:3.1.2 (*)
+--- com.github.tony19:logback-android-core:1.1.1-6
+--- com.github.tony19:logback-android-classic:1.1.1-6
|    +--- com.github.tony19:logback-android-core:1.1.1-6
|    \--- com.github.tony19:apktool-lib:1.4.4-3
|         \--- com.google.android:android:2.1_r1
|              +--- commons-logging:commons-logging:1.1.1
|              +--- org.apache.httpcomponents:httpclient:4.0.1
|              |    +--- org.apache.httpcomponents:httpcore:4.0.1
|              |    +--- commons-logging:commons-logging:1.1.1
|              |    \--- commons-codec:commons-codec:1.3
|              +--- org.khronos:opengl-api:gl1.1-android-2.1_r1
|              +--- xerces:xmlParserAPIs:2.6.2
|              \--- xpp3:xpp3:1.1.4c
+--- ch.acra:acra:4.7.0
|    \--- com.android.support:support-v4:23.0.1 -> 26.0.1
|         +--- com.android.support:support-compat:26.0.1
|         |    \--- com.android.support:support-annotations:26.0.1
|         +--- com.android.support:support-media-compat:26.0.1
|         |    +--- com.android.support:support-annotations:26.0.1
|         |    \--- com.android.support:support-compat:26.0.1 (*)
|         +--- com.android.support:support-core-utils:26.0.1
|         |    +--- com.android.support:support-annotations:26.0.1
|         |    \--- com.android.support:support-compat:26.0.1 (*)
|         +--- com.android.support:support-core-ui:26.0.1
|         |    +--- com.android.support:support-annotations:26.0.1
|         |    \--- com.android.support:support-compat:26.0.1 (*)
|         \--- com.android.support:support-fragment:26.0.1
|              +--- com.android.support:support-compat:26.0.1 (*)
|              +--- com.android.support:support-core-ui:26.0.1 (*)
|              \--- com.android.support:support-core-utils:26.0.1 (*)
+--- org.slf4j:slf4j-api:1.7.25
+--- javax.inject:javax.inject:1
+--- javax.annotation:jsr250-api:1.0
+--- com.google.dagger:dagger:2.9 (*)
\--- com.android.support:appcompat-v7:26.0.1
     +--- com.android.support:support-annotations:26.0.1
     +--- com.android.support:support-v4:26.0.1 (*)
     +--- com.android.support:support-vector-drawable:26.0.1
     |    +--- com.android.support:support-annotations:26.0.1
     |    \--- com.android.support:support-compat:26.0.1 (*)
     \--- com.android.support:animated-vector-drawable:26.0.1
          +--- com.android.support:support-vector-drawable:26.0.1 (*)
          \--- com.android.support:support-core-ui:26.0.1 (*)


testCompile - Classpath for compiling the test sources.
+--- ch.qos.logback:logback-classic:1.2.3
|    +--- ch.qos.logback:logback-core:1.2.3
|    \--- org.slf4j:slf4j-api:1.7.25
+--- junit:junit:4.12
|    \--- org.hamcrest:hamcrest-core:1.3
\--- org.mockito:mockito-core:1.10.19
     +--- org.hamcrest:hamcrest-core:1.1 -> 1.3
     \--- org.objenesis:objenesis:2.1

对于 Android Gradle Plugin 3 及更高版本,请尝试使用以下内容:

implementation 'org.slf4j:slf4j-api:1.7.25'   
runtimeOnly 'com.github.tony19:logback-android-core:1.1.1-6'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置 gradle 仅使用 logback-classic 进行 Android 中的单元测试? 的相关文章

随机推荐

  • Android 弹出列表视图

    我想在我的 Android 应用程序中实现一个功能 例如当用户单击标题中的按钮时 会弹出一个小列表视图 在屏幕一角有 5 个值 请大家给点建议 很紧急 提前致谢 You mean a quick action menu Like this
  • 如何在 Airflow 中使用 HashiCorp Vault?

    我开始使用 Apache Airflow 我想知道如何有效地使其使用存储在 Vault 中的秘密和密码 不幸的是 搜索不会返回超出范围的有意义的答案Airflow 中尚未实现的钩子 https issues apache org jira
  • MySQL 访问被拒绝 1045 错误

    我收到一个非常奇怪的错误 我使用以下凭据创建了一个用户 testuser CREATE USER testuser IDENTIFIED BY 123456 GRANT ALL PRIVILEGES ON TO testuser FLUSH
  • 设计 - 从两个模型登录

    我有两个用户模型 第一个是来自远程数据库作为遗留和用于公司内部目的 员工登录 第二个是我们的公共注册和登录项目 但我想要一张登录表单 我搜索了很长时间 但有些解决方案让我感到困惑 第一个遗产看起来像 仅用于读取和身份验证 class Crm
  • 存储过程不返回数据

    我正在将脚本从 已停产的 Windows 服务器传输到我们的 Linux 服务器 我需要传输的脚本之一是与MSSQL 服务器 与服务器的连接已建立 我可以从任何表中获取 常规 数据 但是当我执行存储过程时 我没有收到任何所需的数据 程序只是
  • 打字稿中的 this 关键字。这是一个错误吗?

    我有一个成员函数 render 该函数调用类的另一个成员add any 这是片段 render collection each this add 如果我在add中使用关键字 this 则类型是window 我希望它是成员类的实例 在构造函数
  • 如何使某些 JavaFX TreeView 节点不可选择?

    我想在我的 JavaFX 中创建 文件夹 节点TreeView可展开和折叠但是不可选择 I found 这次讨论 https community oracle com thread 2346878并调查了EventFilter 但似乎没有任
  • 在 UISearchController iOS 11 上使用背景图片

    我正在实施一个UISearchController to my UITableView但我在 iOS 11 的定制方面遇到了困难 我的导航栏使用渐变图像背景 我希望搜索控制器能够匹配它 但我还没有找到设置背景图像的方法UISearchCon
  • 如何使用 AJAX 接收 JSON 文件并使用 javascript 解析它?

    我正在尝试解析 foursquare 给我的这个又长又复杂的 JSON 这是我的 AJAX 请求 ajax url https api foursquare com v2 venues explore dataType json data
  • 通用2D游戏资产和绝对节点定位

    我有一个关于通用游戏资产 and 绝对定位 of a SKNodes in Sprite Kit iOS 8 我将尝试通过如下示例来展示我的问题 想象一个2D自上而下游戏 with a SKSpriteNode它代表一座房子 一个房子有多个
  • 从我的应用程序发送电子邮件时如何避免延迟?

    我有一个小型控制台应用程序 它检查一些设置 做出一些决定 然后发送电子邮件 问题是 在我的申请完成之前 电子邮件实际上并未发送 我希望发送电子邮件的方法完成后立即发送电子邮件 最初 我只是创建了一个 MailMessage 并调用 Send
  • Caliburn.Micro 在 WPF 中拖放文件

    我已经使用 Caliburn Micro 2 0 1 创建了桌面应用程序 现在我需要添加拖放行为 用户将从 Windows 资源管理器中拖动文件 我需要获取它的路径 但是我正在搜索两天了 我没有找到任何关于如何为 Caliburn Micr
  • JPA 关系映射概念

    我有几个关于双向映射的问题 我有这些实体 员工 1 1 Parking Lot 员工 1 部门 员工 1 项目 上述关系的源实体和目标实体是什么 业主有何用ManyToOne关系 我想知道楼主是 多个实体还是一个实体 Do mappedBy
  • 如何解析一个巨大的 JSON 文件而不将其加载到内存中

    我有一个很大的 JSON 文件 2 5MB 包含大约 80000 行 它看起来像这样 a 123 b 0 26 c HUGE irrelevant object d 32 我只想为键存储整数值a b and d并忽略 JSON 的其余部分
  • 连接到 wsdl 时出错?

    I do base64string base64 encodestring s s userid passwd replace n authenticationHeader Authorization Basic s base64strin
  • Kill - 它会立即终止进程吗?

    什么是kill到底是怎么做的 我有一个父进程 它正在一个接一个地创建 100 个 作为示例 子进程 在任何孩子的工作结束时 我都会杀死孩子kill pid of child SIGKILL 我看不到ps输出 但是如果父进程出现问题并且我退出
  • Java - 获取泛型类的名称

    我有以下两个课程 class Generic
  • 为什么 React Native 中“Enter”键不触发 onKeyPress?

    我已在文本输入中添加了一个 onKeyPress 事件侦听器 以便当用户在手机键盘上单击 完成 或 转到 或 输入 时 它将调用我的 searchProducts 函数 我希望有一个 onSubmit 类型的事件侦听器选项 但无法找到类似的
  • 如何在意图中添加.apk文件

    我想在意图中添加 apk 文件 我想创建一个 共享 按钮 它将通过蓝牙或任何其他能够发送应用程序的应用程序共享整个应用程序 如果可以通过其他方式完成此操作 请告诉我 谢谢 List ApplicationInfo mAppList getP
  • 如何配置 gradle 仅使用 logback-classic 进行 Android 中的单元测试?

    我有一个使用 slf4j logback 的 Android 应用程序 Gradle 文件如下所示 compile com github tony19 logback android core 1 1 1 6 exclude group c