2013-11-07 4 views
1

Директория в моих файлах .jar, как это:Run исполняемой банки броском ClassNotFoundException

в remote.jar

-com 
-lib 
-META-INF 

под META-INF является файлом MANIFEST.MF:

Manifest-Version: 1.0 
Class-Path: lib/* 
Main-Class: com.xx.xx.Main 

и все фляги под lib папка.

Из командной строки, когда я запускаю java -jar remote.jar, он дает мне ClassNotFoundException, класс не найден в одной из банок под lib папкой. Если функция main не ссылается на какой-либо класс в lib, командная строка работает без проблем.

Мой вопрос в том, почему он не может найти классы в баночках под lib.

EDIT:

нет вложенных папок в папке lib

+0

возможно дубликат [java.lang.ClassNotFoundException при запуске Java - jar (все еще не решен)] (http://stackoverflow.com/questions/1795452/java-lang-classnotfoundexception-when-running-java-jar-still-unsolved) –

+1

на стороне заметки: ваше название неверно –

+0

Попробуйте изменить путь к классу './Lib /' – Choc13

ответ

2

Проблема заключается в том, что свойство класса Path в манифесте не работает так, как вы думаете, что он делает. См http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

Примечание: Класс-Path точки заголовка для классов или JAR-файлов в локальной сети , не JAR файлы в файле JAR или классы, доступные через интернет-протоколов. Чтобы загрузить классы в файлы JAR в файле JAR в путь к классу, вы должны написать собственный код для загрузки этих классов . Например, если MyJar.jar содержит другой JAR-файл с именем MyUtils.jar, вы не можете использовать заголовок класса в манифесте MyJar.jar для загрузки классов в MyUtils.jar в путь класса.

Самое простое решение состоит в том,

+0

В моих баночках нет вложенных банок , – Mike

1

Я боюсь настройки вашего MANIFESTClass-path не позволит вам успешно загружать классы из nested банок (т.е. в вашем банке, как указано в ссылке с ответом Яна).
Если вы хотите упаковать единый исполняемый банку, ваши лучшие варианты будут:

+0

@EJP Вы ошибаетесь. См. Ссылку с ответа Иана. 'не файлы JAR в JAR-файле или классы, доступные через интернет-протокол' – kiruwka

+0

@EJP - уметь снимать нижний предел? Пожалуйста, внимательно прочитайте мой ответ, прежде чем принимать решения. Спасибо – kiruwka

+1

вообще не проголосовали: я рекомендую изменить слово «местный», это вводит в заблуждение и неточно. «Вложенные» намного лучше –

Смежные вопросы