问题标签 [urlclassloader]
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.
java - 在 clojure 中以编程方式编译和加载 java 源文件
在关于 SO 的这个问题之后,我遇到了一些问题:如何以编程方式编译和实例化 Java 类?
以下是我的clojure翻译:
一切都很好,直到最后一行。有一个已编译的 Test.class,如果我将文件复制到 target/classes/test 文件夹中,我可以加载它。但是在最后一行,我得到一个ClassNotFoundException
. 我错过了什么?
java - 了解 urlclassloader,如何访问加载的 jar 的类
我试图了解如何使用 URLClassLoader 访问/使 jar 文件可用。
首先,我正在加载 jar 文件
打印输出显示了 jgroups-3.4.2.Final.jar 中声明的字段,但随后会引发 classnotfound 错误。
我不明白为什么打印输出显示该类已加载但找不到?
谢谢艺术
java - 调用具有导入依赖项的类的 java urlclassloader
在 urlclassloaders 的另一个线程中获得一些帮助后 -了解 urlclassloader,如何访问加载的 jar 的类 我有一个后续问题,因为我认为我没有正确解决这个问题。
myPackageA.start
有一个 urlclassloader 调用具有使用以下代码
形成myPackageB.comms
myPackageB.comms
的依赖项import org.jgroups.JChannel
/home/myJars/jgroups-3.4.2.Final.jar
通常我会调用上面的代码java -cp /home/myJars/jgroups-3.4.2.Final.jar:myPackageB myPackageB.SimpleChat
并按预期运行。
我的问题是如何在脚本中设置 -cp 以便在使用以下代码调用时导入myPackageB.SimpleChat
工作java -cp myPackageA.jar myPackageA.start
谢谢
艺术
java - 以编程方式确定不需要导入的 JRE 类列表
我需要以编程方式找出可以在编译单元中引用哪些 JRE 类而不被导入(用于静态代码分析)。我们可以忽略包本地类。根据 JLS,包中的类java.lang
是隐式导入的。输出应该是二进制类名的列表。该解决方案应该适用于普通的 Java 5 及更高版本(没有 Guava、Reflections等),并且与供应商无关。
欢迎任何可靠的基于 Java 的解决方案。
以下是我迄今为止尝试过的一些注意事项:
乍一看,问题似乎归结为“如何从包中加载所有类?”,这当然实际上是不可能的,尽管存在几种解决方法(例如this和this,以及那里链接的博客文章)。但我的情况要简单得多,因为不存在多个类加载器问题。java.lang
东西总是可以由系统/引导类加载器加载,你不能在那个包中创建你自己的类。问题是,系统类加载器不会泄露其链接的方法所依赖的类路径。
到目前为止,我还没有设法访问系统类加载器的类路径,因为在我使用的 HotSpot VM 上,Object.class.getClassLoader()
返回null
,并且Thread.currentThread().getContextClassLoader()
可以通过委托加载java.lang.Object
,但它本身不包含类路径。所以像这样的解决方案对我不起作用。此外,保证的系统属性列表不包括具有这种类路径信息的属性(例如sun.boot.class.path
)。
如果我根本不必假设存在rt.jar,而是扫描系统类加载器使用的资源列表,那就太好了。对于供应商特定的 JRE 实现,这种方法会更安全。
java - ClassLoader 类依赖(插件)
我想问一下 UrlClassLoaders。我编写了一个运行良好的主 .jar 文件。现在我想让它能够从它的一个文件夹中加载插件。我一直写到它在文件夹中找到 .jar 文件,可以在其中列出它们的类(它们的名称、路径)。问题是当我要求他找到该类(以创建它的实例)时,他们不会找到它从我的主 jar 文件继承的类,如下所示:
因此,当我要求 UrlClassLoader 解析“ ExpansionA ”类时,它将在插件 jar 中搜索“ Expansion ”类而不是 MainJar,并且插件 jar 中没有“ Expansion ”类,因为它从 MainJar 继承为资源库...并在defineClass方法时引发 NoDefFoundForClassError 异常。我怎样才能告诉他也检查 MainJar 中的课程?(它不仅是关于 1 个类,而且我希望插件能够从 MainJar 继承任何类)。你能帮我吗?
java - 如何指定 class.getClassLoader() 返回哪个类加载器?
我有一个项目,其中包含一个通用部分和几个“特定于实现”,通过包装器使用,其中使用 URLClassLoader 加载实现(它具有公共类加载器作为父级)。现在,有一个由 @Foo 注释的通用类 A,它是特定于实现的。
A 首先通过特定于实现的代码加载,因此它以 URLClassLoader 开头,但它尝试在父级中加载 - 它可以加载类,因为它是通用类(我需要能够在通用代码中实例化类,尽管我不需要访问注释)。
然后,实现检查注解 @Foo 但没有找到,因为 Java 运行时尝试通过 A.class.getClassLoader() 加载注解,这不是通用的。
显然,我无法更改 Java 运行时,但是有没有办法让 URLClassLoader 声明要由它加载的类(但将脏工作保留在父级上 - 并让他注册该类以便我可以实例化它由通用父级)?
java - 虽然我的课程已加载,但 Class.forName 会抛出 ClassNotFoundException
代码如下
它的作用是将所有类加载到我放置在主目录中的 jar 文件中。
我的 HelloWorld 就像在https://github.com/HarishAtGitHub/doc/blob/master/makeExecutableJar/HelloWorld.java
jar 是使用上面提到的我的 github 帐户中的说明获得的。
c.newInstance()
作品。
我是怎么确认的?
静态块被执行了......
但Class.forName("HelloWorld")
抛出ClassNotFoundException
也findLoadedClass("HelloWorld"
) 为空..
我不明白为什么会出现这种奇怪的行为?
请指导...
java - 如何在不加载类的情况下从 jar 加载方法?
我正在尝试读取一个 Jar 文件,其中包含几个类并在其中定义了方法。我想从所有类中获取所有声明的方法而不加载单个类。可能吗?
这是我加载 jar 文件和方法的方式(目前使用类名)。
提前致谢
java - 如何动态加载目录中的所有jar?
您好我正在创建一个插件,它需要动态加载 jar 并访问这些 jar 的类和方法。我尝试使用 URLClassLoader 并且能够加载类,如下所示
但是这样做的问题是我们必须通过单独指定它们的名称来将类加载到 classLoader 中。我想要的是从类路径中的所有 jar 中加载所有类并随时访问它们。
URLClassLoader 可以吗?如果不是,其他选择是什么?OSGI 在实现这一目标方面有多大帮助?
提前致谢!
java - Java 类加载器不加载类中导入的类
我正在尝试使用 ClassLoader 加载一个类,如下所示
如果示例类导入其他类。JVM会自动加载该类吗?因为它给我一个错误 NoClassDefFoundError 是另一个类 Example2 是在类 Example 中导入的并且无法加载。
我真的不知道发生了什么。
提前致谢