问题标签 [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.
jboss - 从 OSGi-bundle 在 JBoss 7.1.1 中动态加载类时发生 ClassNotFoundException
我在 JBoss 7.1.1 中部署了一个简单的 OSGi 测试包,并尝试通过执行动态实例化 Jacorb ORB
我得到的只是
我已经做了什么:
- 在 JBoss 配置中,
standalone.xml
我为 osgi-subsystem 添加了能力<capability name="org.jacorb" startlevel="1"/>
,以便org.jacorb
加载模块。这已经解决了我的测试包安装失败的问题。 我在我的
Dependencies
-Descriptor中声明了(也尝试过使用和不使用该选项):org.jacorb
MANIFEST.MF
export
Dependencies: org.jacorb export
我将以下内容添加
jboss-deployment-structure.xml
到我的META-INF
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.jacorb" /> </dependencies> </deployment> < /jboss-部署结构>
我还对 ClassLoaders 进行了实验,并意识到 ContextClassLoader 是null
. 但最后,我不能将其作为非测试代码来实现,因为Class.forName()
无法更改为使用特定的类加载器。
那么为什么我会得到这个 ClassNotFoundException 呢?
提前致谢
亚历克斯
android - 安卓。使用动态加载的 jar 中的资源
我最后的希望:)
我正在为出租车服务的司机开发一个 Android 应用程序。在此产品的生命周期内可能会发生许多更新,因此我们希望尝试通过内部应用程序来维护它们。所以我写了一个通过互联网读取 jar 的启动器,我摆脱了在 DexClassLoader 的帮助下启动动态加载的代码。我使用通过清单注册的基本活动,但它使用一种动态加载的适配器来执行实际代码。
这样简单的适配器成功链接到活动并被执行。但我也未能使用 setContentView() 动态设置布局。我手动将所有 R 文件放入动态加载的 jar 文件中,但我仍然没有找到如何使用这些资源的解决方案。
真的没有办法做到这一点吗?如果不是,我认为这是一个大笑话:一个人可以从外部位置动态加载和执行几乎任何代码,但他不能使用来自这些位置的资源:(
java - OneJar 和动态类加载
我们目前正在调查我们的应用程序中 OneJar 的使用(出于多种原因),但我们的应用程序使用了一些 customURLClassloader
来加载应用程序扩展。
当捆绑为“OneJar”Jar 时,我们会遇到ClassNotFound
异常。有问题的类驻留在捆绑的 Jar 中,我们只是依靠类加载器机制来解决父/子关系。
那是。我们有一个通用interface
的存储在捆绑的 Jar 中(应该在父类加载器上下文中)。扩展实现了这一点interface
(允许我们调用扩展)并依赖子类加载器使用父类加载器的资源查找功能的能力。
有没有人对此有任何经验或阐明我们如何解决它。
我会对其他类似的机制感兴趣(用于将我们的库 Jar 捆绑到单个 Jar 资源中,不需要使用将所有内容和 Jar 解压缩到单个文件中)
java - java.lang.IllegalAccessError:尝试从动态加载的子内部类访问父类中的字段
我正在尝试修改一些现有代码,以便能够动态使用子类将数据导入我的程序。但是我遇到了一个问题。我试图动态导入的类之一包含两个子类,它们访问导致 java 抛出 IllegalAccessError 的抽象父类字段。我写了一个小测试程序来演示我遇到的问题。
调用代码创建 URL 类加载器,加载类,然后调用 do work 方法:
Parent 类包含 3 个 int 字段和一个抽象方法:
子类,当调用do work时,它会创建内部类并尝试访问父数据字段并抛出异常:package jarLoader;
公共类 ChildClass 扩展 SuperClass {
仅在我将子类导出为 jar 并在运行时运行加载 jar 的程序后才会发生该错误。
java - JAVA中动态类加载的性能成本
我使用定制版本的 Tomcat 开发应用程序。支持动态类加载,我在测试和开发环境中使用了很多,我也很好奇在生产环境中使用它的影响。
据我所知,由于性能问题,动态类加载不会在生产中使用,因为类加载器会在每次访问时轮询类。
但是,此应用服务器支持配置轮询频率以加载新类。
如果我理解正确,如果我将动态类加载配置为每隔相当长的时间(即 1 小时)轮询一次,我应该避免最不利的性能影响。
在生产中,这种机制的使用方式有限:
1) 无需用户停机的紧急补丁(修复将在第一次关闭时发布)
2) 对我们没有来源的类的永久补丁(遗留第三方库)
这是一个可靠的解决方案吗?
谢谢
android - 动态活动注册
我有这个关于 Android 活动和 AndroidManifest.xml 的问题。当我使用 Java servlet 并想创建一个“基于模块”或类似于基于插件的服务器时出现了这个问题。这工作正常,我可以使用类似于以下的代码方法动态加载我想要的 servlet:Dynamicly add a servlet to the servletConfig。servlet 在服务器启动期间被动态发现和映射。
这里的问题不是如何找到合适的活动,或者如何创建它们的新实例,或者如何启动它们,我已经弄清楚了那部分。我可以遍历我的包并找到适当的活动类,创建它们的新实例并将它们添加到列表中。
我一直在使用interface
所有活动都必须实现的,才能成为有效的活动。这样,我可以为我的应用程序创建新的部分、扩展或新功能,并且一切正常。在我的应用程序中,我有一个用户可以单击的按钮列表,并且按钮列表是通过使用ListView
.
wherecontent
被声明为
并ListButtonAdapter
扩展BaseAdapter
。
所以那里没有问题。问题是我必须在 AndroidManifest.xml 中声明我的每一个活动。该文件就像要显示的可能活动的大列表,而且有点混乱,所以我不打算在这里显示代码。
我意识到我必须在清单中添加一项活动,但我希望一项活动就足够了。我的方法在很多方面都可以看作是前端控制器模式,其中每个活动都负责加载和显示他们需要的活动。
我只是问是否可以在清单中动态注册活动(或允许它们以另一种方式运行),如果没有,是否有其他有效的解决方案?
java - 如何从运行时加载的类中调用构造函数?爪哇
我有一个类加载器,它从 /plugins 文件夹中的所有 jar 文件加载“主”类,这假设所有 jar 都有包插件。(插件名称)包含名为 main 的类。每个主类都有一个名为 main 的构造函数。
类加载成功,但我需要知道如何从加载的类中调用主构造函数。
(此类/类在运行时加载)
我试过用这个:
但我收到此错误:
java - 动态加载抽象工厂
我正在尝试创建抽象工厂模式的一些变体。
工厂应该允许像插件一样插入具体工厂的新实现。
例如
我不确定我是否正确地解决了这个问题,或者我是否应该重新考虑我的设计。
java - 如何控制哪个 ClassLoader 加载一个类?
眼前的情况并不像标题所暗示的那么简单。
通过 JWS 运行的 Java 1.6_17。
我有一个类,假设MyClass
它的一个实例成员变量是来自错误的 3rd 方库的类型,在该类初始化期间,它动态尝试使用Class.forName(String)
. 在其中一种情况下,它碰巧动态调用: .此类Class.forName("foo/Bar")
名称不遵循二进制名称的 JLS 并最终导致java.lang.NoClassDefFoundError: foo/Bar
.
我们有一个自定义项ClassLoader
,我添加了一个 sanitize 方法ClassLoader.findClass(String)
并ClassLoader.loadClass(String)
解决了这个问题。
我可以这样称呼:
myCustomClassLoader.findClass("foo/Bar")
然后加载类没有任何问题。但是即使我提前加载了类,我仍然会在以后得到异常。这是因为在 which 的初始化过程中MyClass
,Bar
它们的代码最终会Class.forName("foo/Bar")
在某个地方调用静态块。如果它尝试使用的 ClassLoader 是我的自定义类加载器,这实际上是可以的。但事实并非如此。它是com.sun.jnlp.JNLPClassLoader
不做这种卫生的,因此是我的问题。
我已确保将Thread.currentThread().getContextClassLoader()
其设置为我的自定义类加载器。但这(如您所知)没有效果。main()
由于我阅读了一些东西,我什至将它设置为我做的第一件事,而且仍然MyClass.class.getClassLoader()
是 JNLPClassLoader。如果我可以强制它不是 JNLPClassLoader 而是使用我的,问题就解决了。
如何通过在类初始化期间进行的静态 Class.forName("foo/Bar") 调用来控制使用哪个 ClassLoader 来加载类?我相信如果我可以强制MyClass.class.getClassLoader()
返回我的自定义类加载器,我的问题就会得到解决。
如果有人有想法,我愿意接受其他选择。
TL;DR:帮助我强制使用我选择的类加载器Class.forName(String)
引用第三方库中的所有调用。MyClass
java - 动态外部类加载
我试图在 Java 中获得动态类加载的经验。因此,欢迎任何意见和帮助。我有一个程序允许用户选择一个文件并对其执行一些操作。动作是“命令”,这些是我尝试加载的类。
它的工作方式是:用户将 .class 文件放在所需的文件夹中,我的程序检查文件夹中的文件,如果 .class 文件中有一个类,它会加载它。
我做到了,但不是我想要的。目前,它仅适用于使用我的程序编译的类。但我想要的是我可以将任何包含类的 .class 文件放在文件夹中,然后我的程序会加载它。这是我现在的代码:
如您所见,我尝试了两种方法,第一种方法目前在评论中。我所做的是检查文件夹中的每个文件并检查它是否是 .class 文件,如果是,我会尝试加载该类(如果有的话)。我猜这两者classLoaders
只能加载他们“知道”的文件,那我怎么能加载一个外部类。