Tag: 加载器

为class.getResource()定义根类路径

我在Eclipse(windows)中使用java,我正在尝试使用: myClass.getResource(“/image.jpg”), 而image.jpg存在于root loacation“myProject /”中。 它返回null。 我检查了很多其他线程,但没有一个解决了我的问题。 所以我试着评估一下: this.getClass().getResource(“/”).getPath(); 它返回“myProject / build / classes”。 所以我检查了这个目录的项目配置,并找到了完全相同的目录 Java构建路径 – >源 – >默认输出文件夹 我的问题是: 为什么我的资源的默认目录是输出文件夹? 如上所述,我想从另一个文件夹中获取资源,但尝试调用“/../”不起作用…如何加载其他未嵌套在我的类dir中的资源? (我可以改变我的输出目录,但我认为它会非常难看…)

在不同的JAR中加载两个类

我在不同的JAR中有两个具有相同包的类。 在之前的版本中,两个类都是相同的,所以我在加载它们时没有任何问题。 现在,其中一个添加了一个新方法,如果我想访问它,我不仅应该使用该包导入类,还需要确保具有正确类的jar首先出现在类路径中。 即javac -classpath “%classpath%;a.jar;b.jar” MyClasses.. 其中a.jar有我的新方法的类。 现在,当我的应用程序投入生产时,如何将其部署为EAR文件,以及WEB-INF / lib下的所有库,我该如何确保这一点? 我怎么知道哪个jar子优先于另一个? 是a.jar的字母顺序是否优先于b.jar? 我已经阅读了这个safe-class-imports-from-jar-files线程,并且开始了解编写自定义类加载器,但有更简单的解决方案吗? 我只是要在当前项目中的整个JAR中访问此方法,编写类加载器似乎有点矫枉过正。 请不要问我“为什么在不同的JAR中同一个包有同样的地狱?” 这完全不受我的控制 ,需要一些时间来纠正这个问题。 环境详细信息:1.5 Java上的IBM WAS 6.1。 如果我没有多大意义,请问我更多问题。 提前致谢!

是否可以在运行时指定System ClassLoader加载.class文件?

我正在编写一个用于赋值的静态分析工具,它使用ASM库分析Java字节码。 我们使用的ASM的一个部分需要(或者至少看起来需要)从ClassLoader加载类。 我们希望该工具能够分析.class文件,而不需要它们在类路径上。 我们已经在运行时从指定的目录加载.classes并使用InputStream读取它们。 在大多数情况下,这对于ASM是可接受的。 有一些类,例如SimpleVerifier ,它们尝试加载类。 在这种情况下,是否可以注册要加载的.class文件,以便调用Class.forName()来加载它们? 或者有一种简单的方法来扩展ClassLoader以允许它吗? 编辑: URLClassLoader上的信息很有用。 不幸的是,使用Thread.currentThread().setContextClassLoader()到它的实例在这种情况下不起作用。 我正在调用的库代码使用它在使用getClass().getClassLoader()进行实例初始化时检索的加载器。 当我设置URLClassLoader时,该类尚未初始化,所以我猜contextClassLoader不加载该类。 我是否正确理解了答案? 是否可以使用URLClassLoader加载第三方类?