首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ant中的Beanshell,"Unable to create javax script engine for beanshell“

Ant中的Beanshell,"Unable to create javax script engine for beanshell“
EN

Stack Overflow用户
提问于 2010-04-27 04:33:34
回答 4查看 12.9K关注 0票数 9

你好,我正在尝试将一些Beanshell脚本放入我的Ant build.xml文件中。我已经尽可能地遵循了Ant手册,但是当我运行Ant时,我总是收到"Unable to create javax script engine for beanshell“的提示。以下是我主要从Ant手册中的示例中编写的测试目标:

代码语言:javascript
运行
复制
<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中工作。我已经在谷歌上搜索了一段时间了。任何想法都将不胜感激。谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-27 13:10:13

首先,您需要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似乎也可以工作,但它打印了一条消息,暗示它是试验性的。

票数 6
EN

Stack Overflow用户

发布于 2012-09-29 22:43:38

目前(2012),您只需要1个jar即可启动BeanShell的脚本任务:

  • bsh-2.0b5.jar

在此之前,我还想到了以下内容,正如Ant Manual中提到的,Library Dependencies chapter

  • bsf-2.4.0.jar
  • commons-logging-api-1.1.jar

但是看起来bsh并不需要bsf,至少在我的环境中是这样。

一旦将jar提供给ant,脚本任务就会顺利运行。获取jars并将其提供给ant有两种可能的方案。

手动下载方式

下载上面的jars。我提供了来自maven仓库的链接。下载完所有的jars之后,让它们对ant可用。至少有3种方法可以做到这一点:

  1. 将其放入java库路径中,
  2. 将其放入ant库中,并将其放入script任务的正确类路径中。

我发现最后一种方法是最好的,因为它最容易在不同的系统之间移植。脚本任务的ant文件可能如下所示:

代码语言:javascript
运行
复制
<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>

一种采用常春藤的自动下载方法

当您想要分发构建脚本时,手动方法并不完美。然后,您需要一种方法来确保jars存在于目标系统中。对于分发构建来说,没有比更好的工具了。Ivy将为您下载jars并将其放入classpath。问题是出现了另一个依赖,那就是常春藤本身。但是提供ivy.jar非常简单,这是我们需要显式提供的最后一个依赖项。

有人可能会问为什么要提供ivy.jar,而我们可以用同样的方式简单地下载bsh.jar。答案是灵活性。有了ivy.jar后,只需将其添加到ivy.xml文件中,即可获得所需的任何jar。ivy.jar文件有一个约定的通用位置,而对于其他文件,我们必须考虑一个合适的目录。

下面是下载ivy的完整示例,然后是所有必要的依赖项。常春藤下载脚本是基于Installation chapter of Ivy reference的。然后需要一个简单的ivy.xml文件,该文件在示例build.xml之后给出。

原始的自动下载常春藤脚本的缺点是总是检查常春藤url,即使ivy.jar已经在预期的位置。这可以通过指定-Doffline=true来覆盖。我更喜欢将另一个目标添加到构建文件中,并且只有在我们还没有ivy.jar的情况下才进行http检查。这里的脚本就是这样工作的。要查看ivy实际下载的内容,请将IVY_HOME环境变量设置为您选择的目录。它将被创建并充满常春藤的东西。

build.xml

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
<?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>
票数 2
EN

Stack Overflow用户

发布于 2010-06-22 18:12:15

Ant插件"org.apache.ant_1.7.0.v200803061910“拥有所需的所有jar文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2716646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档