gpt4 book ai didi

java - 当使用 JDT 编译器编译类时,Play 使用什么类加载器?

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:56 25 4
gpt4 key购买 nike

我正在尝试编写一个 Play 插件,在运行时将 jar 文件添加到 Play 类路径中。当调用 onLoad 时,它需要加载一组 jar,以便 JDT 编译器可以使用它们来解析应用程序类中的依赖关系。这些 jar 文件不在标准 lib/ 目录中,因此在 Play 启动时不会加载到系统类路径中。

实际上加载 jar 文件不是问题,我将把我需要的每个 jar 文件指定为 URL,然后将它们传递给 URLClassLoader 的实例。

经过大量研究,我假设 Play 使用的类加载器位于 Play.classloader 中,而我最初的计划是创建自己的扩展 Play.ApplicationClassloader 的类加载器。该类加载器将使用 URLClassLoader 的实例来查找类,然后再委托(delegate)给 Play.ApplicationClassloader 中的标准功能。然后我打算用我的新实例替换 Play 类加载器:

Play.classloader = new MyExtensionClassLoader();

我遇到的问题是 JDT 编译器似乎没有使用 Play.classloader 实例来加载它的类。

所以我有两个问题:

如果 JDT 编译器不使用 Play.classloader 实例,那么它实际使用的类路径是什么?

更一般地说,有人对如何在运行时将 jar 加载到 Play 中以便 JDT 编译器可以使用它有任何建议吗?

最佳答案

我认为这行不通。

Play 有自己的类加载器,它首先检查一个类是否是“托管 Play 应用程序类”(使用 JDT 编译器运行时编译的类),然后它回退到默认的 jvm-one 父类加载器。

因此,所有 playframework 核心类和其他库(例如 Hibernate 类)都从默认的 jvm-classloader 中作为常规类加载。

希望你能理解我:)

-莫滕

关于java - 当使用 JDT 编译器编译类时,Play 使用什么类加载器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7926911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com