Вопрос по java, jar – параметры командной строки с JarSplice?

2

JarSplice позволяет объединять файлы JAR и другие зависимости и библиотеки в один исполняемый файл JAR.

Однако мой исполняемый файл jar требует двух аргументов командной строки, которые, кажется, вообще не передаются, когда я вызываю JarSplice jar.

Я не видел на сайте ничего о том, как это сделать или вообще возможно ли это. Любопытно, сталкивался ли кто-нибудь с этой проблемой или нашел возможное решение.

Update

Я должен был также добавить, что мой основной класс указан в настройке JarSplice и вызывается успешно. Однако, если я вызываю java -jar myjar.jar param1 param2, а затем пытаюсь вывести param1 и param2, они будут нулевыми

Это не такfat jar исполняется как обычный JAR сjava -jar myfat.jar [my app options...]? npe
Да, но параметры не дошли до основного правильно. JWiley

Ваш Ответ

1   ответ
3

Я боюсь, у этого инструмента есть некоторые серьезные недостатки.

Вместо того, чтобы просто установить свойMain-Class вfat.jar MANIFEST.MFэто устанавливает его собственноеorg.ninjacave.jarsplice.core.JarSpliceLauncher какMain-Class.

Затем, когда вы начинаете свойfat.jar (с помощьюjava -jar fat.jar) этотJarSpliceLauncher класс начинаетnew process используяProcesBuilder и не передает ему никаких дополнительных параметров.

Для меня это просто ошибка / плохой дизайн вJarSplice.

Теперь, обходной путь для этого должен передать ваш фактическийMain-Class вjava исполняемый файл так:

java -cp fat.jar org.myawesomeapp.MyAwesomeClass [params....]

Также есть и другие (better) опции:

Read about Maven Assembly Plugin, and it's jar-with-dependencies descriptor. In Eclipse, you can use Export => Runnable JAR => Select Extract required libraries into generated JAR.
Ой! Это главный сбой, ИМО.
@JWiley Я запустил его и создалfat.jar, Это позволяет вставить основной класс в графический интерфейс, а затем поместить его вMANIFEST.MF но в области под названиемLauncher-Main-Class, Затем я декомпилировалJarSpliceLauncher и заглянул внутрь. Теперь этоfun!. Это открывает банку внутренне (используяgetProtectionDomain() взломать), разбираетMANIFEST.MF и получаетreal Основной класс. Затем выполняет jar в другом процессе, используя этот настоящий основной класс. О, мой ....
Я запутался в том, как это отличается от добавления основного класса в опции графического интерфейса JarSplice, который, как я видел, добавлялся в файл "MANIFEST.MF". уже. Кроме того, я попробовал пробуждаемую банку с затмением, но у меня там были проблемы с наличием банок внутри банок, поэтому я пришел на JarSplice. Если у вас есть дополнительная информация, это было бы здорово, но спасибо за отличный ответ! JWiley
@ StefhenC Я полностью согласен. npe, как ты узнал, что JarSplice даже примет основной класс? Я везде искал документацию и ничего не мог найти. JWiley
Моя ошибка, извините, опция в Eclipse должна быть & quot;Extract required libraries into generated JAR& Quot ;. Это перепаковывает все библиотеки в ваш JAR вместе с вашим кодом. Я отредактировал ответ. И еще одна вещь - если вы используете какие-либо коммерческие библиотеки с закрытым исходным кодом, проверьте, позволяет ли их лицензия переупаковывать. Это не очевидно.

Похожие вопросы