LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

Когда ты запускаешь программу через -jar, jvm смотрит в META-INF/MANIFEST.MF твоего jar-файла, вытаскивает оттуда имя Main-класса и Classpath-а и использует их для запуска твоего приложения.

Когда приложение имеет зависимости, есть 3 основных способа его запуска:

  1. Без использования -jar. Обычно пишут sh-скрипт, который конструирует classpath (например перебирая все файлы в каталоге lib) и запускает java -cp $cp my.Main
  2. С использованием -jar без внешних зависимостей. В этом случае все jar-файлы сливаются в 1 большой jar-файл (т.н. uber jar). Минус в том, что некоторые библиотеки могут тебя не понять. На мой взгляд так лучше не делать, хотя для простых случаев скорее всего всё будет работать.
  3. С использоанием -jar и прописыванием Classpath в манифесте. Естественно всё должно быть прописано как положено и запускаться как положено.

Моё имхо — лучше всего использовать первый вариант. Он самый простой для понимания, скрипт пишется на коленке за 2 минуты (или гуглится) и все проблемы решаются быстро и просто. Преимущества -jar только в том, что в винде можно запускать дабл-кликом, но всё равно так никто не делает, серьёзные программы так или иначе пишут скрипты или лаунчеры.

Чтобы решить твою проблему — распакуй твой jar-файл, который ты запускаешь (jar xf или unzip), исследуй сгенерированный мавеном MANIFEST.MF, думаю проблема будет понятна после этого.

Исходная версия Legioner, :

Когда ты запускаешь программу через -jar, jvm смотрит в META-INF/MANIFEST.MF твоего jar-файла, вытаскивает оттуда имя Main-класса и Classpath-а и использует их для запуска твоего приложения.

Когда приложение имеет зависимости, есть 3 основных способа его запуска:

[ol]

  • Без использования -jar. Обычно пишут sh-скрипт, который конструирует classpath (например перебирая все файлы в каталоге lib) и запускает java -cp $cp my.Main
  • С использованием -jar без внешних зависимостей. В этом случае все jar-файлы сливаются в 1 большой jar-файл (т.н. uber jar). Минус в том, что некоторые библиотеки могут тебя не понять. На мой взгляд так лучше не делать, хотя для простых случаев скорее всего всё будет работать.
  • С использоанием -jar и прописыванием Classpath в манифесте. Естественно всё должно быть прописано как положено и запускаться как положено. [/ol]

    Моё имхо — лучше всего использовать первый вариант. Он самый простой для понимания, скрипт пишется на коленке за 2 минуты (или гуглится) и все проблемы решаются быстро и просто. Преимущества -jar только в том, что в винде можно запускать дабл-кликом, но всё равно так никто не делает, серьёзные программы так или иначе пишут скрипты или лаунчеры.

    Чтобы решить твою проблему — распакуй твой jar-файл, который ты запускаешь (jar xf или unzip), исследуй сгенерированный мавеном MANIFEST.MF, думаю проблема будет понятна после этого.