在Ant中使用JavaScript



我在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.jarcommons-logging-*.jar添加到ANT_HOME/lib中。在Ant发行版中,有一个名为docs/manual/install.html的文件。这个HTML文件的Library Dependencies部分可以在这里下载这些文件。

JavaScript不支持

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':-)

相关内容

  • 没有找到相关文章

最新更新