Utilizzando JavaScript in Ant

Sto avendo problemi con il <script> tag Ant e sto sperando che qualcuno possa aiutare. Voglio usare JavaScript nel mio Ant build.xml. Qualcosa di simile al seguente:

<?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>*

Purtroppo, visualizza solo errore:

costruire.xml:4: impossibile creare attività o di tipo di tipo: script.

Ho individuato il file jar richiesto (js.jar) per questo lavoro e si è trasferito al ANT_HOME/lib, ma sono ancora bloccato come su come ottenere questo lavoro.

  • Che versione di Ant stai usando? Esecuzione di “ant-versione” sulla riga di comando. Inoltre, quale sistema operativo è in esecuzione?
  • ANT è la versione 1.6.5 su red hat 5 u 8 OS
  • Qual è la tua versione di java ? Vedi il mio commento alla risposta del Ciad
  • anche 2 problemi => mancante ‘;’ dopo println.. e finali ” * ” dopo la chiusura del progetto tag
InformationsquelleAutor ah414 | 2013-04-16

 

3 Replies
  1. 2

    Oltre a js.jar, è necessario aggiungere bsf.jar e commons-logging-*.jar per ANT_HOME/lib. In Ant distribuzione, c’è un file denominato docs/manual/install.html. Il Biblioteca Dipendenze sezione di questo file HTML dei documenti in cui è possibile scaricare questi file.

    println non è supportato in JavaScript. Invece, utilizzare il seguente:

    <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>
    • non hai bisogno di js.jar e bsf.jar più, come jdk >= 6 viene fornito con un builtin di Scripting Javascript Engine basato su Rhino 1.6R2
    • perché non usare semplicemente print(“ciao, mondo”); invece ?
    • Ant 1.6.5 non funziona con il JDK 1.6 del motore JavaScript. Se user2286073 gli aggiornamenti per Ant 1.7 o poi, tutti questi problemi saranno risolti.
    • sei sono di destra, usando ant 165 produrrà java.lang.NoClassDefFoundError: org/apache/bsf/BSFException
  2. 2

    È anche possibile creare un’istanza e l’uso delle classi Java, Javascript disponibile tramite Rhino(JRE pre 1.8) o Nashorn(JRE 1.8+) quando è necessario.

    <script language="javascript">
      with(new JavaImporter(java.lang, java.io)){
        System.out.println("hello, world");//<--!!!
      }
    </script>

    È possibile creare e utilizzare funzioni JavaScript del tuo.

    <script language="javascript">
      with(new JavaImporter(java.lang, java.io)){
        var fun = function(a,b){
          System.out.println(a+b);
        };
        fun(1,2);
      }
    </script>

    Codice sopra stampe

    3.0 

    Passanti, ricorsione e tutto quello che hai sempre sognato… tranne forti tipo di controllo:-)

  3. 1

    Di fianco a due errori di sintassi – mancante ‘;’ dopo println.. e finali ” * ” dopo la chiusura del progetto tag – si dovrebbe aggiornare il proprio ant installazione di una versione >= 1.7.x in combinazione con il jdk >= 6 per essere in grado di utilizzare il builtin motore javascript.

    Quando si utilizza jdk >=6 l’uso di println è nessun problema, vedere :

    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')");
     }
    }

    di uscita :

    Line1Line2
    Line3Line4

    e

    <project>
     <script language="javascript">
      println("hello, world");
     </script>
    </project>

    Ma ulteriori test con Ant 1.9.0 /Win7 (sulla mia linux box in basso a destra ora) /jdk1.7.0_21 ha rivelato alcune stranezze :

    <project>
     <script language="javascript">
      println("hello, world");
     </script>
    </project>

    opere

    <project default="foo">
    <target name="foo"> 
     <script language="javascript">
      println("hello, world");
     </script>
    </target>
    </project>

    funziona anche

    <project name="whatever" default="foo">
    <target name="foo"> 
     <script language="javascript">
      println("hello, world");
     </script>
    </target>
    </project>

    funziona anche, mentre

    <project name="java" default="foo">
    <target name="foo"> 
     <script language="javascript">
      println("hello, world");
     </script>
    </target>
    </project>

    risultati

    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

    Strano !?
    Sembra un bug, così finalmente l’aggiornamento ant >= 1.7.x e jdk >= 1.6 e
    non uso ‘java’ in nome attributo di progetto 🙂

Lascia un commento