【发布时间】:2014-11-18 15:49:14
【问题描述】:
我得到一个典型的错误,因为找不到弹簧上下文:
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
创建弹簧上下文的类以“奇怪”的方式实例化。有一个 java 进程,创建一个 groovy 类加载器并添加所需的类路径条目(包括带有 spring 上下文的 jar)。使用这个类加载器将执行一个 groovy 脚本,该脚本反过来执行一个 java 类,在静态 init 块中创建一个 spring bean。不幸的是,由于上述异常,这失败了。
如果使用 -cp jarContainingContext 调用初始 java 进程,则它可以工作。包含 spring 上下文的 jar 还包含创建 spring 上下文的 java 类。因此,我确定 jar 在类路径中。
groovy 类加载器是否可能与 spring 的类加载器不同(如果有单独的类加载器)?
java MyClass -> 使用所有必需的类路径条目创建 groovy 类加载器 -> runscript -> groovy 脚本 -> 从还包含 spring 上下文的库中运行 java 类 -> 尝试在静态初始化程序中创建 bean -> 失败
这整个链条听起来很奇怪,但我无法真正改变它。我根本无法理解问题出在哪里。因为创建 spring 上下文的 java 类将被 groovy 类加载器找到,而不是同一个 jar 中的 springContext。似乎有 2 个单独的类路径。
【问题讨论】:
标签: spring groovy classloader