Beanshell не позволит мне добавить файлы jar в загрузчик классов JRE по умолчанию? - PullRequest
3 голосов
/ 24 сентября 2011

У меня вопрос о Beanshell , на который я нигде не могу найти ответ. Я могу запускать сценарии Beanshell только одним из двух способов:

  1. Где Classpath определен перед вызовом использования Beanshell и Beanshell загрузчик классов по умолчанию JRE.

  2. Там, где путь к классу вообще не определен до запуска Beanshell, а затем я использую addClassPath() и importCommands() для динамического построения пути к классам в загрузчике классов Beanshell. Этот метод, кажется, не наследует банки которые были частью загрузчика классов 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 Ответ

1 голос
/ 09 февраля 2012

Ваш 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
...