gpt4 book ai didi

android - Gradle 提供的 JAR 依赖项未按预期工作

转载 作者:行者123 更新时间:2023-12-03 05:14:34 25 4
gpt4 key购买 nike

我整天都被这个问题困扰,我希望有人可以帮助我让我的程序运行。

我正在为 Android 构建一个注释处理器,它目前有两个模块:“mymodule”和“mymodule-compiler”

mymodule-compiler 依赖于 mymodule:

dependencies {
compile project(':mymodule')
...
}

mymodule 使用适用于 Android 的 netflix“提供”插件:
apply plugin: 'nebula.provided-base'

dependencies {
provided 'com.google.android:android:4.1.1.4'
}

这实际上工作得很好,但是当我运行我的编译器单元测试套件时,很多测试都失败了,因为指定的 Android 依赖项是 v4.1.1.4 而我实际上需要 v6.0。 v6.0 在 Maven 上不可用(看起来它永远不会可用,因为谷歌自 2012 年以来没有更新它)。

我发现 Android SDK 为每个版本都提供了一个 Android 的“单元测试”JAR 版本,它是整个 SDK 的“ stub ”。我假设 Maven 上的版本也被删除了(?)。我可以轻松获取该 JAR 并将其放入我的项目中的 libs/.

现在当我更新 mymodule gradle 文件时:
dependencies {
provided files('libs/android.jar')
}

我的项目仍然可以正确编译,并且可以看到 v23 文件!但是,当我运行单元测试时,我看到以下错误:
!!! JUnit version 3.8 or later expected:

java.lang.RuntimeException: Stub!
at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
at junit.textui.TestRunner.<init>(TestRunner.java:54)
at junit.textui.TestRunner.<init>(TestRunner.java:48)
at junit.textui.TestRunner.<init>(TestRunner.java:41)
at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:205)
at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:188)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Android JAR 被删除并不重要,因为我从不执行 Android 代码,我只需要它来导入。

有没有人对我所看到的以及如何解决这个问题有任何想法?

编辑1:更多信息:

如果我完全从 mymodule 中删除 Android 依赖项,而是将以下内容放入 mymodule-compiler.gradle:
dependencies {
testCompile files('libs/android.jar')
...
}

我所有的测试都会通过。这显然不是一个修复,因为 'mymodule' 确实需要 Android 依赖项。

编辑2:

进行与 EDIT 1 相同的测试,但使用 netflix 提供的范围而不是 testCompile 也可以。如果我在两个项目中使用提供的范围,我会得到相同的 stub !异常(exception)。

最佳答案

[与OP一起制定]

本地 jar 包含似乎干扰的 Maven jar 上的其他类。
要使其正常工作,请从 jar 中删除这些(特别是在这种情况下:所有 junit 类)。

两个jar对比(左为maven jar,右为local jar):comparison

关于android - Gradle 提供的 JAR 依赖项未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34971732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com