Java-скрипт открытия ProcessBuilder в Linux

Вернемся снова, на этот раз с вопросом о Java. Мне сказали, как заставить Processbuilder запускать неродные сценарии (вызывая программу, которая будет запускать сценарий), но я пытался запустить java-скрипт и столкнулся с парой проблем. Во-первых, должен ли я использовать .class или .jar? оба они могут быть запущены, но я не уверен, какой из них будет работать лучше. И тогда как мне их правильно выполнить? Я попытался вызвать java (/usr/lib/jvm/java-6-openjdk/jre/bin/java), а затем указать путь к файлу класса, но это, похоже, не работает.

Любые идеи?


person Curlystraw    schedule 26.01.2011    source источник
comment
Я помнил, что .jar был предпочтительным форматом, если у вас есть два или более классов. Почти каждая полезная программа делает это, поэтому используйте .jar. Даже если у вас еще нет двух классов, велики шансы, что они будут :), поэтому вы можете не беспокоить своих пользователей изменением того, как запускать вашу программу.   -  person sarnold    schedule 26.01.2011


Ответы (2)


Я согласен с Сарнольдом в вопросе о .jar. Что касается выполнения кода с помощью ProcessBuilder, вы можете выполнить файл .jar, если этот файл содержит метод main() и имеет заголовок манифеста Main-Class, который может быть сгенерирован при создании .jar. После того, как вы создали .jar, вы должны использовать команду, подобную этой, для запуска .jar:

java -jar jar_file_name_here.jar

Если у вас есть несколько основных классов и вы хотите запустить определенный, вы можете использовать такую ​​команду:

java -jar jar_name.jar com.main.class.package.path.here.SomeClassName

Вы пытаетесь выполнить чужой .jar или это ваш собственный файл, который вы просто хотите выполнить внутри скрипта? Почему вы используете скрипт, из любопытства?

person Ampp3    schedule 26.01.2011
comment
На самом деле я выполняю научный проект, и я использую основную программу Java для запуска группы сценариев с других языков — отсюда и процесс-построитель. Между прочим, в java-скрипте всего один класс. Кроме того, для построения процессов требуется программа, а затем скрипт. Я бы предпочел иметь возможность вызывать processbuilder для всех моих сценариев для обеспечения согласованности. К сожалению, это означает, что я не могу использовать флаги при вызове программ. - person Curlystraw; 26.01.2011
comment
вы всегда можете использовать системный язык сценариев для запуска процессов. если вы используете Linux, вы всегда можете написать пакетный скрипт, чтобы сделать то же самое, и вы можете перенаправить вывод из программ, если считаете нужным. Я знаю, что вы можете сделать то же самое на Java, просто кажется, что это может быть более простым, если вы сделаете это с помощью сценариев... - person Ampp3; 26.01.2011
comment
ха-ха, да, так, наверное, было бы проще. К сожалению, так как это школьный проект, я должен использовать Java для основной программы. что бы я сделал, чтобы сгенерировать main_class при создании .jar? - person Curlystraw; 26.01.2011
comment
ну, вся информация об основном классе/манифесте действительно помогла мне, спасибо! - person Curlystraw; 26.01.2011

Вам либо нужен -jar и путь к банке с манифестом, который называет ваш основной класс, либо -cp с путем к каталогу, в котором есть ваши классы в стандартном макете, либо -cp с путем к банке за которым следует имя класса с main.

java -jar I_AM_A_JAR_WITH_A_MANIFEST.jar

java -cp I_AM_JAR_1.jar:I_AM_JAR2.jar... this.is.my.FooClass

java -cp dir_path1:dir_path2:dir_path3 this.is.my.FooClass

где 'dir_pathN' - это каталог со стандартной иерархией классов.

person bmargulies    schedule 26.01.2011