Beanshell не позволит мне добавить файлы jar в загрузчик классов JRE по умолчанию?
У меня есть вопрос о Beanshell, на который я нигде не могу найти ответ. Я могу запускать сценарии Beanshell только одним из двух способов:
Где Classpath определен до вызова Beanshell, а Beanshell использует загрузчик классов по умолчанию JRE.
Где никакой путь к классу не определен вообще перед запуском Beanshell, а затем я использую
addClassPath()
а такжеimportCommands()
динамически создавать путь к классам в загрузчике классов Beanshell. Этот метод, похоже, не наследует файлы jar, которые были частью загрузчика классов JRE по умолчанию.
После долгих экспериментов я узнал, что не могу запустить сценарий с предопределенным Classpath, а затем добавить его в 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!");
}
1 ответ
Ваш Test.bsh
имеет небольшую ошибку: importCommands
ищет каталог с именем "bin" в пути к классам и загружает оттуда все файлы.bsh, так что вы должны добавить к addClassPath
текущий каталог:
// Test.bsh
System.out.println("Trying to load commands at: " + "bin" );
addClassPath("."); // current directory
importCommands("bin");
helloWorld();
Код, который вы использовали, работает в первом случае, потому что текущий каталог находится в системном пути по умолчанию. Проблема в том, что -cp
Параметр переопределяет путь к классу по умолчанию, поэтому importCommands
больше не может найти bin
каталог.
В качестве альтернативы вы можете добавить .
к пути к классам на уровне JVM:
%JAVA_HOME%\jre\bin\java.exe -cp .;ant.jar bsh.Interpreter Test.bsh