你好,我正在尝试将一些Beanshell脚本放入我的Ant build.xml文件中。我已经尽可能地遵循了Ant手册,但是当我运行Ant时,我总是收到"Unable to create javax script engine for 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“文件按照手册推荐的方式位于脚本任务的类路径中。希望我有正确的文件。我现在在c:\TEMP中工作。我已经在谷歌上搜索了一段时间了。任何想法都将不胜感激。谢谢。
发布于 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似乎也可以工作,但它打印了一条消息,暗示它是试验性的。
发布于 2012-09-29 22:43:38
目前(2012),您只需要1个jar即可启动BeanShell的脚本任务:
在此之前,我还想到了以下内容,正如Ant Manual中提到的,Library Dependencies chapter:
但是看起来bsh
并不需要bsf
,至少在我的环境中是这样。
一旦将jar提供给ant,脚本任务就会顺利运行。获取jars并将其提供给ant有两种可能的方案。
手动下载方式
下载上面的jars。我提供了来自maven仓库的链接。下载完所有的jars之后,让它们对ant可用。至少有3种方法可以做到这一点:
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>
一种采用常春藤的自动下载方法
当您想要分发构建脚本时,手动方法并不完美。然后,您需要一种方法来确保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
<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>
发布于 2010-06-22 18:12:15
Ant插件"org.apache.ant_1.7.0.v200803061910“拥有所需的所有jar文件
https://stackoverflow.com/questions/2716646
复制相似问题