问题标签 [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.
java - 使用 GroovyClassLoader 与 GroovyShell 的优缺点是什么
我需要从我的 Java 应用程序中运行一些外部代码,这些代码将经常更新并且与应用程序的其余部分正交。由于我不会为每次代码更改(以及其他原因)重新部署整个应用程序,因此我们选择对此代码使用groovy,并将其存储在文件系统或数据库中。
根据我了解的文档,我有两种运行代码的方法 - 使用GroovyShell或GroovyClassLoader(eval 不适合这里)
每种方法的优缺点是什么?
groovy - 从 gradle 中运行 groovy 脚本
创建运行 groovy 脚本的 gradle 任务的最佳方法是什么?我意识到 gradle 构建文件很时髦,所以我认为可以做这样的事情:
如果 bar.groovy 正在使用@Grab
注释甚至进行简单的导入,我在尝试此操作时会遇到各种奇怪的错误。我想创建一个gradle任务来处理这个问题,以便我可以重用类路径定义。
将示例目录移动到 src 目录中的某个地方会更好吗?什么是最佳实践?
java - 加载类路径中不存在的类
假设我使用 Groovyc 编译了一个 Groovy 脚本,它在文件系统中生成了一个或多个 .class 文件。从 Java 应用程序中,如何动态地将这些类添加到类路径中以加载它们并调用它们的方法?目标是预编译 Groovy 脚本并将它们存储到数据库中,以便可以从脚本的编译版本执行评估。
grails - Groovy 动态调用类和查找方法不起作用?
我试图建立一个类似于以下的动态查询:
但它不起作用。
如果我正在尝试这个,一切都很好:
如何在 find 中使用动态域类名?
groovy - 无法使用 GroovyClassLoader 在类中动态更改或添加方法
我尝试从另一个 groovy 脚本动态更改和添加在 groovy 脚本中定义的类的方法,但如果我直接在 .metaClass 中使用类名,我无法弄清楚它为什么会起作用。但如果我使用 GroovyClassLoader 加载类(我需要这样做!)。
在一个文件“MyTest.groovy”中,我有
另一个文件“suite.groovy”包含
使用第一种方法,我得到了预期的结果:
但是第二个我得到
有趣的是,修改现有方法不起作用,但也不例外,但尝试添加新方法会抛出一个。我认为它必须对使用的类加载器做一些事情,但无法弄清楚究竟是什么以及要改变什么!对于第一个版本,这里是类加载器,称为:
对于第二个版本:
欢迎任何想法!
弗兰克
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类路径)
有没有人有任何想法?
java - Beanshell 不允许我将 jar 添加到“默认”JRE 类加载器?
我有一个关于Beanshell的问题,我在任何地方都找不到答案。我只能以 2 种方式中的 1 种方式运行 Beanshell 脚本:
其中 Classpath 在调用 Beanshell 之前定义,而 Beanshell 使用 JRE 默认类加载器。
在启动 Beanshell 之前根本没有定义类路径,然后我使用
addClassPath()
andimportCommands()
在 Beanshell 的类加载器中动态构建类路径。此方法似乎没有继承作为默认 JRE 类加载器一部分的 jar。
经过大量实验,我了解到我无法使用预定义的 Classpath 启动脚本,然后能够使用addClassPath()
. 我不知道这是按设计的还是我做错了什么?
自己很容易看出我的问题是什么。例如,这里是脚本:
第二次调用导致此错误:
Test.bat 启动这个 Beanshell 脚本:
而且,这是我的 helloWorld.bsh 脚本:
groovy - loadClass() 方法中的lookupScriptFiles "true"
扩展 GroovyClassloader 并覆盖 loadclass 方法
如果我在方法中创建lookupScriptFiles
“ ”,则脚本运行并且不需要引用不同包中的 groovy 类的导入语句true
loadClass()
我已经扩展了 GroovyClassloader,并覆盖了 loadclass 方法,在 loadclass 中的参数lookupScriptFiles =true
如果这是真的,它甚至可以成功编译 first.groovy 没有 import 语句
当 lookupScriptFiles=false
它按预期抛出编译错误时。
groovy - GroovyClassloader 行为
GroovyClassloader 行为理解,
在一个循环中,
关于上面的代码,我有几个问题:
- 在 for 循环中,我创建了一个新的 groovyclassloder 对象,并两次解析 groovy 脚本。当循环第二次迭代并尝试再次解析 groovyscript 时,会发生什么?
- 第二次创建另一个对象时会发生什么。类加载器会设法从类路径中获取类还是再次重新编译它?
- 触发重编译的时候,groovy怎么知道源改了什么?
java - 如何从 Java 评估我自己的 Groovy 脚本?
我尝试从 Java 类调用我自己的 groovy 脚本函数,用户也可以使用标准表达式。
例如:
这是 MyCustomScript.groovy
运行时,此行scrpt.evaluate("str1.concat(str2)")
按预期工作,但scrpt.evaluate("customConcat(str1, str2)")
引发异常:
我可以像下面这样调用我的自定义方法并且它可以工作
但是,这次我找不到如何评估标准表达式,如子字符串、concat 等......
那么我应该如何评估自定义和标准表达式呢?