LINUX.ORG.RU

Запуск jar

 classpath, ,


0

1

Добрый день.
В java я профан, но возникла необходимость. Сперва хочу освоиться в рабочем окружении.

Есть два класса в двух пакетах: com.example.packA.ClassA и com.example.packB.ClassB.
В ClassB используется ClassA (import com.example.packA.ClassA) и есть main().
- Скомпилировал и собрал ClassA.jar;
- Скомпилировал и успешно запустил ClassB (java -cp .:path/to/ClassA.jar com.example.packB.ClassB);

Но когда собрал ClassB.jar, то он не хочет запускаться (java -cp path/to/ClassA.jar -jar ClassB.jar), потому что не видит ClassA (java.lang.NoClassDefFoundError: com/example/packA/ClassA).
Почему не запускает jar, в то время, как запускает непакетированный бинарник?

При использовании опции -jar опция -cp игнорируется. Варианты:
1. Не использовать опцию -jar: java -cp ClassA.jar:ClassB.jar com.example.backB.ClassB
2. Упаковать классы так, чтобы и ClassA и ClassB были в одном jar-файле и его уже запускать.
3. Использовать параметр Class-Path в MANIFEST.MF в ClassB.jar, в котором прописать путь к ClassA.jar.

Legioner ★★★★★
()
Ответ на: комментарий от proofit404

Я тоже думаю, что для создания законченного приложения лучше делать единый jar. Пока я пользуюсь только ant (или собираю руками).
Существуют ли какие-либо подводные камни при сборке jar из нескольких? Например, что с манифестом? Мне просто создавать его заново, задавая требуемый Main-Class?

markevichus ★★★
() автор топика
Ответ на: комментарий от markevichus

Скажу честно, что не знаю - я сразу shade'ом начал пользоваться.

proofit404
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.