Бегущая банка на снежном барсе с классной дорожкой - PullRequest
0 голосов
/ 14 февраля 2011

У меня снежный барс, и я только что написал класс Java по затмению. Проект eclipse ссылается на пользовательскую библиотеку, которая сама указывает на кучу jar-файлов, которые у меня есть где-то в системе. Когда я запускаю приложение через Eclipse, все идет гладко. Затем я экспортирую класс в виде jar-файла и пытаюсь запустить его из терминала, набрав:

java - jar myApp.jar

Он генерирует исключение java.lang.NoClassDefFoundError, что означает, что он не может найти библиотеки, на которые я пытаюсь ссылаться. Зная, что мои файлы jar пользовательской библиотеки находятся в / Users / myname / tempJars, я также попытался упомянуть путь к классу, используя опцию -cp (java -cp /Users/myname/tempJars -jar myApp.jar) или для прямой ссылки на него в файле манифеста. Обе попытки потерпели неудачу, и ошибка одинакова. Эти библиотеки являются библиотеками Java 1.5, поэтому я подумал, что должен попытаться сослаться на другую версию Java с помощью переменной среды JAVA_HOME. Я построил следующий скрипт:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:/Users/myname/tempJars

java -jar myApp.jar

Опять, ничего хорошего. Я гуглил, как выполнять jar на снежном барсе, нашел 32/64 битное дело в некоторых местах и ​​даже попытался выполнить с опцией -d32, но все равно безрезультатно. Поскольку тот же код выполняется в Eclipse очень хорошо, я уверен, что это просто вопрос настройки JVM, чтобы он правильно включал пользовательские библиотеки.

Может ли кто-нибудь помочь мне с этим?

Заранее спасибо.

1 Ответ

3 голосов
/ 14 февраля 2011

Вам нужно перечислить сами JAR-файлы в пути к классам, а не только каталог, содержащий их.(Список каталогов предназначен для случаев, когда у вас есть разархивированные файлы .class в иерархии пакетов, лежащих без дела)

Возможно, вам потребуется выполнить -cp /Users/myname/tempJars/libA.jar:/.../libB.jar

Я полагаю, некоторые (но, возможно, не все)JVM поддерживают символы подстановки, поэтому -cp /Users/myname/tempJars/* или какой-либо другой вариант может работать.

...