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

java - 如何在线程化的 Java 应用程序中确定运行时的主类?

我想在运行时确定我的应用程序启动的类名,即具有 main() 方法的类名,但我在另一个线程中,并且我的堆栈跟踪并没有一直回到原始类。

我搜索了系统属性和 ClassLoader 必须提供的所有内容,但一无所获。这些信息不可用吗?

谢谢。

0 投票
4 回答
4914 浏览

java - 如何通过网络发送课程

我有以下问题:我想通过网络发送一个类型(java.lang.Class)并在另一端“定义”类。

我试过这样:

在接收端:

所以很明显我需要发送类的原始字节码并做一个

但不幸的是,我看不到如何检索已加载类的字节码。我正在寻找类似的东西:

这甚至可以使用标准 JDK,还是有任何小的库可以做到这一点?

0 投票
6 回答
1363 浏览

java - 在编译时使用自定义类加载器

是否可以为 javac (或一些替代的 java 编译器)指定自定义类加载器?

我喜欢这样的壮举,因为它允许我编译使用只有我的特殊类加载器才能找到的类的类。

对于好奇的人:我会编写一个连接到数据库并根据它找到的表创建类的类加载器。

0 投票
5 回答
29715 浏览

java - 如何探索从哪些 JAR 加载哪些类?

有没有办法确定在运行时从哪些 JAR 加载哪些类?

我敢肯定,我们之前都经历过 JAR 地狱。我在项目中遇到过很多故障排除ClassNotFoundException问题NoClassDefFoundError。我想避免在 JAR 中找到一个类的所有实例,并在代码上使用消除过程导致 CNFE 找到罪魁祸首。

任何分析或管理工具会为您提供此类信息吗?

这个问题非常烦人,纯粹是因为我们应该在类被加载时得到这些信息。必须有办法找到它,或者记录下来并找到它,但我不知道会这样做,是吗?

我知道 OSGi 和版本化的包/模块旨在使这成为一个非问题......但它似乎不会很快消失。

注意:我发现这个问题是我与从版本化 jar 加载的类相关的问题的一个子集。

有点相关,这篇文章解释了在 JAR(在当前目录下)或 M2_REPO 中搜索类的策略: JarScan,扫描所有子文件夹中的所有 JAR 文件以查找特定类

也有点相关,JBoss Tattletale

0 投票
5 回答
310 浏览

java - 加载不需要的 Java 类

我目前想知道 JVM 中用于加载从未使用过的额外类的实际开销是多少。

我们有代码迭代类路径中的所有类以找到实现某个接口的类,然后我们加载它们。

这允许将自定义类简单地放在目录中,然后加载和注册它们。

副作用是我们点击了类路径中的每个类,导致类加载。对 JVM 内存有什么影响?

简单地加载类会影响内存吗?

0 投票
3 回答
2600 浏览

java - 我可以通过配置 java.policy 文件来拒绝对 jvm 类的访问吗?

我想在我的jdk6\jre\lib\security\java.policy文件中添加一个禁止创建一些被 appengine 列入黑名单的类。例如,我希望本地 jvm 在应用程序尝试实例化时抛出异常javax.naming.NamingException

有可能的?

我将尝试在这里解释我的具体问题。Google 提供的服务(GAE-google 应用引擎)对可以使用的类有一些限制。例如,不实例化 javax.naming 包中的 JNDI 类。他们还提供了一个测试服务器,可以用来在我的机器上测试这个应用程序,但是这个服务器允许这样的类并且可以执行代码。只有在将应用程序上传到 google 后,您才会发现自己使用了列入黑名单的课程。我在想是否不能在开发 jvm 上执行此类黑名单强制执行。否则,我认为这很容易,他们可能已经提供了这样的策略文件。

0 投票
1 回答
1932 浏览

java - OSGi felix:可以在宿主应用程序和捆绑包之间共享一个类吗?

在我的宿主应用程序中,我尝试实现一个简单的 pushService,通过提供 set 和 get 方法,该服务将用于将名为 Vehicle 的类的实例传输到 OSGi 世界。为了能够使用该服务,我将服务接口和 Vehicle 类都导出到了一个 jar 文件中,并将该文件导入到应该使用该服务的包中。

