Beanshell in Ant nachgebend, „Kann nicht javax Script-Engine für Beanshell schaffen“

StackOverflow https://stackoverflow.com/questions/2716646

  •  01-10-2019
  •  | 
  •  

Frage

Gruß, ich versuche in meiner Ant build.xml Datei einige Skript Beanshell zu setzen. Ich habe die Ant Handbuch gefolgt, so gut ich kann, aber ich erhalte „Kann nicht javax Script-Engine für Beanshell erstellen“, wenn ich Ant laufen. Hier haben wir das Testziel schrieb ich meist aus den Beispielen in der Ant Handbuch:

<target name="test-target">
    <script language="beanshell" setbeans="true">
        <classpath>
            <fileset dir="c:\TEMP" includes="*.jar" />
        </classpath>
        System.out.println("Hello world");
    </script>
</target>

Meine Beanshell „bsh-2.0b4.jar“ Datei wird auf dem Classpath Skript Aufgabe der Art und Weise das Handbuch empfohlen. Hoffe, dass ich habe die richtige Datei. Ich arbeite in c: \ TEMP jetzt. Ich habe googeln und jetzt für eine Weile versuchen. Irgendwelche Ideen wäre sehr dankbar. Danke.

War es hilfreich?

Lösung

Zuerst müssen Sie von hier jsr-engines.zip:

https://scripting.dev.java.net/servlets/ProjectDocumentList

Im Inneren finden Sie jsr223 / Beanshell / build / bsh-engine.jar finden. Einige Such impliziert, dass Sie benötigen bsh-2.05b.jar zum Download bereit. Ich fand es hier:

http://beanshell.org/bsh-2.0b5.jar

Je leichter auffindbar bsh-2.0b4.jar auch zur Arbeit erscheint, aber es gedruckt, um eine Nachricht, die implizierte war es experimentell.

Andere Tipps

Zur Zeit (2012) Sie brauchen nur 1 Glas die Skript Aufgabe für Beanshell Feuer:

Früher habe ich auch von der folgenden gedacht, wie Ant Handbuch erwähnt, Bibliothek Abhängigkeiten Kapitel

Aber es sieht aus wie bsf nicht für bsh benötigt wird, zumindest in meinem Umfeld.

Sobald das Glas zu Ameise gegeben wird, wird die Skript Aufgabe reibungslos. Es gibt zwei mögliche Szenarien für die Gläser bekommen und macht sie zu Ameise zur Verfügung.

Manueller Download Art und Weise

Laden Sie die Gläser oben. Ich lieferte die Verbindungen von Maven-Repository. Sobald Sie alle Gläser heruntergeladen haben, machen sie zu Ameise zur Verfügung. Es gibt mindestens 3 Möglichkeiten, es zu tun:

  1. Legen Sie es in Java-Bibliothek Pfad
  2. Legen Sie es in ant Bibliotheksverzeichnis
  3. Geben Sie die richtige Classpath script Aufgabe.

ich die letzte Methode finden die beste, weil es am einfachsten portiert wird zwischen verschiedene Systeme. Die Ameise Datei für die Skript Aufgabe könnte wie folgt aussehen:

<project default="t1" >
  <property name="bsh.path"
    location="/mnt/q/jarek/lang/java/ant/stackoverflow/bsh-2.0b5.jar" />
  <target name="t1">
    <script language="beanshell" classpath="${bsh.path}">
      javax.swing.JOptionPane.showMessageDialog(null, "Hello, Script!");
    </script>
  </target>
</project>

Automatische Download-Methode, unter Verwendung von Ivy

Die manuelle Methode ist nicht perfekt, wenn Sie Ihren Build-Skript verteilen mögen. Dann würden Sie einen Weg, wie um sicherzustellen, dass die Gläser vorhanden sind, in dem Zielsystem. Bei der Verteilung von Builds gibt es kein besseres Werkzeug als Efeu . Ivy wird die Gläser herunterladen und sie in classpath für Sie zusammengestellt. Das Problem ist, dass es eine andere Abhängigkeit erscheint, die Efeu selbst ist. Aber ivy.jar Bereitstellung ist sehr einfach und das ist die letzte Abhängigkeit müssen wir explizit liefern.

