我在Ant中使用<script>
标签有问题,我希望有人能帮助我。我想在我的Ant build.xml
中使用JavaScript。如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project name="java" default="main" basedir=".">
<target name="main">
<script language="javascript"> <![CDATA[
println("hello, world")
]]> </script>
</target>
</project>*
不幸的是,这只显示和错误:
build.xml:4:无法创建任务或类型:脚本。
我已经找到了所需的jar文件(js.jar
)为此工作并将其移动到ANT_HOME/lib
,但我仍然卡住了如何让这个工作。
除了js.jar
,您还需要将bsf.jar
和commons-logging-*.jar
添加到ANT_HOME/lib中。在Ant发行版中,有一个名为docs/manual/install.html
的文件。这个HTML文件的Library Dependencies部分可以在这里下载这些文件。
println
。相反,请使用以下命令:
<project name="jsTest" default="main">
<target name="main">
<script language="javascript"> <![CDATA[
var echo = jsTest.createTask("echo");
echo.setMessage("hello, world");
echo.perform();
]]> </script>
</target>
</project>
您还可以在需要时通过Rhino(JRE pre 1.8)或Nashorn(JRE 1.8+)在Javascript中实例化和使用Java类。
<script language="javascript">
with(new JavaImporter(java.lang, java.io)){
System.out.println("hello, world");// <--!!!
}
</script>
你可以创建和使用你自己的JavaScript函数。
<script language="javascript">
with(new JavaImporter(java.lang, java.io)){
var fun = function(a,b){
System.out.println(a+b);
};
fun(1,2);
}
</script>
上面的代码打印
3.0
循环,递归和你一直梦想的一切…除了强类型检查:-)
除了两个语法错误- 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
奇怪! ?
似乎是一个bug,所以最后升级了ant>= 1.7。X和JDK>= 1.6和
在项目的name属性中不使用'java':-)