Как я могу вызвать класс Java, который находится внутри банки изнутри сценария оболочки, которая находится внутри другой банки - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть веб-приложение и внутри фляги у меня есть скрипт оболочки. Из этого сценария оболочки я хочу выполнить класс Java, который находится внутри другого файла JAR. Я могу на самом деле выполнить, в командной строке, класс, как этот

/ usr / bin / java -jar bar.foo.a.jar bar.foo.my.class

но проблема в том, что задача выполняет скрипт изнутри банки. Тогда bar.foo.a.jar не находится, потому что он не на том же уровне

я пробовал с

/ usr / bin / java -jar ../../bar.foo.a.jar bar.foo.my.class

но я не работаю, какие-либо предложения о том, как мне этого добиться? Есть ли лучший способ сделать что-то подобное?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Из вашего вопроса не ясно, что вы на самом деле пробовали, но вот пара указателей.

  • Невозможно выполнить сценарий оболочки, который находится внутри файла JAR.Вы должны извлечь его в автономный файл в файловой системе, прежде чем сможете его выполнить.

  • Нельзя использовать файл JAR, который вложен в другой файл JAR.(Или, по крайней мере, вы не можете без создания собственного ClassLoader.) Вложенный файл JAR необходимо извлечь как автономный файл.

  • Если ваша проблема связана с относительными путямиВам необходимо обратить особое внимание на то, что находится в «текущем каталоге» в момент, когда путь разрешен.В качестве эксперимента попробуйте заменить относительный путь на абсолютный путь к файлу JAR.

  • Параметр -jar не предназначен для такой работы.Предполагая, что файл JAR действительно существует в относительном местоположении, которое вы используете, вам, вероятно, нужно сделать следующее:

    /usr/bin/java -cp ../../bar.foo.a.jar bar.foo.MyClass
    

    Опция -jar указывает JVM выполнить файл JAR в качестве команды, используяMain-Class объявлен в манифесте JAR-файла как точка входа.Если вы сделаете это:

    /usr/bin/java -jar ../../bar.foo.a.jar bar.foo.MyClass
    

    , вы обнаружите, что bar.foo.MyClass передается в объявленную основную программу в качестве первого аргумента командной строки.


Я бы посоветовал уделить несколько минут внимательному прочтению страниц руководства для команды java, команды jar и связанных страниц, описывающих работу пути к классам и т. Д.

1 голос
/ 07 апреля 2011
Опция

-jar - это удобный способ выполнить класс внутри файла jar, то есть с исполняемым файлом jar. Но использование -jar file будет игнорировать пути к классам пользователей.

Возможно, вам будет проще определить правильную переменную classpath и выполнить команду с помощью

/usr/bin/java -cp $CLASSPATH bar.foo.my.class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...