2009-09-15 5 views
4

Возможно, причина, по которой я застопорилась, изучая Java до сих пор, - это то, что я HATE как Java обрабатывает внешние библиотеки. Я застрял, сохраняя их в одном месте, добавляя их индивидуально, исправляя проблемы с версированием и каждый раз, когда я перемещаю/переименую их, а также копируя и записывая путь к классам снова и снова при каждом выпуске приложения Java.Какое самое элегантное решение для управления различными внешними библиотеками Java?

Должно быть изящное решение для всего этого. Я держу все мои библиотеки (вне зависимости от задачи, платформы или других) в своей маленькой папке внутри «Lib» папки в моей папке разработки, вроде этого:

Dev 
    -lib 
    +JS-jQuery 
    +Flex-Degrafa 
    -Java-Xerces 
     +Xerces-1.2.3 
    +More libraries 

я могу используйте Netbeans или Eclipse для Java dev, но ни один из них не обеспечивает очень оптимизированный (и не говоря уже о идиот-доказательстве) способ управления всеми этими.

Подсказка в правильном направлении или онлайн-статья/учебник по этому вопросу будут очень признательны.

ответ

7

Для управления зависимостями библиотеки вы можете использовать Ant + Ivy или Maven.

+0

+1 для maven, чем может генерировать определенные файлы IDE (так что вы получаете независимость от IDE), как Eclipse .classpath и .project. –

+0

@Pascal T: Netbeans напрямую считывает файлы Maven и использует их для конфигурации проекта, а не для перевода в определенный файл IDE. –

+0

Это хорошо, но, честно говоря, генерировать IDE-файлы - это не то, что я делаю 10 раз в день, поэтому для меня это не очень важно. Более того, мне не очень нравятся мастера для управления моими файлами pom.xml, и я предпочитаю делать это вручную, поэтому я не ищу встроенную поддержку или плагины. Другими словами, и это только моя точка зрения, я думаю, что мы можем жить без нее. –

1

Если вы работаете в Linux, вы можете установить библиотеки Java с помощью APT или RPM.

В противном случае я обычно проверяю предварительно скомпилированные JAR-файлы в каталог lib в репозитории управления версиями проекта и удостоверяю, что имена файлов JAR включают полную информацию о версии. Например. lib/foo-1.5.6.jar, а не lib/foo.jar.

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

+0

+1 для хранения номеров версий в именах файлов. –

6

Если это зависит только от управления зависимостями, и вы довольны остальной частью процесса сборки, я бы использовал Ivy, так как он может ненавязчиво управлять вашими зависимостями, оставив ваш существующий процесс сборки неповрежденным. Существует плагин для Eclipse, называемый IvyIDE, который вносит ваши зависимости через контейнер classpath.

Maven 2 имеет более крутую кривую обучения, но обеспечивает гораздо более богатый набор функций для построения ваших проектов и интеграции Eclipse через m2eclipse или IAM.

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

Ознакомьтесь с вводной документацией, чтобы узнать, что сработает для вас.

2

Netbeans 6.7.1 поддерживают Maven довольно хорошо, и выходит из коробки с IDE.

Аддон Eclipse был настолько расстроен, что я снова попробовал Netbeans.

Третий вариант, кроме вариантов ChssPly76, - использовать Ant с Maven Ant Tasks. Я не знаю, могу ли я назвать любое из этих решений особенно «элегантным», но они избавляют вас от необходимости управлять вашими собственными файлами lib/directory и classpath.

0

Maven часто больше проблем, чем того стоит, но способность открывать проект maven непосредственно в IDE, например IntelliJ, отличная. Например, IntelliJ будет загружать все зависимости и иметь их доступными без необходимости запуска сборки сначала или команды mvn, а затем обновления проекта. Также нет необходимости повторно генерировать проект каждый раз, когда добавляется зависимость. Я работаю с несколькими разработчиками Eclipse, которые перешли на IntelliJ только для этого.

Однако один недостаток Maven заключается в том, что многие библиотеки (или версии библиотек) недоступны в публичных репозиториях. Поэтому часто необходимо создать локальный репозиторий, такой как archiva. В ant, это просто вопрос добавления его в каталог lib в репозитории.

Maven также может атаковать, когда вам нужно сделать что-то, что maven напрямую не поддерживает через плагин. То, что обычно было бы несколькими линиями муравья, может часто превращаться в утреннюю работу.

Наконец, buildr - отличный способ использования управления зависимостями Maven и плагинов, а также поддержки специальных задач.

+0

«Субъективная точка зрения на добавленную стоимость Maven» - не субъективная вообще, она основана на опыте реального мира, поддерживающем maven на основе ряда проектов. «Плохие/нерелевантные аргументы в пользу преимуществ IDE» - неуместно? Я предположил, что использование определенных типов IDE поможет вам, если вы используете maven over ant. В очередной раз это основано на реальном опыте, когда люди борются с Maven. «устаревшие рекомендации (перейдите на Nexus, а не Archiva)» - устаревшие? Нет, просто субъективно. Кроме того, это была не рекомендация. –

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

  • Нет связанных вопросов^_^