gpt4 book ai didi

java - 在 Java 中加载相互依赖的 groovy 类

转载 作者:行者123 更新时间:2023-11-30 11:16:04 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何在运行时在 Java 中加载两个相互依赖的 Groovy 脚本。如果我有两个 groovy 脚本,例如:

A.groovy

import B

class A {
A() {
B b = new B()
}
}

B.groovy

import A

class B {
B() {
A a = new A()
}
}

我想将它们作为 java 类加载,但是当我运行时:

ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
loader.parseClass(new File("A.groovy"));

我得到错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
A.groovy: 1: unable to resolve class B
@ line 1, column 1.
import B

我当然明白错误的原因,但是有没有办法在运行时加载这些类,尽管它们相互依赖?谢谢!

最佳答案

必须启用 GroovyClassLoader 才能在类路径上找到 B.groovy。通常这意味着您更改应用程序的类路径以包含脚本的根目录。由于此处没有脚本包,并且您使用了 new File("A.groovy"),因此我假设它在当前目录中。

如果不想改变应用的类路径,也可以调用addURL添加脚本所在的路径。

还有一件事要提...... parseClass 总是会创建一个新解析的类。您可能想尝试使用标准的 loadClass 调用来避免多次编译该文件。但是当然这只有在您修复了 GroovyClassLoader 的查找之后才有效,因为使用 loadClass,GroovyClassLoader 也必须以与查找 B.groovy 相同的方式查找 A.groovy

关于java - 在 Java 中加载相互依赖的 groovy 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25073006/

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