问题标签 [classloader]

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.

0 投票
5 回答
6597 浏览

java - 如果您不使用返回值,Class.forName() 有什么用途?

我在使用商业 JDBC 驱动程序的示例应用程序中看到了这一行:

不使用返回值。

这条线的用途是什么?

0 投票
2 回答
635 浏览

java - 帮助在 Oracle 企业管理器中创建新的 JAXB 实例

当试图在 servlet 中创建新的 JAXB 实例时,我收到一个 JAXBException 说找不到 jaxb.properties。我一直在尝试通过调用 JAXBContext.newInstance() 显式传递类加载器,但我无法弄清楚。

以下是类加载器:

JAXB 生成的类位于不同的包中,因此我的 servlet 位于包“com.xyz.ws”中,而 JAXB 类位于包“com.abc.123”中。我正在使用 ` 从 servlet 创建新的 JAXB 实例

(我也尝试过使用this.getClass().getClassLoader()

0 投票
4 回答
1751 浏览

java - 在 Java 中,为什么 Exception 类需要在需要之前对类加载器可用?

我正在开发一个动态加载 JAR 的应用程序,其中包含它使用的一堆类的定义。一切都很顺利,直到我尝试捕获动态加载的 JAR 中的异常派生类。

以下片段显示了问题(DynamicJarLoader是实际加载 JAR 的类;两者TestClassMyException在外部 JAR 中):

当我尝试运行它时,我得到了这个:

如果我替换catch(MyException e)catch(Exception e),程序运行良好。这意味着 Java能够TestClass在 JAR 已经加载之后进行查找。因此,JVM 似乎需要在程序开始运行时定义所有异常类,而不是在需要它们时(即到达特定的 try-catch 块时)。

为什么会这样?

编辑

我已经进行了一些额外的测试,这确实很奇怪。这是完整的来源MyException

此代码运行:

这不会:

我应该指出,每当我从 NetBeans 运行测试时,一切都按计划进行。只有当我强行从 Java 中移除外部 Jar 并从命令行运行测试应用程序时,才会开始奇怪。

编辑#2

根据答案,我写了这个,我认为这证明我接受的确实是正确的:

0 投票
3 回答
9602 浏览

java - 如何在运行时从外部 jar 访问方法?

这是发布的问题的延续:如何在运行时加载 jar 文件

我不确定如何继续到方法调用级别。根据我的理解,从 clazz 对象,我会使用 getMethod 或 getDeclaredMethod 来获取一个 Method 对象,我将从中调用它。当然,invoke 需要一个实例。那会是示例代码中所谓的 doRun 吗?

即使我想执行与 main 不同的方法(假设它是使用 run 调用调用的 doRun 对象上的 main 方法),我是否需要执行 doRun.run() 方法调用?

只是为了更清楚地说明原始帖子,我问:doRun.run() 是否启动了一个新线程来执行 clazz 类型的类对象的实例?

感谢您帮助我解决这个问题。

我确实看过“how-should-i-load-jars-dynamically-at-runtime”(对不起,只允许一个超链接),但这看起来违反了我引用的第一篇文章中的 Class.newInstance 邪恶警告。

0 投票
2 回答
4048 浏览

java - getClass().getClassLoader().getResourceAsStream 正在抛出 NullPointerException

在 Java 中 getClass().getClassLoader() 如何返回 null?

  • “类”所在的 jar 不在 common/lib 下。
  • 罐子没有被 boostrap 加载。

jar 中所有类的 ClassLoader 为空。

0 投票
2 回答
1017 浏览

java - 读取 JAR 文件中的文件

我正在尝试读取 Jar 文件中的数据库脚本,以便可以根据需要多次拆分 import.sql 文件。

例如,我有几个提供参考数据的项目或模块,所以我在每个项目中都有几个单独的脚本来声明它。我的方法不是拥有一个大的 import.sql,而是将其拆分以使其更具可读性并将数据保存在一个地方,因此如果我有多个 Web 应用程序项目,我不必重新声明和维护这些文件分别地。

我想我在使用 javassist 时遇到了问题 - 我创建了一个帮助程序类(在模块 FileIO 中),它只是查找给定名称,然后对于所有匹配项,它将尝试读取配置,定位数据库脚本,读取它们行按行,并返回一个我可以迭代执行查询的对象。

当我调用那个助手类(来自我的 Seam 项目)时,我得到了 NoSuchMethodError。如果我将所有这些功能移回调用所源自的 Seam 组件,它在大多数情况下都可以正常工作。最后一个问题是,如果我有多个配置文件,出于某种奇怪的原因,即使 URL 指向正确的配置文件,也只有第一个被使用过?

我正在使用 JBoss Seam 2.2.0.GA、Javassist 3.11.0.GA 和 Hibernate Entity Manager 3.4.0.GA。

接缝组件

辅助方法:

我正在正确使用 Java API,这是 javassist 的问题吗?任何想法和建议表示赞赏。

编辑:堆栈跟踪

谢谢,沃尔特

0 投票
1 回答
963 浏览

ant - 是否有使用 ant junit 任务可自定义的类加载顺序?

在我们的 web-app 项目中,我们包含了一些 jar 文件。为了修补 jar 文件中某个类的一些问题,我们在补丁源文件夹中更改了此类的实现。

由于在tomcat中有定义的类加载顺序(WEB-INF/classes在WEB-INF/lib之前),所以补丁版本的类是由tomcat加载的,而不是jar文件中的原始版本。因此,一旦我们部署我们的应用程序,一切都会按预期工作。

现在,我们想从 ant 对这个补丁类运行 junit 测试。因此,我们将类路径配置为同时保存原始 jar 和修补后的类文件。但是似乎没有办法告诉蚂蚁的junit任务首先加载修补的类,而不是jar文件中的未修补版本。

有没有办法解决这个问题?有没有办法确定 ant 的 junit 任务加载类的顺序?有没有其他方法可以从 ant 测试我们的补丁类?

0 投票
2 回答
2531 浏览

java - 如何确定从 JBoss 中的何处加载了哪些类

我似乎记得 JMX 控制台中的一些功能,它允许您输入类名,并查看加载它的类加载器,以及从哪些资源加载类。不幸的是,我似乎找不到这个。对于独立应用程序,我一直使用JWhich工具来获取此信息。

0 投票
4 回答
29708 浏览

java - 有没有办法获取 ClassLoader 加载了哪些类?

我正在尝试为旧框架实施一些单元测试。我正在尝试模拟数据库层。不幸的是,我们的框架有点旧,并且没有完全使用最佳实践,因此没有明确的关注点分离。我有点担心尝试模拟数据库层可能会使 JVM 加载大量甚至不会使用的类。

我不太了解类加载器,所以这可能不是问题。有没有办法在特定 ClassLoader 加载的所有类中达到峰值,以证明引擎盖下发生了什么?

0 投票
4 回答
2618 浏览

java - 在 Quartz 作业中动态加载 Java 类文件的名称

我有一个用 Java 编写的 Quartz 作业,如果我将 Quartz JobDetail 行设置如下:

但我想动态加载该类,因为作业详细信息存储在数据库表中。所以我想要这样的东西:

其中 sj 是计划作业对象,方法 sj.getJobClassFile() 返回在 sj 中定义的类的名称,而不是硬编码类名称。

我尝试了 Java Class.forName 方法的排列,但没有成功。