現在 (2012 年)、BeanShell のスクリプト タスクを起動するために必要な jar は 1 つだけです。
Antマニュアルのライブラリ依存関係の章で言及されているように、以前は次のことも考えていました。
しかし、少なくとも私の環境では、 にbsf
は必要ないようです。bsh
jar が ant に渡されると、スクリプト タスクはスムーズに実行されます。jar を取得して ant で使用できるようにするシナリオは 2 つあります。
手動ダウンロード方法
上記のjarをダウンロードします。Mavenリポジトリからのリンクを提供しました。すべての jar をダウンロードしたら、それらを ant で使用できるようにします。それを行うには、少なくとも 3 つの方法があります。
- Javaライブラリパスに入れます
- ant ライブラリ ディレクトリに配置します。
script
taskに正しいクラスパスを指定してください。
異なるシステム間で最も簡単に移植できるため、最後の方法が最適だと思います。スクリプト タスクの ant ファイルは次のようになります。
<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>
Ivyを採用した自動ダウンロード方式
ビルド スクリプトを配布する場合、手動による方法は完璧ではありません。次に、jar が宛先システムに存在することを確認する方法が必要です。ビルドの配布にはivyほど優れたツールはありません。Ivy が jar ファイルをダウンロードして配置しclasspath
ます。問題は、アイビー自体である別の依存関係が表示されることです。しかし、ivy.jar を提供するのは非常に簡単で、明示的に提供する必要がある最後の依存関係です。
を提供する理由を尋ねる人がいるかもしれませんが、同じ方法でivy.jar
単純にダウンロードすることもできます。bsh.jar
答えは柔軟性です。を持っている場合はivy.jar
、1 つのステップでファイルに追加するだけで、任意の jar を取得できivy.xml
ます。また、ファイルには合意された普遍的な場所がありivy.jar
ますが、他のファイルについては適切なディレクトリを考える必要があります。
以下は、ivy をダウンロードしてから、必要なすべての依存関係をダウンロードする完全な例です。Ivy ダウンロード スクリプトは、Ivy リファレンスのインストールの章に基づいています。次にivy.xml
、サンプルの後にある簡単なファイルが必要ですbuild.xml
。
ivy.jar
元の自動ダウンロード アイビー スクリプトには、既に予想される場所にある場合でも、常にアイビーの URL をチェックするという欠点があります。これは、指定することでオーバーライドできます-Doffline=true
。ビルド ファイルに別のターゲットを追加し、まだivy.jar
. これが、ここでのスクリプトの動作方法です。アイビーが実際にダウンロードしたものを観察するには、IVY_HOME
環境変数を選択したディレクトリに設定します。それは作成され、アイビーのもので満たされます。
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>