Проблемы с классами Java - PullRequest
3 голосов
/ 02 декабря 2008

Я пытался запустить файл jar - назовем его test.jar - который использует Sybase jconn3.jar в системе Unix.

Я создал файл MANIFEST.MF, который имеет следующее:

Class-Path: $SYBASE/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

Это дает ClassNotFoundError. $ SYBASE - системная переменная, которая указывает на / opt / sybase13; Я также попробовал следующее:

Class-Path: /opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

и

Class-Path: opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

Однако, если я скопирую файл jconn3.jar из $ SYBASE / jConnect-6_0 / classes в тот же каталог, что и test.jar, и обновлю свой MANIFEST.MF следующим образом:

Class-Path: jconn3.jar commons-net-1.3.0.jar

Приложение работает как положено.

Теперь я смог проверить работоспособность файла jconn3.jar, скопировав его локально; мой файл MANIFEST.MF содержит путь к моему основному классу, поэтому здесь это не обсуждается.

Как вы думаете, может быть проблема? Я слишком долго смотрю на это. Спасибо!

Ответы [ 2 ]

12 голосов
/ 02 декабря 2008

Записи в пути к классам либо относятся к JAR, в который они встроены (который у вас работает), либо являются URL. Чтобы ваши абсолютные пути работали, вам необходимо преобразовать их в URL-адреса, например,

file:/opt/sybase13/...

Нет механизма использования переменных.

Хотя в спецификации JAR это не сказано четко, абсолютные URL-адреса схемы file: работают в атрибуте class-path.

0 голосов
/ 02 декабря 2008

Переменные среды не считываются загрузчиком классов AFAIK. Однако вы можете добавить jar в конфигурационный скрипт

Согласно спецификации записи являются не абсолютными родственниками банки:

Class-Path:

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

http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html # Спецификация манифеста

...