Man kann sich fragen, warum ivy.jar bieten, während wir einfach bsh.jar auf die gleiche Art und Weise herunterladen können. Die Antwort ist die Flexibilität. Wenn Sie die ivy.jar haben, erhalten Sie eine jar Sie mit dem ersten Schritt wollen, es zu der ivy.xml Datei hinzufügen. Und es gibt eine vereinbarte universelle Position für die ivy.jar Datei, während für andere Datei würden wir von einem geeigneten Verzeichnis denken.

kommt Unter dem vollständigen Beispiel, dass Downloads Efeu und dann alle notwendigen Abhängigkeiten. Ivy Download-Skript basiert auf Kapitel Installation von Ivy Referenz . Dann wird eine einfache ivy.xml Datei benötigt wird, die nach der Probe build.xml gegeben wird.

Original Auto-Download-Efeu-Skript hat den Nachteil, immer die Efeu-URL Überprüfung, auch wenn ivy.jar bereits in der erwarteten Position. Diese werden überschriebene kann durch -Doffline=true angeben. Ich ziehe ein anderes Ziel auf die Build-Datei hinzufügen und die http Prüfung nur zu tun, wenn wir schon nicht die ivy.jar haben. Dies ist die Art und Weise des Skript hier funktioniert. tatsächlich heruntergeladen, Set IVY_HOME Umgebungsvariable in ein Verzeichnis Ihrer Wahl zu beobachten, was Efeu. Es wird mit Efeu Sachen erstellt und gefüllt werden.

build.xml:

<project default="t1"
         xmlns:ivy="antlib:org.apache.ivy.ant" >

  <property name="ivy.install.version" value="2.2.0" />
  <property environment="env" />
  <condition property="ivy.home" value="${env.IVY_HOME}">
    <isset property="env.IVY_HOME" />
  </condition>
  <property name="ivy.home" value="${user.home}/.ant" />
  <property name="ivy.jar.dir" value="${ivy.home}/lib" />
  <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />

  <target name="check-ivy">
    <condition property="ivy.present">
      <available file="${ivy.jar.file}" type="file" />
    </condition>
  </target>

  <target name="download-ivy" unless="ivy.present">
      <mkdir dir="${ivy.jar.dir}"/>
      <!-- download Ivy from web site so that it can be used even without any special installation -->
      <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" 
           dest="${ivy.jar.file}" usetimestamp="true"/>
  </target>

  <target name="init-ivy" depends="check-ivy, download-ivy">
    <!-- try to load ivy here from ivy home, in case the user has not already dropped
            it into ant's lib dir (note that the latter copy will always take precedence).
            We will not fail as long as local lib dir exists (it may be empty) and
            ivy is in at least one of ant's lib dir or the local lib dir. -->
      <path id="ivy.lib.path">
          <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
      </path>
      <taskdef resource="org/apache/ivy/ant/antlib.xml"
               uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
  </target>

  <target name="ivy-libs" depends="init-ivy" >
    <ivy:cachepath pathid="path.from.ivy" log="download-only" />
  </target>

  <target name="t1" depends="ivy-libs" >
    <script language="beanshell" classpathref="path.from.ivy">
      javax.swing.JOptionPane.showMessageDialog(null, "Hello, Script!");
    </script>
  </target>

</project>

ivy.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation=
                   "http://ant.apache.org/ivy/schemas/ivy.xsd">

<info organisation="example.com" module="testing-script-task" /> 

<dependencies>
  <dependency org="org.beanshell" name="bsh" rev="2.0b5" />
  <!--  <dependency org="bsf" name="bsf" rev="2.4.0" /> -->
</dependencies>

</ivy-module>

Die Ant-Plug-in "org.apache.ant_1.7.0.v200803061910" haben alle die JAR-Dateien benötigt

Verwenden Sie beanshell Sprache nicht. Verwenden javascript statt, da es auf jdk6 ohne zusätzliche Gläser läuft. Rebse sagte mir, dass.

Javascript auch auf der Verwendung von Java-Klassen erlaubt ist, zum Beispiel java.lang.System.out.println()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top