gpt4 book ai didi

java - 如何在Java中运行groovy

转载 作者:行者123 更新时间:2023-12-02 11:03:26 29 4
gpt4 key购买 nike

嗨,每个人都尝试了不同的方法来在 java 中运行 groovy,但没有成功,已经阅读了一些文档,但目前情况还不清楚。

有人知道如何运行这个groovy吗?

package com.test.dev.search;

public class SearchQueryBase implements SearchQuery {

public QueryString getMatterQuery( SearchFilter filter ) {
String[] terms = filter.getSearchTerm().toLowerCase().split( " " );
...
...
...
}
}

这是一个 .groovy 文件(上面的文件),我尝试了以下方法来运行它,但没有成功。

下面是 Java 类,我想在其中运行上述 Groovy 并执行 getMatterQuery() 以查看 java main 的输出。

public static void main(String args[]) throws CGException {

String TEMPLATE_PACKAGE_PREFIX = "<path_to_groovy_file.";

String templateFileName = TEMPLATE_PACKAGE_PREFIX + "SearchQueryBase";

SearchFilter test = null;

Binding binding = new Binding();
binding.setVariable("filter", test);

GroovyShell shell = new GroovyShell(binding);

shell.evaluate(templateFileName);

System.out.println("Finish");
}

编辑#1

这是我运行时遇到的错误;

Exception in thread "main" groovy.lang.MissingPropertyException: No such property: Common for class: Script1
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)
at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:231)
at Script1.run(Script1.groovy:1)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:580)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:618)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:589)

最佳答案

1.

GroovyShell.evaluate(java.lang.String scriptText)接受字符串作为常规文本(内容),并且您尝试使用文件名来调用它。使用shell.evaluate( new File(templateFileName) )

2.

您可以继续使用shell.evaluate( new File(...) )但仅将方法 getMatterQuery() 的内容保留在您的常规文件中:

String[] terms = filter.getSearchTerm().toLowerCase().split( " " );
...
...
...

这样你就有了 groovy 脚本,并且你的代码应该可以工作

3.

如果你想将groovy保留为一个类并调用方法getMatterQuery()从这个带有参数的类,那么你的java代码应该是这样的:

import groovy.lang.*;
...

public static void main(String[]s)throws Exception{
GroovyClassLoader cl=new GroovyClassLoader();
//path to base folder where groovy classes located
cl.addClasspath(path_to_groovy_root);
//the groovy file with SearchQueryBase.groovy
//must be located in "com/test/dev/search" subfolder under path_to_groovy_root
Class c = cl.loadClass("com.test.dev.search.SearchQueryBase");
SearchQuery o = (SearchQuery) c.newInstance();
System.out.println( o.getMatterQuery(test) );
}

关于java - 如何在Java中运行groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51159593/

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