Ant产生的Beanshell,“无法为beanshell创建javax脚本引擎”

问候,我正在尝试将一些Beanshell脚本放在我的Ant build.xml文件中。 我一直遵循Ant手册,但是当我运行Ant时,我一直得到“无法为beanshell创建javax脚本引擎”。 以下是我主要从Ant手册中的示例编写的测试目标:

     System.out.println("Hello world");   

我的beanshell“bsh-2.0b4.jar”文件在脚本任务的类路径中,与手册推荐的方式相同。 希望我有合适的档案。 我现在在c:\ TEMP工作。 我一直在谷歌搜索并尝试一段时间。 任何想法将不胜感激。 谢谢。

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

目前(2012)您只需要1个jar来激活BeanShell的脚本任务:

  • BSH-2.0b5.jar

以前我还想到了以下内容,如Ant Manual, Library Dependencies章节所述 :

  • BSF-2.4.0.jar
  • 共享记录-API-1.1.jar

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

一旦jar被赋予ant,脚本任务就会顺利运行。 获取jar子并将它们提供给ant有两种可能的方案。

手动下载方式

下载上面的jar子。 我提供了maven存储库的链接。 下载完所有jar子后,将它们提供给ant。 至少有3种方法可以做到:

  1. 把它放在java库路径中
  2. 把它放在ant库目录中
  3. script任务提供正确的类路径。

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

       

自动下载方法,采用常春藤

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

有人可能会问为什么要提供ivy.jar ,而我们可以简单地以相同的方式下载bsh.jar 。 答案是灵活性。 当你拥有ivy.jar ,只需一步就可以将它添加到ivy.xml文件中。 并且有一个商定的ivy.jar文件的通用位置,而对于其他文件,我们必须考虑一个合适的目录。

下面是下载常春藤然后所有必要依赖项的完整示例。 常春藤下载脚本基于常春藤参考的安装章节 。 然后需要一个简单的ivy.xml文件,该文件在示例build.xml之后给出。

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

build.xml

                                  

ivy.xml

         

Ant插件“org.apache.ant_1.7.0.v200803061910”包含了所有需要的jar文件

不要使用beanshell语言。 使用javascript代替,因为它在jdk6上运行而没有任何额外的jar。 雷贝斯告诉我。

Javascript也允许使用java类,例如java.lang.System.out.println()