Правильный способ работы с внешними библиотеками в Java (используя Eclipse) - PullRequest
8 голосов
/ 10 сентября 2010

Это своего рода продолжение моего ранее оставшегося без ответа вопроса ( ссылка ), который обострился за последние недели, и теперь он пришел к точке, когда я больше не могу развиваться. ..

Итак, вот сделка; У меня больше математического / инженерного опыта, чем в чистом CS, поэтому у меня нет большого опыта в правильной / крупномасштабной разработке программного обеспечения, а скорее в сценариях и алгоритмах. Теперь, когда я работаю над большим проектом, меня смущают некоторые аспекты разработки. Одним из них является обработка библиотек / зависимостей

Сначала я создал папку с именем lib в папке моего проекта (в рабочей области Eclipse) и скопировал туда свои внешние библиотеки, а затем добавил их в путь сборки. Однако позже мне понадобились некоторые другие вещи, такие как JCommons, JFreeChart, Apache Commons Math и т. Д. В соответствии с инструкциями эти библиотеки могут / должны быть включены в качестве пользовательских библиотек, что позволяет разработчику просматривать документацию и исходный код из IDE. (например, Затмение). Я все понял правильно, я надеюсь ...

Так в чем же проблема? Ну, во-первых, это произошло потому, что упомянутые выше пользовательские библиотеки не включены в SVN-копию проекта, а это означает, что мои коллеги, которые хотели протестировать мой проект, не смогли этого сделать, просто взяв проект у SVN. Теперь, когда я сменил рабочую станцию ​​на работе, вторая фаза проблемы осталась незамеченной, я хотел импортировать свой проект в Eclipse из своей резервной копии, но тогда все, кроме этих пользовательских библиотек, уже есть. Чтобы сделать все более сложным, когда это программное обеспечение будет готово, оно будет реализовано на сервере, поэтому было бы абсолютно лучше, если бы все можно было упаковать в одну библиотеку или, что еще лучше, запустить jar файл.

Ранее мне посоветовали взглянуть на Maven или Ivy, но после первоначальной проверки их обоих я понял, что они используются с самого начала и в основном для более сложных проектов. Честно говоря, я полностью озадачен тем, как я должен управлять своими зависимостями. Есть идеи?

(Извините, что долго держал, но я подумал, что лучше заполнить и длиннее, чем неадекватную информацию)

РЕДАКТИРОВАТЬ: Мне удалось решить проблему; проблема, по-видимому, возникла из-за того простого факта, что eclipse не копирует все ресурсы в одно место, а инструкции по установке для некоторых библиотек не предупреждают вас о том, как наилучшим образом управлять библиотеками.

Спасибо всем, кто нашел время, чтобы попытаться помочь мне. Со временем я буду больше изучать такие проекты, как Maven и Ivy, это определенно интересные вещи. Однако сейчас мне просто нужно вернуться к программному обеспечению в работающем состоянии, слишком долго боролись с новыми вещами .. :)

Ответы [ 6 ]

10 голосов
/ 10 сентября 2010

С риском совершения акта ереси, я бы сказал, что Мейвен и Вот-не слишком уж здесь.Вам нужны ваши зависимости в вашем проекте SVN, все просто.Вы добавили свою папку lib в путь сборки в Eclipse, и это нормально.Но если вы специально не добавите содержимое папки lib в свой проект (как описывает Фред), эти элементы не будут иметь права на фиксацию в SVN - они просто будут указаны в пути к классам вашей установки.Это хорошо для вас, но не для тех, кто хочет проверить ваш проект (как вы уже нашли).

Я ценю, что у нас могут быть бесконечные дискуссии о передовой практике, обоснованности принятия сторонних библиотек для контроля версийи так далее, и так далее ... но я думаю, что у большинства людей есть работа; -)

4 голосов
/ 10 сентября 2010

Потратьте некоторое время, чтобы узнать, как создать проект, используя Maven . Он так много делает для тебя, что это удивительно.

2 голосов
/ 10 сентября 2010

Три варианта:

  • Maven ( refcard ) - очень мощный инструмент, но в то же время очень простой в использовании.Я использую его во всех своих проектах, независимо от того, насколько они маленькие.Это инструмент управления зависимостями + сборка в одном
  • Ivy - очень похож на maven, но это всего лишь инструмент управления зависимостями.Вам придется делать свои сборки с помощью ant
  • фиксации файлов проектов jars & eclipse - это не переносимо между IDE, но на самом деле не так уж ужасно и используется во многих проектах

Обновление: несколько слов, объясняющих идеологию Maven:

  • соглашение о конфигурации - вы структурируете свой проект заранее определенным образом.Это не имеет отношения к управлению зависимостями, поэтому просто упомяну его.
  • репозитории - вот где на самом деле находятся jar-файлы.Они не находятся в вашем SVN, потому что у них есть отдельный механизм управления версиями и они занимают ненужное пространство.
  • IDE интегрируются с maven.Например, m2eclipse получает зависимости maven и добавляет их в путь сборки eclipse, что делает использование прозрачным
  • разрешение зависимостей - в pom.xml вы определяете несколько тегов <dependency> с именеми версия, и maven извлекает все необходимые файлы из удаленных репозиториев.Он также выбирает файлы jar, от которых зависят ваши зависимости (транзитивные зависимости).Таким образом, вы не получите NoClassDefFoundException.

Для меня это очень просто: вы определяете что вам нужно , а maven решает, как его получить и какчтобы добавить его в свой путь к классам.

2 голосов
/ 10 сентября 2010

Хорошо, я думаю, что это можно решить ..

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

Другая вещь, поскольку она будет развернута на сервере, вам нужно будет иметь каждый jar в папке lib.

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

0 голосов
/ 10 сентября 2010

В нашей компании у нас есть отдельный репозиторий SVN для сторонних библиотек, и у нас есть правило компании, согласно которому на каждой рабочей станции разработки этот репозиторий извлекается в C: \ dev. Так что у каждого есть библиотеки в нужном месте, и проекты работают нормально.

0 голосов
/ 10 сентября 2010

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

Что касается упаковки в один JAR-файл - это возможно с Ant, но зачем вам это нужно?

...