Не удается найти класс, даже если файл JAR находится в рабочем каталоге - PullRequest
3 голосов
/ 19 сентября 2011

Я пытаюсь заставить мою Java-программу работать в AIX.Я использовал Eclipse в Windows, чтобы создать исполняемый файл Jar, jRams.jar ниже.Я продолжал получать сообщение об ошибке «класс не найден», пока наконец не поместил все внешние библиотеки в один каталог.

$ ls
JAXB2_20081030.jar
JAXB2_20110601.jar
activation.jar
asjava.jar
commons-beanutils-1.8.3.jar
commons-beanutils-bean-collections-1.8.3.jar
commons-beanutils-core-1.8.3.jar
commons-codec-1.5.jar
commons-collections-3.2.1.jar
commons-configuration-1.6.jar
commons-digester-2.1.jar
commons-jxpath-1.3.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
commons-logging-adapters-1.1.1.jar
commons-logging-api-1.1.1.jar
jRams.jar
jaxb-api.jar
jaxb-impl.jar
jaxb-xjc.jar
jaxb1-impl.jar
jremote.jar
jsr173_1.0_api.jar
log4j-1.2.16.jar
netty-3.2.4.Final.jar
$

Тем не менее я получаю сообщение об ошибке «класс не найден».

$ java -jar jRams.jar
The java class is not found:  com.jbase.jremote.JRemoteException

jremote.jar определенно содержит JRemoteException.Почему это не работает?

ОБНОВЛЕНИЕ

Спасибо за ваши прямые ответы.Теперь я лучше понимаю природу java-приложения и файла манифеста.

Оказывается, мой ftp-клиент переносил данные в режиме ASCII, а не в двоичном формате, поэтому файлы jar были повреждены.Тем не менее я многому научился.

Ответы [ 3 ]

7 голосов
/ 19 сентября 2011

При использовании опции -jar необходимо указать, какие jar-файлы должны быть в вашем пути к классам в файле манифеста .Просто наличие необходимых jar-файлов в одном и том же каталоге не поможет.

Добавьте в манифест строку с текстом:

Class-Path: JAXB2_20081030.jar:JAXB2_20110601.jar:....:netty-3.2.4.Final.jar

или пропустите параметр -jar и запустите, используя

java -cp JAXB2_20081030.jar:....:netty-3.2.4.Final.jar:jRams.jar pkg.JRamsMain

и он должен работать нормально.

(Обратите внимание, что в * nix-системах, в отличие от машин Windows, файлы JAR в путях классов следует разделять, используя вместо этого :из ;.)

Дополнительная литература:

1 голос
/ 19 сентября 2011

Вам необходимо добавить все эти JAR-файлы во время выполнения CLASSPATH, добавив параметр -classpath. AIX требует от вас разделения JAR с помощью :

0 голосов
/ 19 сентября 2011

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

Пример ( Предполагается, что каждая зависимость находится в том же каталоге, в котором вы выполняете команду java из ):

java -cp commons-collections-3.2.1.jar; jaxb-impl.jar; etc.. ;jRams.jar package_to_class.MyMainClass.java

Где package_to_class является примером: com.myproj.example.

ИЗД. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...