9

あいさつ、Antbuild.xmlファイルにBeanshellスクリプトを入れようとしています。できる限りAntのマニュアルに従いましたが、Antを実行すると「Beanshell用のjavaxスクリプトエンジンを作成できません」というメッセージが表示され続けます。Antマニュアルの例から主に書いたテストターゲットは次のとおりです。

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

私のbeanshell"bsh-2.0b4.jar"ファイルは、マニュアルが推奨する方法でスクリプトタスクのクラスパスにあります。私が正しいファイルを持っていることを願っています。私は今c:\TEMPで働いています。私は今しばらくグーグルして試しています。任意のアイデアをいただければ幸いです。ありがとう。

4

4 に答える 4

6

まず、ここからjsr-engines.zipが必要です。

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

中には、jsr223 / beanshell / build/bsh-engine.jarがあります。一部の検索では、bsh-2.05b.jarをダウンロードする必要があることが示唆されました。私はここでそれを見つけました:

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

より簡単に見つけられるbsh-2.0b4.jarも機能しているように見えましたが、実験的であることを示唆するメッセージが出力されました。

于 2010-04-27T05:10:12.513 に答える
2

現在 (2012 年)、BeanShell のスクリプト タスクを起動するために必要な jar は 1 つだけです。

Antマニュアルのライブラリ依存関係の章で言及されているように、以前は次のことも考えていました。

しかし、少なくとも私の環境では、 にbsfは必要ないようです。bsh

jar が ant に渡されると、スクリプト タスクはスムーズに実行されます。jar を取得して ant で使用できるようにするシナリオは 2 つあります。

手動ダウンロード方法

上記のjarをダウンロードします。Mavenリポジトリからのリンクを提供しました。すべての jar をダウンロードしたら、それらを ant で使用できるようにします。それを行うには、少なくとも 3 つの方法があります。

  1. Javaライブラリパスに入れます
  2. ant ライブラリ ディレクトリに配置します。
  3. scripttaskに正しいクラスパスを指定してください。

異なるシステム間で最も簡単に移植できるため、最後の方法が最適だと思います。スクリプト タスクの 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>
于 2012-09-29T14:43:37.563 に答える
1

beanshell言語を使用しないでください。javascript追加のjarなしでjdk6で実行されるため、代わりに使用してください。Rebseさんが教えてくれました。

Javascriptたとえば、Javaクラスを使用することも許可されていますjava.lang.System.out.println()

于 2012-09-30T19:30:22.340 に答える
1

Ant プラグイン「org.apache.ant_1.7.0.v200803061910」には、必要なすべての jar ファイルがあります

于 2010-06-22T10:12:14.737 に答える