classloader相关内容
我已经阅读了很多关于 Java 类加载器的文章,但到目前为止我还没有找到这个简单问题的答案: 我在 jars v1.jar 和 v2.jar 中有两个版本的 com.abc.Hello.class.我想在我的应用程序中同时使用两者.最简单的方法是什么? 我不希望这么简单,但沿着这些方向的东西会很棒: Classloader myClassLoader = [包含 v1.jar 并忽略
..
我正在尝试为旧框架实施一些单元测试.我正在尝试模拟数据库层.不幸的是,我们的框架有点旧,没有完全使用最佳实践,因此没有明确的关注点分离.我有点担心尝试模拟数据库层可能会使 JVM 加载大量甚至不会使用的类. 我不太了解类加载器,所以这可能不是问题.有没有办法在特定 ClassLoader 加载的所有类上达到峰值,以证明幕后发生了什么? 解决方案 注意使用 java -verbose
..
我在我的独立应用程序中使用 Maven,并且我想将 JAR 文件中的所有依赖项打包到一个库文件夹中,如以下答案之一所述: 我如何创建使用 Maven 的具有依赖项的可执行 JAR? 我希望我的最终 JAR 文件有一个包含依赖项作为 JAR 文件的库文件夹,而不是像 Maven 那样以文件夹形式放置依赖项的 maven-shade-plugin.m2 文件夹中的层次结构. 嗯,实际
..
我在 eclipse helios 中创建了一个带有单个子模块的最小 Maven 项目. 在 src/test/resources 文件夹中,我放置了一个文件“install.xml".在文件夹 src/test/java 中,我创建了一个包含单个类的包: @Testpublic void doit() 抛出异常 {URL url = this.getClass().getClassLo
..
有什么办法可以让Android应用程序在运行时下载和使用Java库? 这是一个例子: 想象一下,应用程序需要根据输入值进行一些计算.应用程序要求提供这些输入值,然后检查所需的 Classe 或 Method 是否可用. 如果没有,它会连接到服务器,下载所需的库,并在运行时加载它以使用反射技术调用所需的方法.实现可能会根据各种标准(例如下载库的用户)而变化. 解决方案 抱歉
..
这是我的示例抽象单例类: 公共抽象类 A {protected static 一个实例;公共静态一个 getInstance() {返回实例;}//...其余的抽象方法...} 这是具体的实现: public class B extends A {私人 B() { }静止的 {实例 = 新 B();}//...我的抽象方法的实现...} 不幸的是,我无法让 B 类中的静态代码执行,所以实例
..
我想创建一个 parent-last/child-first 类加载器,例如一个类加载器,它会首先在子类加载器中查找类,然后才委托给它的父类加载器来搜索类. 说明: 我现在知道要获得完整的 ClassLoading 分离,我需要使用类似 URLClassLoader 传递 null 作为它的父级的东西,感谢 这个答案我之前的问题 然而,当前的问题来帮助我解决这个问题: 我的
..
我想知道是否以及如何动态加载 dex 或 class 文件在 dalvik 中,我编写的一些快速测试函数是这样的: public void testLoader() {输入流中;内里;字节[]数据=新字节[2048];尝试 {in = context.getAssets().open("f.dex");len = in.read(data);附寄();DexFile d;Class c =de
..
例如我有类 Singleton 和静态字段 instance: 公共类单例{私有静态单例实例;//其他代码,构造,getter,不管} 我可以用两个不同的类加载器两次加载这个类.我怎么能避免呢?这是不安全和危险的. 另外,如果我将 instance 设置为 null,它是否会为两个类都设置为 null? Singleton singleton = Singleton.getInstan
..
除了一些非常模糊的高级定义,例如“摆脱你的永久代问题"(它没有,顺便说一句). 我查看了 Sun 的/Oracle 网站,甚至选项列表 实际上并没有说明它的作用. 根据标志的名称,我猜测 CMS 垃圾收集器在默认情况下不会卸载类,并且此标志将其打开 - 但我不能确定. 解决方案 更新 此答案与 Java 5-7 相关,Java 8 已修复此问题:https://blogs.or
..
我现在不在 IDE 面前,只是在查看 API 规范. CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();如果(源代码!= null){URL jar = src.getLocation();} 我想确定一个类来自哪个 JAR 文件.是这样吗? 解决方案 是的.它适用于除引导类加载器加载的类之外的所有
..
在我的办公室,仅仅提到 Xerces 这个词就足以激起开发人员的杀气.粗略地看一下关于 SO 的其他 Xerces 问题似乎表明几乎所有 Maven 用户都被“触及"过.在某个时候遇到这个问题.不幸的是,理解这个问题需要对 Xerces 的历史有所了解... 历史 Xerces 是 Java 生态系统中使用最广泛的 XML 解析器.几乎每个用 Java 编写的库或框架都在某种程度上使用
..
在 Java 中,您可以使用相同的 API 但使用不同的 URL 协议加载各种资源: file:///tmp.txthttp://127.0.0.1:8080/a.properties罐子:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class 这很好地将资源的实际加载与需要该资源的应用程序分离,而且由于 URL 只是一个字符串,因此资源加载也很容
..
线程的上下文类加载器和普通的类加载器有什么区别? 也就是说,如果Thread.currentThread().getContextClassLoader()和getClass().getClassLoader()返回不同的类加载器对象,会使用哪一个? 解决方案 每个类将使用自己的类加载器来加载其他类.所以如果 ClassA.class 引用 ClassB.class 那么 Class
..
Java 中有没有办法在通过类加载器从 jar 中检索的资源上构造 File 实例? 我的应用程序使用 jar(默认)或运行时指定的文件系统目录(用户输入)中的一些文件.我正在寻找一种一致的方式 a) 将这些文件作为流加载 b) 分别列出用户定义目录或jar中目录的文件 编辑:显然,理想的方法是完全远离 java.io.File.有没有办法从类路径加载目录并列出其内容(其中包含的文
..
我被要求构建一个能够在运行时加载新代码(扩展)的 Java 系统.如何在代码运行时重新加载 jar 文件?或者我如何加载一个新罐子? 显然,由于持续的正常运行时间很重要,我想添加重新加载现有类的功能(如果它不会使事情变得太复杂). 我应该注意什么?(将其视为两个不同的问题 - 一个关于在运行时重新加载类,另一个关于添加新类). 解决方案 用现有数据重新加载现有类可能会破坏事情.
..
我知道这对于有经验的程序员来说可能是一个愚蠢的问题.但是我有一个库(一个 http 客户端),我的项目中使用的一些其他框架/jar 需要它.但它们都需要不同的主要版本,例如: httpclient-v1.jar =>cralwer.jar 需要httpclient-v2.jar =>需要restapi.jarhttpclient-v3.jar =>foobar.jar 需要 类加载器是否足
..
有谁知道如何以编程方式找出 java 类加载器实际从何处加载类? 我经常在类路径很长并且手动搜索不是真正的选择的大型项目中工作.我最近遇到了一个问题,其中类加载器加载了错误版本的类,因为它位于两个不同位置的类路径上. 那么我怎样才能让类加载器告诉我实际的类文件来自磁盘的哪个位置? 编辑:如果类加载器由于版本不匹配(或其他原因)而实际上无法加载类,我们是否可以找到什么文件?它在阅读
..
如何在整个类路径中搜索带注释的类? 我正在做一个库,我想允许用户注释他们的类,所以当 Web 应用程序启动时,我需要扫描整个类路径以获取某些注释. 我正在考虑 Java EE 5 Web 服务或 EJB 的新功能.您使用 @WebService 或 @EJB 注释您的类,系统会在加载时找到这些类,以便远程访问它们. 解决方案 使用 org.springframework.con
..
我想知道 Class.getResource() 和 ClassLoader.getResource() 有什么区别? 编辑:我特别想知道文件/目录级别是否涉及任何缓存.如“目录列表是否缓存在类版本中?" AFAIK 以下应该基本上做同样的事情,但他们不是: getClass().getResource()getClass().getClassLoader().getResource
..