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种方法可以做到:
- 把它放在java库路径中
- 把它放在ant库目录中
- 为
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()