背景(可以跳过):
我最近在Java中编写了一个轻量级服务器,用于轮询端口上的新连接,然后当客户端连接它时,它们会给它们自己的线程,直到套接字关闭。现在,一旦连接客户端,我需要做的就是以特殊方式准备XML文件请求;如果客户端请求file1.xml,则服务器需要读入file1.xml,将其解析为JSON,并将json对象发送到客户端。
特定问题(现在开始阅读): 我需要在Java中将XML文件解析为JSON对象。我被推荐为GROOVY来完成这项任务。在我的mac和ubuntu分区上安装它是一件轻而易举的事,但是我无法使用内联常规工作,原因很可能非常简单。这就是我现在正在测试的(此时,我只是想尝试嵌入式groovy工作):
test.groovy
output = "Hello ${input}!"
test.java
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
String[] roots = new String[] { "/home/nick/Documents" };
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
Binding binding = new Binding();
binding.setVariable("input", "world");
gse.run("test.groovy", binding);
System.out.println(binding.getVariable("output"));
这两个文件都在我的/home/nick/Documents
文件夹中。当我尝试编译:
javac test.java
我得到6个错误:
test.java:4: class, interface, or enum expected
String[] roots = new String[] { "/home/nick/Documents" };
^
test.java:5: class, interface, or enum expected
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
^
test.java:6: class, interface, or enum expected
Binding binding = new Binding();
^
test.java:7: class, interface, or enum expected
binding.setVariable("input", "world");
^
test.java:8: class, interface, or enum expected
gse.run("test.groovy", binding);
^
test.java:9: class, interface, or enum expected
System.out.println(binding.getVariable("output"));
^
6 errors
我觉得我在编译阶段做错了什么。如何进行编译和运行?
非常感谢
答案 0 :(得分:4)
由于test.java
是Java类,而不是Groovy脚本,因此您需要将代码包装在一个类中(使用大写Test.java
重命名为T
)。你还需要捕捉或抛出一些例外:
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException ;
import groovy.util.ScriptException ;
import java.io.IOException ;
public class Test {
public static void main( String[] args ) throws IOException, ResourceException, ScriptException {
String[] roots = new String[] { "." };
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
Binding binding = new Binding();
binding.setVariable("input", "world");
gse.run("test.groovy", binding);
System.out.println(binding.getVariable("output"));
}
}
然后,您需要在类路径上使用groovy编译此Java类(使用通配符路径需要java 6,否则您需要填充groovy-all-*.jar
的完整路径):
javac -cp $GROOVY_HOME/embeddable/*:. Test.java
并使用正确的类路径运行它:
java -cp $GROOVY_HOME/embeddable/*:. Test