- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 Jboss 内的 GroovyScriptEngine 移植 Java 独立程序时遇到问题。
我的程序启动groovy脚本,它需要动态加载类来启动它们。它执行类似以下操作:
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
final String myJarPath = "/tmp/myJar.jar";
URLClassLoader loader = null;
try {
final URL url = new File(myJarPath).toURI().toURL();
loader = new URLClassLoader(new URL[] { url},oldLoader);
} catch (MalformedURLException e) {
e.printStackTrace();
}
Thread.currentThread().setContextClassLoader(loader);
ScriptEngineManager seManager = new ScriptEngineManager(loader);
final Map<String, Object> bindingAttributes = new HashMap<>() ;
final ScriptEngine scriptEngine = seManager.getEngineByName("groovy");
final SimpleBindings simpleBindings = new SimpleBindings(bindingAttributes);
scriptEngine.setBindings(simpleBindings, ScriptContext.GLOBAL_SCOPE);
FileReader fileReader = null;
BufferedReader bufferedReader = null;
fileReader = new FileReader(new File("/my/path/to/groovyFile/file.groovy"));
bufferedReader = new BufferedReader(fileReader);
final Object eval = scriptEngine.eval(bufferedReader);
System.out.println(eval);
在 myJar.jar 中,有 groovy 脚本所需的类,而不是启动 groovy scrits 本身的 java 程序所需的类。这样它就可以很好地工作:我只需要包含以下 Maven 依赖项。
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.3.6</version>
</dependency>
如果我将代码移植到资源适配器(JCA 连接器)中,尽管我已经添加了所有必需的依赖项,但这样做时:
final ScriptEngine scriptEngine = seManager.getEngineByName("groovy");
我收到 NullPointerException。
如果我尝试手动向 ScriptEngineManager registerig groovy 提供数据,例如:
...
Thread.currentThread().setContextClassLoader(loader);
ScriptEngineManager seManager = new ScriptEngineManager(loader);
final Map<String, Object> bindingAttributes = new HashMap<>() ;
############################################
## register it manually ##
############################################
final GroovyScriptEngineFactory factory = new GroovyScriptEngineFactory();
seManager.registerEngineName("groovy", factory);
final ScriptEngine scriptEngine = seManager.getEngineByName("groovy");
final SimpleBindings simpleBindings = new SimpleBindings(bindingAttributes);
scriptEngine.setBindings(simpleBindings, ScriptContext.GLOBAL_SCOPE);
final GroovyScriptEngineFactory factory = new GroovyScriptEngineFactory();
seManager.registerEngineName("groovy", factory);
final ScriptEngine scriptEngine = seManager.getEngineByName("groovy");
脚本已加载,但类路径不包含 myJar.jar 中提供的额外类。所以我得到了 ClassNotFoundException。如果此类包含在资源适配器存档中,则它可以正常工作,因此脚本似乎只能看到资源适配器中包含的类。
除了包括资源适配器上的所有额外类(当前的解决方法)之外,您对如何解决此问题有任何想法吗?非常感谢。
最佳答案
我以前没有遇到过这个特定问题,但我在获取 JBoss 部署的 war 文件来获取 Groovy 脚本引擎时遇到了问题。我为解决问题所做的就是创建一个全局 Groovy 模块:
1)创建目录$JBOSS_HOME/modules/org/codehaus/groovy/main/
2) 将groovy-all-2.3.6.jar
复制到该目录中。
3) 在同一目录中创建一个包含以下内容的 module.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.codehaus.groovy">
<resources>
<resource-root path="groovy-all-2.3.6.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
4) 修改 standalone.xml
中的“urn:jboss:domain:ee:1.1”子系统元素(或您使用的任何风格),以将刚刚创建的模块包含为全局模块模块,例如
<subsystem xmlns="urn:jboss:domain:ee:1.1">
<spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
<jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement>
<global-modules>
<module name="org.codehaus.groovy" slot="main"/>
</global-modules>
</subsystem>
如果它仍然不起作用,可能需要您将 myJar.jar
也包含在全局模块中,尽管我也认为这是一种解决方法。
关于java - Jboss 7 中的 GroovyScriptEngine 类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25688639/
特别是http://docs.groovy-lang.org/latest/html/api/groovy/util/GroovyScriptEngine.html和 http://docs.groo
背景: 我最近开始使用 Groovy,并尝试在 Eclipse 插件中嵌入 Groovy 脚本引擎,以便让我的客户在我的基于 Eclipse 的产品中开发他们自己的 GUI 扩展。这与success
我正在考虑在现有 Web 应用程序中使用 groovy 脚本,并且正忙于设置和配置 GroovyScriptEngine。 管理容器中脚本的“最佳实践”是什么? 我应该将它们存储在数据库中吗然后将它们
我有这样的目录结构: .../GroovyScriptsRoot SubfolderName1/script/ScriptName1.groovy SubfolderName2/script/Scri
我在使用 Jboss 内的 GroovyScriptEngine 移植 Java 独立程序时遇到问题。 我的程序启动groovy脚本,它需要动态加载类来启动它们。它执行类似以下操作: ClassL
我注意到 scala 符合 jsr 223 https://issues.scala-lang.org/browse/SI-874 ...但是它能够做像 GroovyScriptEngine 这样的事
我有一个字符串输入,它是一个 groovy 脚本,其中包含一个或多个方法,例如: def printHello() { println("Inside printHello()") } def
我是一名优秀的程序员,十分优秀!