Beanshell Ant cédant, « Impossible de créer le moteur de script javax pour beanshell »

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

  •  01-10-2019
  •  | 
  •  

Question

Cartes, je suis en train de mettre un script Beanshell dans mon fichier Ant build.xml. J'ai suivi le manuel Ant ainsi que je le peux, mais je continue à obtenir « Impossible de créer le moteur de script javax pour beanshell » quand je lance Ant. Voici la cible de test je l'ai écrit la plupart des exemples dans le manuel 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>

Mon Beanshell fichier « BSH-2.0b4.jar » est sur le chemin de classe de la tâche de script comme le manuel recommandé. Espère avoir le bon fichier. Je travaille dans c: \ TEMP en ce moment. J'ai été googler et essayer pendant un certain temps maintenant. Toutes les idées seraient grandement appréciés. Merci.

Était-ce utile?

La solution

Tout d'abord, vous avez besoin jsr-engines.zip d'ici:

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

A l'intérieur, vous trouverez jsr223 / beanshell / build / BSH-engine.jar. Certaines recherches a laissé entendre que vous devez télécharger BSH-2.05b.jar. Je l'ai trouvé ici:

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

Le plus facilement trouvable BSH-2.0b4.jar aussi semblait fonctionner, mais il imprimé

un message qui impliquait qu'il était expérimental.

Autres conseils

À l'heure actuelle (2012) Vous avez besoin seulement 1 pot au feu la tâche de script pour BeanShell:

Auparavant, je a également pensé à ce qui suit, comme mentionné par Ant Manuel, bibliothèque dépendances chapitre :

Mais il semble que bsf est pas nécessaire pour bsh, au moins dans mon environnement.

Une fois que le pot est donné à la fourmi, la tâche de script fonctionne bien. Il y a 2 scénarios possibles pour obtenir les pots et les mettre à la disposition des fourmis.

mode de téléchargement manuel

Télécharger les bocaux ci-dessus. J'ai fourni les liens du référentiel Maven. Une fois que vous avez tous les pots téléchargés, mettre à la disposition des fourmis. Il y a au moins 3 façons de le faire:

  1. Mettre en java chemin de la bibliothèque
  2. Mettez dans le répertoire bibliothèque ant
  3. Donnez-le classpath correct à la tâche de script.

Je trouve la dernière méthode la meilleure, car il est le plus facilement portables systèmes différents. Le fichier de fourmi pour la tâche de script pourrait se présenter comme suit:

<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>

Méthode automatique de téléchargement, en utilisant Ivy

La méthode manuelle n'est pas parfait quand vous voulez distribuer votre script de compilation. Ensuite, vous voulez un moyen de vous assurer que les pots sont présents dans le système de destination. Pour la distribution builds il n'y a pas de meilleur outil que lierre . Ivy va télécharger les pots et les mettre dans classpath pour vous. Le problème est qu'il semble une autre dépendance, qui est lui-même le lierre. Mais la fourniture ivy.jar est assez facile et qui est la dernière dépendance, nous devons fournir explicitement.

On peut se demander pourquoi de fournir ivy.jar, alors que nous pourrions simplement télécharger bsh.jar de la même manière. La réponse est la flexibilité. Lorsque vous avez la ivy.jar, vous obtenez: un pot que vous voulez avec une seule étape étant l'ajouter au fichier ivy.xml. Et il y a un emplacement universel convenu pour le fichier ivy.jar, alors que pour un autre fichier que nous devrions penser à un répertoire approprié.

Ci-dessous est l'exemple complet que les téléchargements de lierre et toutes les dépendances nécessaires. script télécharger Ivy est basé sur chapitre Installation de référence Ivy. Ensuite, un simple fichier ivy.xml est nécessaire, ce qui est donné après que l'échantillon build.xml.

téléchargement automatique d'origine script lierre a un inconvénient de toujours vérifier l'URL de lierre, même si ivy.jar est déjà à l'emplacement prévu. Cela peut être surchargée en spécifiant -Doffline=true. Je préfère ajouter une autre cible dans le fichier de construction et de faire la vérification http que si nous n'avons pas déjà ivy.jar. Ceci est la façon dont le script fonctionne ici. Pour observer ce sumac effectivement téléchargé, ensemble variable d'environnement IVY_HOME dans un répertoire de votre choix. Il sera créé et rempli de choses de lierre.

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>

Le plug-in Ant "org.apache.ant_1.7.0.v200803061910" ont tous les fichiers jar nécessaires

Ne pas utiliser la langue de beanshell. Utilisez javascript à la place, comme il fonctionne sur JDK6 sans pots supplémentaires. Rebse m'a dit que.

Javascript est également autorisé à utiliser des classes java, par exemple java.lang.System.out.println()

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top