Я работаю над библиотекой файлов .jar, чтобы реализовать кучу вспомогательных классов для взаимодействия ПК с внешним оборудованием. Я также добавлю несколько простых приложений, будь то командная строка или графический интерфейс, для обработки общих задач с использованием библиотеки.
Мой вопрос: есть ли рекомендуемый способ упростить создание экземпляра JVM из командной строки определенным образом?
например вместо того, чтобы требовать от пользователя ввода загадочной, подверженной ошибкам команды, например:
java -cp TurboBlenderLib.jar -jar TurboBlenderApp.jar -DFoo=Bar arg1 arg2
вместо этого я делаю
TurboBlenderApp arg1 arg2
?
Полагаю, я мог бы использовать сценарии оболочки (включая пакетные файлы win32 ... gacckkk), просто я не разбираюсь в них + мне было интересно, есть ли более простой, независимый от платформы способ запуска приложения Java из командная строка.




Пакетный файл сделает эту работу. Поместите точную команду, которую вы хотите выполнить, в файл myProg.bat и запустите ее.
-jar, то -cp (и переменная CLASSPATH) будут проигнорированы.java -jar TheApp <whateverargumentsyouwant>" не должен быть слишком сложным (однако вы можете указать Атрибут Class-Path в манифесте файлов jar).@ Джейсон: Да. java -cp myAppJar; myLibJar; TheApp arg1 arg2 TheApp - это имя класса. Если вы не хотите писать что-то вроде com.org.som.package.etc.App, вы можете создать класс с именем TheApp в пакете по умолчанию.
Сценарии оболочки и командные файлы - это стандартный способ выполнить то, что вы хотите. (Посмотрите на любой крупный продукт Java.)
Это, конечно, абсолютно пафосно и нелепо. Перейти на Java.
Ваша альтернатива - написать небольшую программу на C, которая сделает то, что вам нужно (создаст Java-процесс), и скомпилировать ее для каждой из ваших поддерживаемых платформ. (C - действительно платформенно-независимый язык).
В любом случае вам нужно будет предпринять шаги, зависящие от платформы, чтобы ваше приложение чувствовалось в ОС как дома. В OS X вам нужно будет создать пакет .app, в Windows вам нужно упаковать хотя бы значок и информацию о версии в EXE. Для Linux вполне достаточно сценариев оболочки. :-)
Это довольно просто:
Запишите это в TurboBlenderApp.cmd:
java -cp TurboBlenderLib.jar -jar TurboBlenderApp.jar -DFoo=Bar %1 %2
// Имейте в виду ответ saua о -cp и -jar
Затем из командной строки вы просто пишете:
TurboBlenderApp arg1 arg2
Именно так, как вы хотели.
Если в Unix / Linux замените th4e% 1% 2 на $ 1 $ 2 и убедитесь, что у вашего приложения есть права на выполнение (если вы не знаете, как это сделать, я думаю, вам это тоже не понадобится)
Если вы просто хотите упростить локальное выполнение, используйте командный файл или даже просто создайте собственный ярлык. Если вы хотите создать средство запуска и упаковать исполняемую банку и необходимые библиотеки для развертывания, используйте что-то вроде Launch4j.
Интересно: мне нужно будет проверить launch4j. Спасибо!
Почему-то этот трюк просто не проходит. Что вам нужно сделать, так это создать настраиваемый манифест для вашего файла jar, который определяет свойство Main-class:, и включить в файл jar все файлы классов, которые вы используете. Тогда все, что вам нужно, это запустить
$ java -jar myapp.jar
В реальных операционных системах вы даже можете просто запустить файл jar, так как они будут использовать магический номер для его запуска. Но если необходимо, все, что нужно, - это однострочный пакет или сценарий оболочки, содержащий эту строку.
Это описано в одном из Учебники по Java.
Если вы используете java -jar для запуска своего приложения, вы можете добавить дополнительные jar-файлы в путь к классам, добавив запись Class-Path в манифест основного jar-файла. См. спецификация файла jar для получения дополнительной информации.
Другое решение, как всегда, находится в Джакарте Commons: обычная пусковая установка.
Хм. Есть ли способ сказать JVM: Эй, я хочу запустить файл .jar приложения, использующего эту библиотеку, во втором .jar? (так что я могу отделить реализацию библиотеки от приложения)