除了两个语法错误 - 缺少';' 在 println.. 和关闭项目标记后尾随 '*' - 您应该将您的 ant 安装升级到版本 >= 1.7.x 以及 jdk >= 6 以便能够使用内置的 javascript 引擎。
当使用 jdk >=6 时使用 println 是没有问题的,见:
import javax.script.*;
public class ExecuteJS {
public static void main(String[] args) throws Exception {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval("print('Line1')");
engine.eval("println('Line2')");
engine.eval("print('Line3')");
engine.eval("println('Line4')");
}
}
输出 :
Line1Line2
Line3Line4
和
<project>
<script language="javascript">
println("hello, world");
</script>
</project>
但是用 Ant 1.9.0 / Win7(我的 linux 机器现在已经关闭)/jdk1.7.0_21 进行了进一步的测试,发现了一些奇怪的地方:
<project>
<script language="javascript">
println("hello, world");
</script>
</project>
作品
<project default="foo">
<target name="foo">
<script language="javascript">
println("hello, world");
</script>
</target>
</project>
也有效
<project name="whatever" default="foo">
<target name="foo">
<script language="javascript">
println("hello, world");
</script>
</target>
</project>
也有效,而
<project name="java" default="foo">
<target name="foo">
<script language="javascript">
println("hello, world");
</script>
</target>
</project>
结果是
BUILD FAILED
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot read property "PrintWriter" from undefined (print#8) in print at line number 8
奇怪的 !?
似乎是一个错误,所以最后升级 ant >= 1.7.x 和 jdk >= 1.6 并且
不要在项目的 name 属性中使用 'java' :-)