metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-09-19 12:12 pm

Leiningen, Maven и прочая

А скажите мне, почему в жабе приняты такие хитрожопости с инфраструктурой разработки?

От входа я что-то не соображу, как правильно прикрутить к кложуре jdbc, но если воспользоваться leiningen (по этим статьям: http://alexott.net/en/clojure/ClojureLein.html и http://devcenter.heroku.com/articles/clojure-web-application ), то проект создается, зависимости выкачиваются, итд.

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

[identity profile] craneop.livejournal.com 2011-09-19 09:30 am (UTC)(link)
Заебись, они придумали еще один Maven.

Хитрожопость для того и создана, чтобы разработка разных проектов велась по одной и той же модели жизненного цикла (единая структура директорий в проекте, например или там фазы build), вместо ада Ant-based билдов. Плюс автоматизация разрешения зависимостей. В общем, когда осваиваешь этот инструмент, работать становится гораздо проще. Но порог вхождения определенный имеется, но это ж Java.

Автоматизация разрешения зависимостей - это очень ок, потому что этим решается проблема транзитных зависимостей, которые ручками задолбаешься решать. Управление репозиториями, версиями JAR-ок тоже достаточно логичное.

[identity profile] volodymir-k.livejournal.com 2011-09-19 09:35 am (UTC)(link)
> почему в жабе приняты такие хитрожопости с инфраструктурой разработки?

???
Некоторые заморочки могут быть только при использовании многочисленных компонентов с определёнными зависимостями и определённых версий, и в контексте полного процесса разработки. Типа, с чекаутом, компиляцией-сборкой, деплойментом на тестовый сервер, запуском тестов и выдачей отчётов, с инкреметированием версии. Вот тогда да, могут быть вопросы. В тривиальных случаях 1 xml, батник и всё.

[identity profile] volodymir-k.livejournal.com 2011-09-19 09:36 am (UTC)(link)
> Мне как-то более привычно "скачал нужную версию, руками положил рядом в проекте и ссылаешся на нее".

А вот это называется "колхоз" и гарантирует невоспроизводимость билд-окружения на другой машине в другое время. С невоспроизводимыми глюками от кривизны сборки.

[identity profile] sorhed.livejournal.com 2011-09-19 09:38 am (UTC)(link)
Потому что в любом джава-проекте средней руки очень много зависимостей, for good or for bad. Ну то есть штук 20 — нормально, а бывает и 50-70. Всё это опенсорсное, разумеется, постоянно обновляется, и содержит кучу транзитивных зависимостей, иногда даже с циклами.

Руками весь этот ад обновлять заебёшься, вот и был придуман мейвен. Параноики присоединяют его к собственному репозиторию, и запрещают лезть в публичные. Но принцип остаётся.

(и, кроме того, есть главный вопрос: класть ли зависимости в свн/гит. Если да, то обновлять их ещё более заебёшься, если нет — это нарушает принцип «билд должен выполняться с нуля нажатием одной кнопки», а это очень хороший принцип).

[personal profile] alll 2011-09-19 10:39 am (UTC)(link)
> Мне как-то более привычно "скачал нужную версию, руками положил рядом в проекте и ссылаешся на нее".

А статыщпицотмильонам индусов эта эта ваша привычная операция категорически не под силу. Так что вы, ребе, в категорическом меньшинстве и ваши привычки тут веса не имеют.

[identity profile] altmind.livejournal.com 2011-09-19 10:02 pm (UTC)(link)
в проекте были воспроизводимые проблемы с порядком разрешения зависимостей из-за чего maven пришлось подправить, из-за чего вся организация зависла на конкретной патченой старой версии мавена.

плюс так повелось, что в разных ветках SCM лежат pom.xml с одинаковым modelVersion. из-за чего работать в двух воркспейсах одновременно проблематично(капец как проблематично). собраные jar в локальном репозитории не различают из какой они ветки из за чего появляются невоспроизводимые на другой машине проблемы, или наоборот - все работает до того момента, пока кто-нибудь другой не вытянет себе проект.

[identity profile] zmila.livejournal.com 2011-09-20 09:12 am (UTC)(link)
я примерно так и делал :)
лейном создал пустой проект. когда нужно какая-то либа, в тот проект записываю зависимость, lein deps, потом из папки lib этого пустого проекта ручками беру либу и кладу её в воркин-фолдер, где все мои рабочие проекты, и дальше про лейн забываю, всё остальное эклипсом делаю

но запланировал почотче освоить этот лейн, он кроме создания болванки и выкачивания зависимостей ещё кучу полезностей делает. ну и комманд-лайн, как некоторым нравится :)