Android: Gradle 更新到 6.7.1 ClassLoader 后 JUnit 测试不再列出所有资源

Android: after Gradle update to 6.7.1 ClassLoader in JUnit test no longer lists all resources

我需要在我的 android 单元测试中迭代主包中的特定 类,以检查它们的一些属性。 为此,我使用标准方法,使用 ClassLoader:

 val classLoader = Thread.currentThread().contextClassLoader 
 val resources: Enumeration<URL> = classLoader.getResources("com/models/package")
 assert(resources.hasMoreElements()) // Fails from CL, works in AS
 

在 Gradle 更新(有 Gradle 5.6.4)之前有效。现在的行为如下:当测试是来自 Android Studio 的 运行 时它有效,但是当使用 gradlew 从命令行 运行 时失败(returns 空枚举)。

我想知道两个 Gradle 版本在这方面可能有什么不同?为什么当来自 Studio 运行 时它仍然有效?

一些考虑和我尝试过的事情:

这可能与一些新的优化设置有关,这些设置使 ClassLoader 忽略在不同的根目录中注册一些 类,但由于它在 AS 中仍然有效,因此可能有一些设置可以关闭此优化也在命令行构建中?

感谢您对此提出任何建议。

在 Gradle 6.7.1 中,我必须将包含代码的目录包含到测试 sourceSets 中。之后 junit 的类加载器开始在枚举中看到 类 和 return 它们。

sourceSets {
        test {
            java.srcDirs += ['src/main']
        }
    }