Как я могу динамически создать путь к классам Java в Perl? - PullRequest
0 голосов
/ 11 мая 2010

Например, в сценарии оболочки:

_CLASSPATH =.
for jar in lib/*.jar
do
    _CLASSPATH=${_CLASSPATH}:${jar}
done

Как я могу динамически создать путь к классам Java в Perl?

Ответы [ 4 ]

4 голосов
/ 11 мая 2010

Как всегда с Perl, есть несколько способов сделать это, но один компактный способ это:

$_CLASSPATH = join(":", ".", glob("lib/*.jar"));

Если вы хотите установить переменную окружения, вам может потребоваться сделать это:

$ENV{_CLASSPATH} = join(":", ".", glob("lib/*.jar"));
2 голосов
/ 11 мая 2010
my $_CLASSPATH = join(":", ".", glob("lib/*.jar"));
$ENV{CLASSPATH} = $_CLASSPATH;

ПРИМЕЧАНИЕ. Если вы работаете в среде веб-сервера, особенно в среде с общим интерпретатором Perl, например mod_perl, всегда локализуйте ваши $ENV{} назначения, чтобы избежать неприятностей: local $ENV{CLASSPATH}=$_CLASSPATH;

0 голосов
/ 11 мая 2010

Вы можете попробовать:

$CP = '.';
foreach(<lib/*.jar>) {
  $CP .= ":$_";
}
$ENV{'_CLASSPATH'} = $CP;
0 голосов
/ 11 мая 2010

Не Perl-код (без кода = без ошибок :), но не

export CLASSPATH=.:lib/*

работа? В моем bash-скрипте, который запускает приложение Java, я установил это, и приложение может «видеть» все .jars, которые я хочу, но вы можете установить его «глобально»:

mn@test:~# export CLASSPATH=.:/usr/local/jars/*
mn@test:~# echo $CLASSPATH
.:/usr/local/jars/*
mn@test:~# ls /usr/local/jars/*.jar
/usr/local/jars/activation.jar ...

mn@test:/home# cat show_cp.java
public class show_cp
{
    public static void main(String[] args)
        {
        System.out.println(System.getProperty("java.class.path", "."));
        }
}

mn@test:/home# java show_cp
.:/usr/local/jars/postgresql-8.4-701.jdbc4.jar:/usr/local/jars/RmiJdbc.jar:/usr/local/...

EDIT:

Вы можете использовать подстановочные знаки в CLASSPATH, как описано в Установка пути к классу


И Perl-код для объединения имен файлов:

my @files = glob "/jars/*.jar";
my $cp = join(":", @files);
print($cp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...