Для проекта lein, почему lib / in .gitignore? - PullRequest
5 голосов
/ 18 февраля 2011

Я относительно новичок в Clojure и Java. Почему папка lib в проекте lein не добавлена ​​в репозиторий git проекта lein? Я думаю, что было бы удобно иметь все необходимые файлы для распределенной разработки.

Ответы [ 4 ]

4 голосов
/ 18 февраля 2011

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

4 голосов
/ 18 февраля 2011

В проекте Leiningen файл project.clj определяет зависимости проекта, и когда вы запускаете 'lein deps', все зависимости, перечисленные в файле project.clj, загружаются в lib /.Следовательно, нет необходимости регистрировать файлы jar, потому что project.clj в сочетании с командой 'lein deps' - это все, что нужно другому человеку для воспроизведения той же самой библиотеки lib /, что и у вас.Регистрация во всех банках является избыточной и пустой тратой.

Более того, как указывает mblinn, лучше извлекать баночки из репозиториев артефактов, предназначенных для распределения и обновления зависимостей, а не постоянно изменять и фиксироватьновые банки всякий раз, когда зависимость обновляется.Это особенно верно, когда ваш проект зависит от снимков, которые часто меняются;Если вы отметили банки, вам придется проверять новую банку каждый раз, когда снимок обновляется, но если вы используете 'lein deps' для извлечения банок из репозиториев с артефактами, вы будете оставаться в курсе событий безусилия.Но даже для jar без снимков обновление зависимости путем изменения ее версии в project.clj и последующего запуска 'lein deps' намного проще и быстрее, чем ручное размещение jar в lib / и проверка его в.

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

3 голосов
/ 18 февраля 2011

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

Поскольку leiningen внутренне использует разрешение артефактов maven, вынеобходимо вручную указать, какие репозитории артефактов в случае, если требуемая зависимость не найдена в репозитории по умолчанию, а именно центральный репозиторий maven , релизы clojure и clojars

Например, в случае rome v1.0, который еще не развернут на maven central, но он найден на java.net project kenai repo вам нужно будет напечатать что-нибудь в вашем project.clj по этим направлениям:

...
:dependencies [[rome/rome "1.0"] ...]
:repositories {"kenai" "http://download.java.net/maven/2/"}
...
2 голосов
/ 18 февраля 2011

Ну, суть Leiningen или любого другого инструмента управления зависимостями в том, что он управляет вашими зависимостями за вас.Эти зависимости находятся в отдельных репозиториях артефактов, которые лучше подходят для общедоступных выпусков программных артефактов, чем системы контроля версий.Leiningen совмещается с системой репозитория Maven (заполненный Java-инструмент для построения / управления зависимостями);тем не менее, существуют репозитории артефактов, специфичные для Clojure.

В любом случае, все дело в том, что вы объявляете зависимости, которые есть у вашего проекта в вашем project.clj, и проверяете этот файл project.clj в системе управления версиями.Другие разработчики проверили это и запустили 'lein deps', чтобы избавиться от этих зависимостей, и вуаля!

...