问题标签 [groovyclassloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
100 浏览

jenkins - 从 SCM jenkins 管道开始,没有找到合适的 ClassLoader 来抓取 Wenn

为什么如果我运行管道脚本没有问题,如果我从 SCM 运行它我得到

没有找到合适的 ClassLoader 可供抓取

我怎样才能解决这个问题?

0 投票
1 回答
271 浏览

java - 在 Java 应用程序中运行和优化 Groovy Scripts 动态执行

我一直在探索在 java 应用程序中动态运行 groovy 脚本的方法。

我经历过的方法如下: 1. Groovy Shell

  1. 使用 GroovyClassLoader。

我有两个 java 应用程序。其中之一是 GUI 的后端,它在执行数据时存储数据。两者之间没有共同的缓存。为了避免每次编译的开销,我正在考虑先在应用程序B中编译应用程序,然后缓存它(这样也避免了内存泄漏)。另外,我尝试存储最初编译脚本生成的类文件,然后以字节的形式将其存储在数据库中,但到目前为止还没有成功。

但是,我不确定这是否是一种优化,或者 Groovy Shell/Groovy 类加载器是否已经缓存了生成的类文件。最好的方法应该是什么?

此外,预计脚本并不简单,那么在 Groovy Shell 或 Groovy 类加载器中哪种机制会更好?(另外,探索 GrooyScriptEngine,但似乎简单脚本不需要它)。

0 投票
0 回答
1117 浏览

java - 如何确认我的 ClassLoader 结构中没有重复的类?

我正在使用 GroovyClassLoader 加载多个具有类名和包结构的 groovy 文件(不是脚本)。我相信我遇到了为同一个类加载多个类文件的问题,尽管基于这种类型的错误消息,每个文件只调用一次 parseClass:

org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将具有类“TickIt.Pizza”的对象“TickIt.Pizza@3eea9be9”转换为类“TickIt.Pizza”

此外,我在某些情况下使用静态设置器来存储变量,并且隐式调用 Class 似乎表明存在 Class 的其他副本,因为在设置变量后我可以引用它并且它似乎是空的。

我做了一个小测试来试图证明这个问题,它似乎表明确实加载了多个类。通过在我的 GroovyClassLoader 上的加载类中找到匹配的类,我可以与隐式类进行比较。对于我的 DockingBay 类,我有一个名为班车的静态地图。已加载的 DockingBay 类具有值,但隐式调用 Dockingbay.shuttle 是空的。见下文:

输出:

这是我将文件加载到 GroovyClassLoader 的代码,我称之为 PartsStore。

我希望无论我从哪里调用我的类 DockingBay(假设它加载在同一个 GroovyClassLoader 上),我都会收到加载在 ClassLoader 中的同一个类。看来我不是。我注意到比较类的类加载器表明它们是不同的(但一致的)内部加载器。为什么?

0 投票
2 回答
84 浏览

java - Java:GroovyClassLoader:在 Groovy 类中找不到方法的符号

我正在尝试在 java 中使用 GroovyClassLoader 来执行 Groovy 类中的方法。

我创建了一个 Java 类,公共方法创建 GroovyClassLoader 的实例,parseClass 然后创建类的新实例,调用类中的方法。

错误:Gtest.java:22:错误:找不到符号 obj.doIt(); ^ 符号:方法 doIt() 位置:Object 1 类型的变量 obj 错误

0 投票
1 回答
768 浏览

java - 对 parseClass 的 GroovyClassLoader 调用成功,即使代码无法编译

我正在尝试将 Groovy 脚本作为类动态加载,但即使脚本的代码未编译,也会创建类对象。

例如,我的用于加载 Groovy 脚本的 Groovy 代码的简化版本如下:

显然,该代码blah blah blah不是合法的 Groovy 脚本。然而,为这个动态代码成功地创建了一个类对象。根据GroovyClassLoader 的 Javadoc,对于parseClassCompilationFailedException这种情况,应该抛出方法a 。

怎么可能仍然为损坏的代码创建该类,以及如何根据代码是否编译成功地从动态 Groovy 源代码创建一个类?我做了很多研究和实验,但无济于事。

0 投票
0 回答
118 浏览

java - 如何将编译好的 Groovy 脚本存储在数据库中,并在需要时获取?

我有一个应用程序多次使用相同的 groovy 脚本。每次,它都会在运行时一次又一次地编译相同的脚本。为了提高性能,我只需要编译一次脚本并将编译后的脚本存储在数据库中,以后可以获取并与绑定变量一起使用。

谢谢,

0 投票
1 回答
131 浏览

groovy - 如何使用 GroovyClassLoader 加载 GroovyCompiled 类或在 loadClass 的情况下如何设置委托

我正在尝试加载在构建期间编译并作为 .class 文件放置在类路径中的类。为此,我尝试了

这将成功加载 java 代码中的类文件,但它使用 AppClassLoader 来加载这个而不是 GroovyClassLoader。

我了解 GroovyClassLoader 在内部使用 AppClassLoader 找到它。但有一个区别:

正如gos.parseClass(string)将给我们一个从 GroovyClassLoader 解析的类。

在第二种情况(parseClass)中实例化类文件时,我们可以委托设置委托,但在第一种情况(loadClass)中,我们没有任何委托。

执行 loadClass 或通过 GroovyClassLoader 加载类文件的任何方式后如何设置委托。

负载等级

0 投票
0 回答
17 浏览

java - 如何在 GroovyClassLoader 中使用 `addClasspath()` 方法

我需要从 DataBase 加载一堆 groovy 脚本,如下所示:

当调用 parseClass 方法时,会引发此异常:

我看到了这个问题:GroovyClassLoader and imports。我知道这个错误是由RuleDataB未加载引起的。

脚本是这样的:

令我困惑的是如何使用该addClasspath()方法。我的脚本是从 BD 加载的,我应该转换StringFile吗?

我还需要reload通过更新这个 groovy 类ScriptDAO