2012-03-22 2 views
0

Итак, я написал один класс с основным методом, который зависит от другого файла jar, который зависит от многих файлов jar. Чтобы упростить работу, я использовал One-JAR и создал единую исполняемую банку. Сосуд Я создал это хорошо, я был в состоянии запустить его:Eclipse не распознает банку, созданную с помощью One-JAR

java -jar foo.jar 

Это успешно выполняет свое основное приложение.

Далее я создал новый проект в Eclipse и добавил foo.jar в путь сборки через «добавить внешние банки» (я делаю это все время и всегда работает). По какой-то причине в моем проекте Eclipse он жалуется, что он не распознает импорт пакета из foo.jar.

Я рассмотрел предыдущие вопросы о проблемах с банками с Eclipse, но никто не помог. Я подозреваю, что это связано с деревом, созданным One-Jar, но поскольку «java -jar foo.jar» из командной строки отлично работает, я не понимаю, почему Eclipse не видит файлы классов.

Спасибо!

Update: Вот как мой foo.jar создатель One-Jar выглядит как:

META-INF  OneJar.class com   doc   lib   main 

внутри основной:

main  main.jar 

нутро это главный пакет дерева моего приложения с. класс файлов. Теперь, если я включу «main.jar» в Eclipse, он распознает мое приложение. Но тогда он не распознает другие зависимости в lib /, поэтому он генерирует исключения времени выполнения.

Обновление 2: Так что проблема с One-jar и Eclipse не решена, но кто-то упомянул плагин Eclipse с жирным банком, поэтому я попробовал его, и он отлично справился с этой задачей. Созданная банком работала как с Eclipse, так и с Maven. Они также поддерживают One-Jar, вы можете проверить опцию One-Jar при создании фляги. Я не использовал его, но он там (если он работает, он действительно стоит использовать, потому что он должен заботиться о библиотечных конфликтах). Спасибо за помощь.

+0

Банка, созданная одним банком, представляет собой просто банку с классами в ней. –

+0

Справа. Но предположим, что мой пакет com.example.main, тогда он помещает файл .class в: main/main/com/example/main/ – user247866

+1

О, я понимаю, о чем вы говорите. Я думаю, что это делается для того, чтобы избежать конфликтов, похожих на то, как работает затенение - не уверен, что в одной банке есть опция, не связанная с изменением, или нет. –

ответ

0

Eclipse не будет понимать банки внутри банки. Лучше использовать другие банки, чтобы строить путь отдельно.

+0

Пытался включить foo.jar и main.jar, который скомпилирован, но не работал во время выполнения из-за зависимости от других банок. Я могу добавить все другие банки отдельно, это сработает, но я стараюсь избегать этого. Вот почему я использую One-Jar, который работает из команды, но не через Eclipse. – user247866

+0

ok, есть ли какие-то конкретные причины, почему вы хотите его избежать. потому что это обычный способ добавления зависимых банок в путь сборки. в случае, если вы хотите связать все в одну банку, вы можете распаковать все файлы классов и объединить их в одну банку. это может показаться глупым :). но я не мог думать о других способах ... – tsatiz

+1

Удобнее работать с одной банкой, а также гораздо проще отправить ее кому-то еще. И One-Jar должен разрешать конфликты зависимостей (например, мое приложение использует обычную библиотеку 3.4, а одна из библиотек зависит от использования commons 2.4). One-Jar должен иметь возможность затенять это. – user247866

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