问题标签 [contextclassloader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android:Gradle 更新到 6.7.1 后 JUnit 测试中的 ClassLoader 不再列出所有资源
我需要在我的 android 单元测试中迭代主包中的特定类,以检查它们的一些属性。为此,我使用标准方法,使用 ClassLoader:
在 Gradle 更新(有 Gradle 5.6.4)之前有效。现在的行为如下:它在从 Android Studio 运行测试时有效,但在使用 gradlew 从命令行运行时失败(返回空枚举)。
我想知道两个 Gradle 版本在这方面有什么区别?为什么从 Studio 运行时它仍然有效?
我尝试过的一些注意事项和事情:
- 在单元测试中引用这些类可以正常工作,单元测试中的 classLoader.findClass("com.models.package.MyModel") 和 classLoader.loadClass("com.models.package.MyModel") 也可以正常工作。但即使在那之后 classLoader.getResources("com/models/package") 返回空枚举。
- 使用对 ClassLoader 的其他引用,例如 MyModel::class.java.classLoader 和 ClassLoader.getSystemClassLoader() 没有任何区别。
- 从命令行构建的 Gradle 包含警告“OpenJDK 64 位服务器 VM 警告:仅引导加载程序类支持共享,因为已附加引导类路径”,但据我所知,它与我的问题无关。
- 如果我将“com/models/package”中的一些类放到单元测试/test 文件夹中,它们将在枚举中返回。
这可能与一些新的优化设置有关,这些设置使 ClassLoaders 省略了在不同的根目录中注册某些类,但由于它仍然在 AS 中工作,因此可能有一些设置可以在命令行构建中关闭此优化?
感谢您对此提出任何建议。
java - java.lang.StackOverflowError 当 java.lang.ClassLoader.loadClass(ClassLoader.java:569)
我在 catalina 日志文件中填充了这些内容,导致附加 javaagent 时出现磁盘空间问题。我不知道从哪里触发。可能是什么原因 ?
java - 动态更改 Thread.currentThread() ClassLoader
我正在开发一个程序,我需要能够动态加载不同版本的 Java 可执行文件。这些可执行文件的不同版本相互干扰,因此我需要为它们中的每一个创建一个不同的 ClassLoader 并使用我创建的接口执行加载的类。但是,这些可执行文件之一使用:
这与我创建的用于加载所需可执行文件的 ClassLoader 不对应。为了解决这个问题,我将子 ClassLoader 设置为上下文 ClassLoader 以调用所需的可执行文件,并且在任务完成后,我将上下文 ClassLoader 再次设置回原来的值。它会是这样的:
该程序有效,但我不知道这是否会在执行过程中产生错误,或者这是否是一种糟糕的做法。如果是这样,是否还有其他可能做类似的事情?谢谢您的回答。