我有一个关于Beanshell的问题,我无法在任何地方找到答案。我只能通过以下两种方式之一运行Beanshell脚本:
在调用Beanshell和Beanshell之前定义Classpath JRE默认的类加载器。
在开始Beanshell然后我使用之前,根本没有定义类路径
addClassPath()
和importCommands()
动态构建类路径
在Beanshell的类加载器中。这种方法似乎没有继承罐子
这是默认JRE类加载器的一部分。
经过多次实验,我了解到我无法使用预定义的Classpath启动脚本,然后可以使用addClassPath()
添加到类路径中。我不知道这是否是设计的或者我做错了什么?
很容易看出我的问题是什么。例如,这是脚本:
::Test.bat (where bsh.jar exists in JRE/lib/ext directory)
@echo off
set JAVA_HOME=C:\JDK1.6.0_27
:: first invoke: this first command works
%JAVA_HOME%\jre\bin\java.exe bsh.Interpreter Test.bsh
:: second invoke: this command fails
%JAVA_HOME%\jre\bin\java.exe -cp ant.jar bsh.Interpreter Test.bsh
第二次调用导致此错误:
Evaluation Error: Sourced file: Test.bsh : Command not
found: helloWorld() : at Line: 5 : in file: Test.bsh : helloWorld ( )
Test.bat启动此Beanshell脚本:
// Test.bsh
System.out.println("Trying to load commands at: " + "bin" );
addClassPath("bin");
importCommands("bin");
helloWorld();
而且,这是我的helloWorld.bsh脚本:
// File: helloWorld.bsh
helloWorld() {
System.out.println("Hello World!");
}
答案 0 :(得分:1)
您的Test.bsh
有一个小错误:importCommands
在类路径中查找名为“bin”的目录并从那里加载所有.bsh文件,因此您应该添加到{{1}是当前目录:
addClassPath
您在第一种情况下使用的代码,因为当前目录位于默认的系统类路径中。问题是// Test.bsh
System.out.println("Trying to load commands at: " + "bin" );
addClassPath("."); // current directory
importCommands("bin");
helloWorld();
开关会覆盖默认的类路径,因此-cp
不再有任何方法可以找到importCommands
目录。
或者,您可以将bin
添加到JVM级别的类路径中:
.