Класс не найден, несмотря на путь к классам в MANIFEST - PullRequest
3 голосов
/ 13 марта 2012

У меня есть эта банка:

/mybundle.jar/
    de/mybundle/myclass.class
    lib/mysql.jar
    META-INF/MANIFEST.MF

Со следующим MANIFEST.MF

Manifest-Version: 1.0
Class-Path: lib/mysql.jar
Main-Class: de.mybundle.myclass

Все это кажется мне совершенно правильным, но когда я бегу

java -jar mybundle.jar

Я получаю исключение NoClassDefFoundException, когда класс пытается создать экземпляр одного из классов MySQL-библиотеки.

Что я сделал не так?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Вы не можете связывать файлы JAR с другими файлами JAR.Пути, указанные в манифесте, относятся к местоположению вызываемого вами файла jar, поэтому в вашем случае это относится к местоположению mybundle.jar.

У вас есть два варианта:

  1. Либо поместите банку MySQL в директорию lib вне вашей mybundle.jar.
  2. Создайте толстую банку , который содержит все классы из необходимых jar-файлов в дополнение к вашим собственным классам.Это доступно из Eclipse или Maven .
0 голосов
/ 13 марта 2012

Если ваш mybundle.jar находится в c: / foo, то ваш mysql.jar находится в c: / foo / lib.Путь к классу в манифесте относится к исполняемому JAR так, как вы его написали.

...