gpt4 book ai didi

java - 与默认类加载器和 PlayFramework 自定义类加载器冲突

转载 作者:行者123 更新时间:2023-12-01 15:12:25 25 4
gpt4 key购买 nike

我正在开发一个项目,我们使用 play 框架 (play-1.2.5) 以及基于自定义 Google GUICE 的应用程序模块。

我在代码中遇到当前异常:

play.exceptions.JavaExecutionException: loader constraint violation: when resolving method "mypackage.Runner.queueJob(Lmodels/Job;)V" the class loader (instance of play/classloading/ApplicationClassloader) of the current class, controllers/Jobs, and the class loader (instance of sun/misc/Launcher$AppClassLoader) for resolved class, mypackage/Runner, have different Class objects for the type models/Job used in the signature
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "mypackage.Runner.queueJob(Lmodels/Job;)V" the class loader (instance of play/classloading/ApplicationClassloader) of the current class, controllers/Job, and the class loader (instance of sun/misc/Launcher$AppClassLoader) for resolved class, mypackage/Runner, have different Class objects for the type models/Job used in the signature
at controllers.Jobs.listJobs(Jobs.java:19)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
... 1 more

根据我当前的分析,问题似乎与源文件夹结构以及应用程序的初始化方式有关。

我有以下结构:

project/app/{ Play Controller 和模型等}project/src/{我的项目特定类实现业务逻辑}

启动 Play 应用程序时,我还会在“src”文件夹中启 Action 业(来自 Play 托管应用程序类的外部)。似乎发生的情况是,这些作业访问的模型和其他类此时使用默认类加载器加载,当我尝试从 Play 应用程序类( View 等)使用这些类时,我收到此错误告诉我使用的类是使用不同的类加载器创建的,因此具有不同的签名。

因此,总而言之,默认类加载器和 Play 类加载器都会加载相同的类,并且根据我调用它们的方式,我会收到错误匹配的错误。

我已经能够通过简单地将所有源文件移动到项目/应用程序/源文件夹中来解决这个问题,但我想将 src 文件夹与 Play 应用程序文件夹分开。

  1. 有人知道我的分析是否正确吗?
  2. 如果 1. 为"is",是否可以将 play 配置为不仅从应用程序文件夹加载类,还从我的 src 文件夹加载类?

欢迎任何意见。

最佳答案

您可以尝试将“src”文件夹附加到 Play.javaPath 列表中,以便让 Play 编译并加载您的类。

关于java - 与默认类加载器和 PlayFramework 自定义类加载器冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153248/

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