问题标签 [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 投票
2 回答
1247 浏览

java - 使用 GroovyClassLoader 与 GroovyShell 的优缺点是什么

我需要从我的 Java 应用程序中运行一些外部代码,这些代码将经常更新并且与应用程序的其余部分正交。由于我不会为每次代码更改(以及其他原因)重新部署整个应用程序,因此我们选择对此代码使用groovy,并将其存储在文件系统或数据库中。

根据我了解的文档,我有两种运行代码的方法 - 使用GroovyShellGroovyClassLoader(eval 不适合这里)

每种方法的优缺点是什么?

0 投票
4 回答
6540 浏览

groovy - 从 gradle 中运行 groovy 脚本

创建运行 groovy 脚本的 gradle 任务的最佳方法是什么?我意识到 gradle 构建文件很时髦,所以我认为可以做这样的事情:

如果 bar.groovy 正在使用@Grab注释甚至进行简单的导入,我在尝试此操作时会遇到各种奇怪的错误。我想创建一个gradle任务来处理这个问题,以便我可以重用类路径定义。

将示例目录移动到 src 目录中的某个地方会更好吗?什么是最佳实践?

0 投票
2 回答
4476 浏览

java - 加载类路径中不存在的类

假设我使用 Groovyc 编译了一个 Groovy 脚本,它在文件系统中生成了一个或多个 .class 文件。从 Java 应用程序中,如何动态地将这些类添加到类路径中以加载它们并调用它们的方法?目标是预编译 Groovy 脚本并将它们存储到数据库中,以便可以从脚本的编译版本执行评估。

0 投票
4 回答
3691 浏览

grails - Groovy 动态调用类和查找方法不起作用?

我试图建立一个类似于以下的动态查询:

但它不起作用。

如果我正在尝试这个,一切都很好:

如何在 find 中使用动态域类名?

0 投票
1 回答
1296 浏览

groovy - 无法使用 GroovyClassLoader 在类中动态更改或添加方法

我尝试从另一个 groovy 脚本动态更改和添加在 groovy 脚本中定义的类的方法,但如果我直接在 .metaClass 中使用类名,我无法弄清楚它为什么会起作用。但如果我使用 GroovyClassLoader 加载类(我需要这样做!)。

在一个文件“MyTest.groovy”中,我有

另一个文件“suite.groovy”包含

使用第一种方法,我得到了预期的结果:

但是第二个我得到

有趣的是,修改现有方法不起作用,但也不例外,但尝试添加新方法会抛出一个。我认为它必须对使用的类加载器做一些事情,但无法弄清楚究竟是什么以及要改变什么!对于第一个版本,这里是类加载器,称为:

对于第二个版本:

欢迎任何想法!
弗兰克

0 投票
1 回答
1283 浏览

eclipse - Grails 1.4.0.M1(使用 STS 2.7.0.M2)GantBuilder 的 NoClassDefFoundError

我刚刚升级到...

  • 圣杯 1.4.0.M1
  • Groovy 1.8.0
  • STS 版本:2.7.0.M2 构建 ID:201106101000 - 适用于 Mac 的 64 位 Cocoa 版本
  • 我有 OS X 10.5.8。使用 JVM 1.5.0

当我在现有项目上运行 grails 命令时,例如“create-app”或“upgrade”,我得到 GantBuilder 的以下 NoClassDefFoundError。(完整跟踪见下文)

该论坛针对类似问题提出的解决方案是缺少 gant_groovy1.8-1.9.5.jar。我已将它直接添加到项目中,也添加到了 groovy/lib 文件夹(并转到 STS -> 首选项 -> Groovy -> 编译器 -> 更新所有 Groovy 类路径容器),但我仍然收到错误消息。(当我将 gant_groovy1.8-1.9.5.jar 添加到 groovy/lib 时,它是一个单独的 groovy 下载,我不确定 STS 将哪个 groovy/lib 文件夹用于内部 grails shell 命令或如何查看 STS groovy类路径)

有没有人有任何想法?

0 投票
1 回答
1520 浏览

java - Beanshell 不允许我将 jar 添加到“默认”JRE 类加载器?

我有一个关于Beanshell的问题,我在任何地方都找不到答案。我只能以 2 种方式中的 1 种方式运行 Beanshell 脚本:

  1. 其中 Classpath 在调用 Beanshell 之前定义,而 Beanshell 使用 JRE 默认类加载器。

  2. 在启动 Beanshell 之前根本没有定义类路径,然后我使用 addClassPath()andimportCommands()在 Beanshell 的类加载器中动态构建类路径。此方法似乎没有继承作为默认 JRE 类加载器一部分的 jar。

经过大量实验,我了解到我无法使用预定义的 Classpath 启动脚本,然后能够使用addClassPath(). 我不知道这是按设计的还是我做错了什么?

自己很容易看出我的问题是什么。例如,这里是脚本:

第二次调用导致此错误:

Test.bat 启动这个 Beanshell 脚本:

而且,这是我的 helloWorld.bsh 脚本:

0 投票
1 回答
236 浏览

groovy - loadClass() 方法中的lookupScriptFiles "true"

扩展 GroovyClassloader 并覆盖 loadclass 方法

如果我在方法中创建lookupScriptFiles“ ”,则脚本运行并且不需要引用不同包中的 groovy 类的导入语句trueloadClass()

我已经扩展了 GroovyClassloader,并覆盖了 loadclass 方法,在 loadclass 中的参数lookupScriptFiles =true

如果这是真的,它甚至可以成功编译 first.groovy 没有 import 语句

lookupScriptFiles=false它按预期抛出编译错误时。

0 投票
1 回答
425 浏览

groovy - GroovyClassloader 行为

GroovyClassloader 行为理解,

在一个循环中,

关于上面的代码,我有几个问题:

  1. 在 for 循环中,我创建了一个新的 groovyclassloder 对象,并两次解析 groovy 脚本。当循环第二次迭代并尝试再次解析 groovyscript 时,会发生什么?
  2. 第二次创建另一个对象时会发生什么。类加载器会设法从类路径中获取类还是再次重新编译它?
  3. 触发重编译的时候,groovy怎么知道源改了什么?
0 投票
1 回答
8782 浏览

java - 如何从 Java 评估我自己的 Groovy 脚本?

我尝试从 Java 类调用我自己的 groovy 脚本函数,用户也可以使用标准表达式。

例如:

这是 MyCustomScript.groovy

运行时,此行scrpt.evaluate("str1.concat(str2)")按预期工作,但scrpt.evaluate("customConcat(str1, str2)")引发异常:

我可以像下面这样调用我的自定义方法并且它可以工作

但是,这次我找不到如何评估标准表达式,如子字符串、concat 等......

那么我应该如何评估自定义和标准表达式呢?