2013-07-27 3 views
1

Этот вопрос может быть теоретическим, но я не нашел подходящего решения.Создание проблемы с банком

Предположим, что я создаю модуль, который использует 3 файла jar (hibernate, log4j, jackson).

Теперь я хочу скомпилировать мой модуль и создать банку таким образом, чтобы мой модуль мог использоваться любым другим модулем, и этот модуль не должен требовать повторного использования трех банок (hibernate, log4j, jackson).

i.e мой файл модуля jar не должен иметь никаких зависимостей.

Я использую eclipse.Я могу создать jar (project-> export-> jar), но он не включает в себя банки в нем Направьте меня, как я могу это сделать.

Возможно ли использовать apache ant для использования здесь?

+0

* «Является ли apache муравьем от любого использования здесь?» * Теоретически да. Я имею в виду, что Ant может получить все уроки от каждого Jar и сделать «толстый» Jar, содержащий их все. OTOH, как правило, лучше всего просто обеспечить, чтобы соответствующие Jars находились на пути класса времени выполнения. Это 1) Для того, чтобы сохранить важную информацию в манифесте каждой банки. 2) Сохранять цифровые подписи оригинальных банок. & .. 3) Чтобы избежать юридических проблем (большинство API-интерфейсов требуют, чтобы вы их распространяли «как есть». –

+0

Это то, что решает maven и apache ivy. Будет ли это вариант? –

+0

@ ThorbjørnRavnAndersen: Все работает до тех пор, пока учебник для Изучение их мало и прост в использовании. :-) будет здорово, если вы можете предоставить мне некоторую ссылку ... Учтите ma noob ... :-) – user2511713

ответ

0

Вам нужно будет включить все классы из ваших зависимостей в ваш файл jar. Поскольку файл jar является всего лишь zip-файлом, вы можете использовать любой менеджер архива, такой как Winzip, чтобы исследовать их, а затем скопировать содержимое банок, в которые вы зависите, в свою собственную банку, стараясь сохранить структуру каталога неповрежденной.

Таким образом, у вас есть все в одной банке.

+0

Использование Zip-инструмента для создания Jars очень проблематично , Не только инструменты Zip поддерживают уровни сжатия, которые нет у Java, но у вас также есть множество дальнейших забот, как я изложил в своем комментарии. –

1

Wizard Runnable Jar для Eclipse

Runnable Wizard Jar для Eclipse (Файл → Экспорт ... → Java → Runnable Jar File) позволяет разработчикам создавать исполняемые баночки из существующей конфигурации запуска:

enter image description here

Мастер включает 3 варианта обработки зависимостей:

  1. Извлечь необходимые библиотеки в сгенерированную банку: unarchives library зависимости и переупаковывает их в исполняемую банку. Эта опция имеет преимущество в простоте и не требует специального загрузчика классов . Однако переупаковка библиотечных банок может вызвать другие проблемы и не сохраняет подписи подписанных банок. Опция может также нарушать условия лицензии библиотек, которые вы используете .

  2. пакета необходимых библиотек в генерируемую банку: создает «жир банки» с пользовательским загрузчиком классов. Полученная баночка содержит классов приложения и ресурсы библиотечных банки, необходимых для запуска приложения небольшого пользовательского класса загрузчик, который знает, как найти библиотеки банки внутри другого архива фляги

  3. копирования необходимых библиотек ...: создает приложение архив и копии любых необходимых зависимостей библиотеки с целевой папкой.

Я думаю, что второй вариант подходит для вашей нынешней цели.

+0

Можете ли вы объяснить, что такое конфигурация запуска. У моего файла jar файл doenot есть основная функция. У него есть только вспомогательная функция и класс – user2511713

+0

@ user2511713: Если у вас нет основного класса для использования в качестве пусковой установки, вы можете рассмотреть возможность использования некоторого жира Плагины создания jar-like-JarSplice-http: //ninjacave.com/jarsplice –

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