问题标签 [dynamic-class-loaders]

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 投票
2 回答
3934 浏览

java - 动态重新加载 jar 文件内容

我的应用程序的类路径中有一个 jar 文件。在运行时,我将新类添加到 jar 文件中,有时还修改现有类的字段/方法。目前我正在使用 URLClassLoader 动态加载类。动态添加的新类已正确加载,我可以在运行时使用它们。但它无法重新加载在运行时修改的现有类。我阅读了许多文章,其中指出我们需要显式处理重新加载,因为一旦加载了类,在对该类的所有引用都被销毁之前不会重新加载。我还尝试了我找到的示例代码,但它们都不起作用。

任何人都可以建议我重新加载的正确方法吗?任何相同的示例代码都将受到高度赞赏。

0 投票
1 回答
2355 浏览

classloader - JBoss 7 - 从模块类加载器以编程方式加载 jars

我有一个已部署到 JBoss 7 的 WAR,它使用其上下文类加载器动态加载 jar 资源。

但是上下文类加载器只在 WEB-INF/lib 文件夹中查找资源

来自服务模块加载器的模块“deployment..war:main”的 ModuleClassLoader

如何在 jboss 中获取我拥有资源的特定模块的类加载器。我有需要在 JBOSS_HOME/modules/org/custom/... 中的自定义模块中加载的 jars

0 投票
2 回答
2094 浏览

java - 序列化动态生成的类

假设我有一个抽象类

然后我动态创建类

我能够从 String 动态生成类 Temp,调用一个新实例,然后提取基础对象并像任何其他扩展 Base 的实例一样使用它。当我序列化时,问题就来了。我可以序列化从动态 Temp 类中提取的 Base 基础对象,但随后我无法在不同的会话中反序列化,因为 Temp 不再位于类路径上。

你们能想出什么办法来解决这个问题吗?必须有一种方法可以将有问题的 Base 对象与 Temp 类隔离开来(在我从中提取 Base 类之后我从不关心)。Base 对象不依赖于 Temp 类中的任何内容。

0 投票
1 回答
299 浏览

java - gwan没有重新编译java文件

我针对运行在 Ubuntu 12.04 服务器上的 gwan 服务器附带的标准 hello.java 和 hello.c 进行了测试。G-WAN 4.3.1 64 位(2013 年 3 月 1 日 17:36:39)

一旦我运行 gwan

须藤 ./gwan -d

我还注意到在没有 daemon 选项的情况下运行相同的行为。

然后浏览到 192.168.0.2:8080/?hello.c 我得到“Hello, ANSI C!”的预期输出。我更改 hello.c 中的文本并刷新浏览器并获得预期的更改。

如果我对 hello.java 文件做同样的事情,在我重新启动 gwan 之前不会出现对文本的更改。

有谁知道我是否遗漏了一些在文件更改时会导致重新编译的简单设置?我正在使用 OpenJdk 7。(刚刚将其安装在全新安装的 ubuntu 12.04 上)我什至尝试将其称为 192.168.0.2:8080/?hello.java&n=1 以消除缓存的可能性,然后是另一个浏览器,然后是另一台机器不同的网络。同样的事情,在我重新启动服务器之前似乎不会发生更改。(对于 java,它适用于 .c 文件)

谢谢-史蒂夫

0 投票
2 回答
760 浏览

java - 通过 Class.forName 加载动态类是否适用于简单的类名

我尝试在一个简单的程序中动态加载类,有趣的是,当我尝试动态加载具有简单名称的类时,它会因 classnotfoundexception 而失败。仅当类位于默认包以外的包下时才会发生这种情况。

但是当我指定完整路径名时,动态加载成功。正在加载的类与 Main 类在同一个包中。

文件 Main.java:

0 投票
8 回答
5576 浏览

java - 如何即时修改 java.lang 类?

我正在寻找一种通过重写字节码并重新加载类来动态地将字段添加到线程的方法,但不确定它是否可能。欢迎任何指点。我找到了一些关于修改和加载类的信息,并且我知道 JRebel 可以无缝地热交换您的代码,但不确定相同的方法/工具是否适用于此。

这里的动机是探索一种理论上更好的替代线程本地对象的方法。如果该方法有效,我应该能够用注释替换线程本地,并且结果应该优于当前的 JDK 实现。

PS:请救救我“万恶之源”

澄清用例:

想象一下,我有一个带有 ThreadLocal 的类:

我想用注释替换它:

但不是生成上面的代码,我想改变 Thread 以便 Thread 现在有一个 Acounter 字段,实际代码将是:

0 投票
1 回答
4359 浏览

java - Java反射,如何在运行时重新加载更改和重新编译的类?

我正在开发一个类似 IDE 的项目,其中用户更改的代码在运行时由 JavaCompiler 重新编译,需要重新加载以执行更改的代码,我正在使用反射来做到这一点,但问题是 ClassLoader 加载的类永远不会得到在重新执行下面的代码时更改它仍然是静态的,但是当我退出完整的应用程序并重新启动它时,我可以看到重新编译代码的变化。以下是我正在使用的代码:

我发现的解决方案之一是在 java2s.com 上,标题为“Dynamically Reloading a Modified Class”:

但它对我不起作用,因为更改后的类永远不会被这段代码重新加载。

如果有任何其他选项可以做到这一点,请帮助我或建议我。

0 投票
3 回答
6738 浏览

android - 使用 Gradle 在 Dalvik 中自定义类加载(Android 新构建系统)

根据Fred Chung 在 Android 开发者博客上对Dalvik中自定义类加载的介绍:

Dalvik VM 为开发人员提供了执行自定义类加载的工具。与从默认位置加载 Dalvik 可执行(“dex”)文件不同,应用程序可以从其他位置(例如内部存储或通过网络)加载它们。

但是,没有多少开发人员需要进行自定义类加载。但是那些按照该博客文章中的说明进行操作的人可能会在使用 Gradle 模仿相同行为时遇到一些问题,Gradle 是 Google I/O 2013 中引入的新的 Android 构建系统。

究竟如何调整新的构建系统以执行与旧的(基于 Ant 的)构建系统相同的中间步骤?

0 投票
0 回答
28 浏览

garbage-collection - JavaScript 执行填满 PermSpace

我正在开发一个服务器端 java 应用程序,它使用 JavaScript 将 HL7 消息转换为 Java 对象。我们为此选择了 JavaScript,因为它很容易在生产系统中部署,无需停机。

但是,我们现在遇到的问题是,每天执行 30.000 次 JavaScript 似乎会在 VM 的 PermSpace 中产生大量的类垃圾。这会导致一些没有吸引力的 stop-the-world 垃圾回收。

你们有谁知道在执行 JavaScript 时避免生成大量类对象的方法吗?

也欢迎任何其他建议。</p>

我们在带有 java 1.5 的 IBM WebSpere 6.1 应用服务器上运行。JavaScript 引擎是 SJP-1.0 (Mozilla Rhino)。

问候索伦

0 投票
1 回答
1112 浏览

java - 如何使用反射在包/jar中查找包含主要方法的类?

我正在使用动态类加载,它需要主类来加载类。如果有一个包/jar 我想获取包含 main 方法的类名?反射可以吗?还是有其他 API?

是否也有任何类似java.net.JarClassLoader.getMainClassName()的方法用于包。