Проверка файлов JAR (библиотек) в инструмент управления версиями - это хорошая практика?

Я разрабатываю веб-приложение на Java, и я использую несколько сторонних JAR файлов в моей папке lib. У меня также есть Subversion в качестве инструмента управления версиями.

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

Ответ 1

Это довольно субъективный вопрос... Обычно я применяю следующее эмпирическое правило: если у меня есть код для создания двоичного кода, проверьте код и никогда не используйте двоичный код; если для запуска моего кода требуется двоичный код, и он исходит из внешнего источника, проверьте двоичный файл.

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

Ответ 2

Я рекомендовал бы, когда это возможно, использовать Maven. Тогда вам не нужно будет проверять сторонние JAR файлы в вашем репозитории, чтобы делиться ими между вашей командой разработчиков (большую часть времени).

Если вы еще не знаете, Maven выполняет две основные задачи: автоматизация сборки и управление зависимостями. Каждый проект имеет файл дескриптора, который, помимо прочего, настраивает, какие JAR-ы вы используете в качестве зависимостей. Самое приятное в том, что Maven автоматически разрешит вам зависимости этих JAR и их зависимости и т.д.

Ответ 3

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

Проблема, которую я вижу с Jars, являющейся SCM, заключается в том, что в первую очередь SCM предназначен для управления исходным кодом, и они оптимизированы для этой цели. Скомпилированные артефакты не являются исходным кодом и являются двоичными файлами, когда вы обычно вставляете или обновляете двоичный файл, вы делаете копию двоичного файла, так как большинство SCM не могут "отличать" двоичный файл.

Еще одно соображение заключается в том, что вы делаете, если у вас есть два проекта, для которых требуются проверки зависимостей? Вы проверяете депо отдельно в каждом проекте и носите дублирование? Или вы делаете третий проект, который содержит только зависимости? И теперь вы вручную управляете файлами jar в этом проекте. Что делать, если ваши два проекта требуют взаимозависимых зависимостей?

В-третьих, как вы управляете межпроектными зависимостями (где один из ваших проектов зависит от другого)? Является ли файл jar из одного зарегистрированного в другой? Как насчет управления версиями и другими изменениями? Вам просто нужно проверить эти два проекта и потребовать, чтобы они были построены в строгом порядке?

В моем опыте и мнении эти проблемы обычно достаточны для развития только умеренной сложности, чтобы ответить на вопрос окончательно: Нет, недопустимо проверять зависимости jar файлов. Используйте систему сборки, такую ​​как Maven или Ant + Ivy (или другая альтернатива), которая обеспечивает способ внешнего управления и хранения зависимостей из системы управления исходным кодом.

Ответ 4

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

Я думаю, что это по-прежнему актуально, но SVN исторически плохо работает с двоичными файлами. Разработчик Java в IBM столкнулся с этой проблемой, исследовал и написал свои выводы. Вы можете найти это полезным:

Настройка производительности Subversion: хранить и обрабатывать двоичные файлы без перетаскивания производительности

Здесь вынос:

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

  • Самый эффективный по времени метод - создать единый сжатый файл, содержащий двоичный файл.
  • Самый эффективный с точки зрения затрат метод - использовать эффективную проверку Subversion script в обычной структуре каталогов.
  • Использование любой формы аутентификации на сервере Subversion приведет к потере производительности.
  • Специальная, мощная машина оптимальна для запуска Subversion.