每次我尝试在我的宿主应用程序中使用 Vehicle 类时,它实例化了 felix 框架和包,我得到一个链接错误。阅读以下博客条目(http://frankkieviet.blogspot.com/2009/03/javalanglinkageerror-loader-constraint.html)后,我明白了为什么会发生此错误。但我不知道如何解决我的问题。

是否可以在宿主应用程序和 OSGi 实例之间共享一个类?也许我必须使用反射而不是导入 jar 文件?我查看了那个库(http://code.google.com/p/transloader/),我不确定这个库是否能够解决我的问题......

BR,

马库斯

0 投票
4 回答
2867 浏览

java - 如何获取 JVM 加载的所有包名称的列表

我需要获取 JVM 加载的所有 java 包的名称。这是为了显示一个包浏览器,就像在 IDE 中找到的一样。我可以通过访问 ClassLoader 类的受保护“包”字段来获取当前类加载器及其祖先的包列表。但是我无法让其他 webapps 加载包,因为它们有自己的类加载器。我在 Weblogic 服务器上测试这个

0 投票
1 回答
1987 浏览

groovy - Groovy rootLoader 为空

从 Eclipse 运行 groovy 脚本时,以下行:

一片空白。当我直接从命令行运行脚本时,这不为空。我怎样才能找出为什么会发生这种情况?

0 投票
2 回答
4229 浏览

java - 奇怪的类路径,.NoClassDefFoundError 错误

编辑:找到解决方案。这很奇怪,不是最好的解决方案,但我只是继续将我的 JAVA CODE (com.*) 类放在 swt.jar 中,以便 swt.jar 和我的类在完全相同的时刻同时加载类加载器。不是最好的解决方案,而是临时解决方案

编辑:我在这里添加了大部分代码:http: //groups.google.com/group/clojure/browse_thread/thread/1d7dd4913b2f9aa7 http://groups.google.com/group/clojure/web/NoClassDefIssue.zip http : //groups.google.com/group/clojure/web/MostCodeIssue.java

这是奇怪的 no classdef not found 错误。这是与我 90% 的代码工作的情况略有不同的场景。请忽略我正在使用 Clojure,我也使用常规 Java 代码完成了此操作,但仍然遇到相同的错误。

理想情况下,我希望对自定义类加载器有所帮助。我最初的想法是我可以创建类加载器,将 jar 的文件路径/url 添加到类加载器中,然后我可以启动我的代码。但显然发生了一些奇怪的事情。

  1. 我有一个动态加载 4-5 个辅助 jar 文件的 jar 文件。它建立在一个简单的 URLClassLoader 之上。我想这样做是因为我可以让用户单击一个 jar 文件并启动应用程序。所以有一个项目是用户必须担心的。

  2. 通过单击此 jar 文件,应用程序从文件系统加载 jar 文件。例如,应用程序加载 swt.jar(Eclipse 的小部件工具包)和其他一些 jars。

3(但不用担心),我的应用程序是基于 Clojure(动态编程语言)构建的,第一个启动的应用程序是这个 Clojure 脚本。我的大部分应用程序都在 clojure 脚本中。

4. 1-3 以内的一切都可以正常工作。应用程序加载和 clojure 脚本运行,SWT GUI 应用程序运行等。

  1. 这是不起作用的部分。

  2. 我有一个现有的 java 库,称之为 my-swt-gui.jar。那也是一个 swt 应用程序。它基本上已经构建了另一个 gui 应用程序。我正在尝试从我当前的 clojure/swt 应用程序加载窗口。由于某种原因,面向 JAVA 的库无法识别 SWT,并且出现 noclassdef 错误。

这就是奇怪之处。我将确定我认为可能存在异常的地方。

Entitis:A. 面向 java 的类加载器。在 java 类加载器中,我启动了 clojure 应用程序。SWT 和其他 jar 文件使用这个类加载器加载。B. 节实体调用的面向 Clojure 的代码 clojure 代码是一个基于 swt 的 GUI 应用程序。B 工作正常。C. 包含另一个 GUI 窗口的 Java 代码。出于某种原因,这个库不会加载,我得到了错误,noclassdef。

注意:我知道 SWT 类实际上在类路径中,否则我会得到 NoClassFound 异常。我没有得到那个例外。其他事情正在发生。

注意:SWT 包含 win32 dll 是否也是一个问题?也许第一次访问win32 dll jar可以,但是使用java代码它不起作用?但这很奇怪。为什么 SWT 会起作用,然后又不起作用?

我无法向您展示所有代码,希望可以向您展示相关的部分。

这是主要的类加载器代码:


这就是我尝试加载 java swt 窗口的方式。我试图打印出尽可能多的关于类加载器并更改为不同的类加载器。

公共静态最终无效createPDFWindowShell(IStartService服务,最终对象外壳,最终对象globalClassLoader)抛出异常{

}


这是错误:

-