Beanshell in Ant nachgebend, „Kann nicht javax Script-Engine für Beanshell schaffen“
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.
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:
- Legen Sie es in Java-Bibliothek Pfad
- Legen Sie es in ant Bibliotheksverzeichnis
- 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()