2011-12-16 3 views
0

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

Мне нужно это, чтобы упростить обновление внешних библиотек.

Поэтому я поместил это в свой файл build.xml, который добавляет все библиотеки из dist/lib в свой собственный jar-файл.

<target name="-post-jar"> 
    <!-- Include all java libraries --> 
    <fileset dir="dist/lib" id="extern.libs"> 
     <include name="*.jar" /> 
    </fileset> 

    <!-- Add the libraries from the fileset to the project.jar --> 
    <jar jarfile="${dist.jar}" update="true"> 
     <zipgroupfileset refid="extern.libs"/> 
    </jar> 
</target> 

Но когда я пытаюсь использовать внешние библиотеки, как «org.zkoss.zk.ui.Component» Я получаю ошибку, что эта библиотека не может быть найден.

Есть ли лучший способ включить внешние библиотеки в мою собственную библиотеку, чтобы мой проект мог их использовать?

+0

Используйте внешний инструмент управления зависимостями, такой как Maven. –

ответ

0

Зависит от IDE ... Если вы используете Eclipse, то это очень легко ... перейти к Свойства-> Build Path, а затем добавить библиотеку ...

+0

Я использую NetBeans, и есть аналогичное свойство для добавления библиотек, но я хочу, чтобы мои проекты имели доступ ко всем библиотекам, которые включены в мой собственный проект библиотеки. – mw88

+0

постоянно включают вашу библиотеку проектов в другие библиотеки .. – sum2000

+0

Я считаю, что OP спрашивает о включении зависимых библиотек во встроенную банку. Добавление баннеров в путь сборки в среде IDE автоматически не включает их встроенную банку. – Andy

2

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

Если вы хотите создать «все-в-одном» артефакт, рассмотреть что-то вроде OneJar или jarjar или в Maven Shade plugin создать банку, который не имеет внешних зависимостей.

+0

Я думаю, что использование maven было бы излишним для моих нужд. Я пытаюсь разобраться с OneJar в данный момент, но я не могу заставить его работать до сих пор ... – mw88

1

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

Кстати, было бы плохой идеей разрешить вложенные банки: в каждом проекте вы бы ввели 6 или семь версий commons-lang или log4j, потому что от них зависит много библиотек.

+0

Это хороший момент, и я должен думать об этом. Я просто хочу добавить одну библиотеку в свои проекты, и эта библиотека должна перетащить все зависимости. – mw88

+0

Вот что такое Maven (и Ivy): управление зависимостями. Мне лично часто бывает сложно использовать Maven, чем самостоятельно обрабатывать зависимости, но YMMV. –

1

Вы можете использовать One-jar или Fat Jar. Если вы используете maven, вы можете использовать плагин maven-assembly.

+0

Я сейчас пытаюсь OneJar, Fat Jar, похоже, является плагином Eclipse, но я использую NetBeans ;-) – mw88

+0

@ mw88 FatJar - это плагин для [onejar] (http://one-jar.sourceforge.net/). –

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