Beanshell في النمل العائد ، "غير قادر على إنشاء محرك نص Javax لـ Beanshell"

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

  •  01-10-2019
  •  | 
  •  

سؤال

تحية ، أحاول وضع بعض السيناريو بين شيل في ملف ant build.xml الخاص بي. لقد اتبعت دليل النمل وكذلك أستطيع ، لكنني ما زلت "غير قادر على إنشاء محرك نص Javax لـ Beanshell" عندما أقوم بتشغيل 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" موجود على ClassPath بمهمة البرنامج النصي بالطريقة التي أوصى بها الدليل. آمل أن يكون لدي الملف الصحيح. أنا أعمل في C: Temp الآن. لقد كنت غوغلينغ وأحاول لفترة من الوقت الآن. اي افكار يمكن ان تكون رائعه للعرض. شكرًا.

هل كانت مفيدة؟

المحلول

أولاً ، تحتاج إلى محركات jsr.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 يمكن العثور عليها أكثر سهولة ، لكنها طبعت رسالة تعني أنها تجريبية.

نصائح أخرى

حاليًا (2012) تحتاج فقط إلى جرة واحدة فقط لإطلاق مهمة البرنامج النصي لـ Beanshell:

في السابق فكرت أيضًا في ما يلي ، كما ذكرها دليل النمل ، تبعيات المكتبة الفصل:

لكن يبدو الأمر bsf ليست ضرورية ل bsh, ، على الأقل في بيئتي.

بمجرد إعطاء الجرة إلى ANT ، تعمل مهمة البرنامج النصي بسلاسة. هناك سيناريوهان محتملان للحصول على الجرار وإتاحتها للنمل.

طريقة تحميل يدوي

قم بتنزيل الجرار أعلاه. قدمت الروابط من مستودع Maven. بمجرد تنزيل جميع الجرار ، اجعلها متاحة لـ ANT. هناك 3 طرق على الأقل للقيام بذلك:

  1. ضعها في مسار مكتبة جافا
  2. ضعه في دليل مكتبة النمل
  3. إعطاء classpath الصحيح ل script مهمة.

أجد الطريقة الأخيرة الأفضل ، لأنها يتم نقلها بسهولة بين أنظمة مختلفة. يمكن أن يبدو ملف 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>

طريقة التنزيل التلقائي ، توظيف اللبلاب

الطريقة اليدوية ليست مثالية عندما تريد توزيع البرنامج النصي للبناء. بعد ذلك ، تود طريقة للتأكد من وجود الجرار في نظام الوجهة. لتوزيع التصميمات ، لا توجد أداة أفضل من لبلاب. سوف يقوم اللبلاب بتنزيل الجرار ويضعها في classpath لك. المشكلة هي أن هناك تبعية أخرى ، وهي اللبلاب نفسها. لكن توفير Ivy.jar أمر سهل للغاية وهذا هو التبعية الأخيرة التي نحتاج إلى توفيرها بشكل صريح.

قد يسأل المرء عن سبب توفيره ivy.jar, ، بينما يمكننا ببساطة التنزيل bsh.jar بنفس الطريقة. الجواب هو المرونة. عندما يكون لديك ivy.jar, ، تحصل على أي جرة ترغب في خطوة واحدة في إضافتها إلى ivy.xml ملف. وهناك موقع عالمي متفق عليه ل ivy.jar ملف ، بينما بالنسبة للملف الآخر ، يتعين علينا التفكير في دليل مناسب.

فيما يلي المثال الكامل الذي يقوم بتنزيل Ivy ثم جميع التبعيات اللازمة. يعتمد برنامج تنزيل Ivy على فصل التثبيت من Ivy Reference. ثم بسيط ivy.xml يلزم الملف ، والذي يتم تقديمه بعد العينة build.xml.

النصي الأصلي للتنزيل التلقائي Ivy له عيب دائمًا على التحقق من عنوان URL IVY ، حتى لو ivy.jar موجود بالفعل في الموقع المتوقع. قد يتم تجاوز هذا عن طريق تحديد -Doffline=true. أفضل إضافة هدف آخر إلى ملف الإنشاء والقيام بفحص HTTP فقط إذا لم يكن لدينا بالفعل ivy.jar. هذه هي الطريقة التي يعمل بها البرنامج النصي هنا. لمراقبة ما تم تنزيل Ivy بالفعل ، قم بتعيين 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>

المكون الإضافي "org.apache.ant_1.7.0.v200803061910" يحتوي على جميع ملفات الجرة اللازمة

لا تستخدم beanshell لغة. يستخدم javascript بدلاً من ذلك ، لأنه يعمل على JDK6 دون أي جرار إضافية. ريبس اخبرني بذلك.

Javascript يُسمح أيضًا لاستخدام فصول Java ، على سبيل المثال java.lang.System.out.println()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top