Вопрос

Я пытался запустить файл 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 включает путь к моему основному классу, так что здесь это не проблема.

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

Это было полезно?

Решение

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

file:/opt/sybase13/...

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

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

Другие советы

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

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

Путь к классу:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top