使用 groovy 类加载器找不到 Spring 上下文



我得到一个典型的错误,因为找不到弹簧上下文:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsingXML document from class path resource  nested exception is java.io.FileNotFoundException: class path resource  cannot be opened because it does not exist

创建 spring 上下文的类以"奇怪"的方式实例化。有一个java进程,创建一个时髦的类加载器并添加所需的类路径条目(包括带有spring上下文的jar)。使用类加载器将执行一个 groovy 脚本,该脚本又执行一个 java 类,在静态 init 块中创建 Spring bean。不幸的是,由于上述异常,这失败了。

如果使用 -cp jarContainingContext 调用初始 java 进程,则它可以工作。包含 spring 上下文的 jar 还包含创建 spring 上下文的 java 类。因此,我确定 jar 在类路径中。

时髦的类加载器是否可能与弹簧的类加载器不同(如果有单独的)?

java MyClass -> 创建包含所有必需类路径条目的 groovy 类加载器 -> runscript -> groovy 脚本 -> 从也包含 spring 上下文的库中运行 java 类 -> 尝试在静态初始值设定项中创建 Bean -> 失败

这整个链条听起来很奇怪,确实如此,但我无法真正改变它。我根本无法理解问题出在哪里。因为创建 spring 上下文的 java 类将被 groovy 类加载器找到,但不会由同一 jar 中的 springContext 找到。似乎有 2 个单独的类路径。

问题实际上是类加载器。SpringBatch 有一个错误,可能会使用系统类加载器。因此,创建了一个类加载器地狱。

我们发出了拉取请求来解决此问题。

最新更新