问题标签 [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 投票
20 回答
342747 浏览

java - 如何在运行时动态加载 JAR 文件?

为什么在 Java 中做到这一点如此困难?如果您想拥有任何类型的模块系统,您需要能够动态加载 JAR 文件。有人告诉我有一种方法可以通过编写自己ClassLoader的 .

对执行此操作的简单代码有什么建议吗?

0 投票
6 回答
1557 浏览

java - 如何在第三方类中给 java.util.Random 一个特定的种子?

我有一个 Java 程序,它加载第三方类文件(我没有编写的类)并执行它们。这些类经常使用java.util.Random,默认情况下,每次实例化时都会生成随机的起始种子值。出于可重复性的原因,我想每次都为这些类提供相同的起始种子,仅由我自行决定更改它。

以下是一些明显的解决方案,以及为什么它们不起作用:

  1. 在第三方类文件中使用不同的 Random 类。这里的问题是我只加载类文件,不能修改源。

  2. 使用自定义类加载器来加载我们自己的 Random 类,而不是 JVM 的版本。这种方法不起作用,因为 Java 不允许类加载器覆盖java包中的类。

  3. 将 rt.jar 的java.util.Random实现替换为我们自己的,或者将文件放入 JVM 的受信任位置。这些方法要求应用程序的用户在他们的机器上安装 JVM,这并不好。

  4. 将自定义java.util.Random类添加到引导类路径。虽然这在技术上可行,但对于这个特定的应用程序来说,这是不切实际的,因为这个应用程序是供最终用户从 IDE 运行的。我想让用户方便地运行应用程序,这意味着强迫他们设置引导类路径是一件痛苦的事情。我无法将其隐藏在脚本中,因为它旨在从 Eclipse 之类的 IDE 中运行(以便于调试。)

那么我该怎么做呢?

0 投票
2 回答
566 浏览

java - 是否可以定义一个 Java 类加载器,将完全不同的类返回给请求的类?

我试过这个,但调用时得到一个 ClassNotFoundException :

0 投票
5 回答
21863 浏览

java - 类加载器问题 - 如何确定加载了哪些库版本(jar 文件)

我刚刚解决了另一个 *I-though-I-was-using-this-version-of-a-library-but-appparently-my-app-server-has-already-loaded-an-older-version-of -this-library-*issue(叹气)。

有人知道验证(或监控)您的应用程序是否可以访问所有适当的 jar 文件或加载的类版本的好方法吗?

提前致谢!

[PS 在我看来开始使用OSGi 模块架构的一个很好的理由!]

更新这篇文章也有帮助!它通过将 JBoss 的类加载器写入日志文件来让我了解加载了哪些类。

0 投票
7 回答
143848 浏览

java - 在java中卸载类?

我有一个自定义类加载器,以便桌面应用程序可以从我需要与之交谈的 AppServer 动态地开始加载类。我们这样做是因为这样做所需的罐子数量是荒谬的(如果我们想运送它们)。如果我们不在运行时从 AppServer 库动态加载类,我们也会遇到版本问题。

现在,我刚刚遇到了一个问题,我需要与两个不同的 AppServers 对话,并发现根据我首先加载的类,我可能会严重崩溃……有没有办法在不实际杀死 JVM 的情况下强制卸载类?

希望这是有道理的

0 投票
5 回答
157705 浏览

java - 如何在运行时加载 jar 文件

我被要求构建一个能够在运行时加载新代码(扩展)的 java 系统。如何在我的代码运行时重新加载 jar 文件?或者我如何加载一个新的罐子?

显然,由于恒定的正常运行时间很重要,我想添加在现有类时重新加载现有类的能力(如果它不会使事情变得太复杂的话)。

我应该注意什么?(将其视为两个不同的问题 - 一个关于在运行时重新加载类,另一个关于添加新类)。

0 投票
2 回答
4760 浏览

java - Thread.getContextClassLoader() == null?

可以Thread.getContextClassLoader()为空吗?javadoc 不是很清楚。
图书馆应该考虑这种情况吗?

更新:我问的原因是在这种情况beansbinding.dev.java.net不起作用(我的代码确实setContextClassLoader(null)

0 投票
11 回答
190757 浏览

java - 查找从哪里加载 java 类

有谁知道如何以编程方式找出java类加载器实际从哪里加载类?

我经常在大型项目中工作,其中类路径变得很长,手动搜索并不是一个真正的选择。我最近遇到了一个问题,即类加载器加载了一个不正确的类版本,因为它位于两个不同位置的类路径上。

那么如何让类加载器告诉我实际的类文件来自磁盘的哪个位置?

编辑:如果类加载器由于版本不匹配(或其他原因)实际上无法加载类怎么办,无论如何我们可以在读取它之前找出它试图读取的文件吗?

0 投票
7 回答
107409 浏览

java - 如何处理 Java 中的 LinkageErrors?

在开发一个大量基于 XML 的 Java 应用程序时,我最近在 Ubuntu Linux 上遇到了一个有趣的问题。

我的应用程序使用Java Plugin Framework似乎无法将dom4j创建的XML 文档转换为Batik 的SVG 规范实现。

在控制台上,我了解到发生了错误:

我认为问题是由来自 JVM 的原始类加载器和插件框架部署的类加载器之间的冲突引起的。

据我所知,不可能为要使用的框架指定类加载器。破解它可能是可能的,但我更喜欢用不那么激进的方法来解决这个问题,因为(无论出于何种原因)它只发生在 Linux 系统上。

你们当中有人遇到过这样的问题吗?知道如何解决它或至少找到问题的核心吗?

0 投票
13 回答
197314 浏览

java - 在运行时扫描 Java 注释

如何在整个类路径中搜索带注释的类?

我正在做一个库,我想让用户注释他们的类,所以当 Web 应用程序启动时,我需要扫描整个类路径以获取某些注释。

我正在考虑类似 Java EE 5 Web 服务或 EJB 的新功能。@WebService您使用or注释您的类,@EJB系统会在加载时找到这些类,以便可以远程访问它们。