LINUX.ORG.RU

MOP? Maven? Ivy? Интересует пакетный менеджер под Java.

 , , , ,


1

3

Воодушевлённый примером Composer под PHP хочу сейчас что-то подобное под Java. Чтобы был централизованный сервер с юзеровскими свободно добавляемыми пакетами, которые могли бы браться с внешних репозиториев, чтобы зависимости, чтобы настройка окружения.

Есть такое под Java, или прогресс до неё ещё не дошёл?

Как я понимаю, инструменты, перечисленные в заголовке, до этого ещё не дотягивают. Есть что-то приличнее?

★★★★★

Maven например может сгенерировать проект с шаблона, скачать все библиотеки, все плагины сборки, колмпиляторы языков программирования, скачать и запустить СУБД, собрать и протестировать (юнит и интеграционно) проект, построить проекты для IDE, догенеририть исходников, сделать тест покрытия, выполнить релиз, создать инсталляторы, передеплоить приложения в сервера, прогнать апдейты баз, отформатировать код, закоммитить в гит новые версии релиза во все файлы и автоматически построить сайт проекта и залить его на сервер и отослать всем письма.

Каких конкретно фич не хватает по сравнению с Composer?

Все это лежит в Maven Central, добавляется через Sonatype после получения разрешения в специальной системе

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 1 )

для этих целей используются репозитории типа artifactory или nexus

Deleted ()
Ответ на: комментарий от vertexua

добавляется через Sonatype после получения разрешения в специальной системе
Каких конкретно фич не хватает по сравнению с Composer?

Вот, например, свободного публичного репозитория не хватает. Скажем, я хочу тесты погонять — для этого разрешение получать? Вместо того, чтобы просто зарегистрироваться и начать работать?

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

Тесты погонять - подними свой репозиторий?

cdshines ★★★★★ ()
Ответ на: комментарий от KRoN73

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

pylin ★★★★★ ()
Ответ на: комментарий от pylin

Нет, речь именно о тестовом включении _своего_ репозитория с пакетом в центральную систему. Мне же надо проверить, как и что будет работать с готовым решением.

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

Ну там по-моему есть какие-то процедуры тестирования, тут лучше к документам maven обратиться, там описаны процедуры добавления пакета и т.д.

pylin ★★★★★ ()
Ответ на: комментарий от KRoN73

нету все под java использует теже maven репозитори 8)

в том числе любая сборка переносит готовый пакет в локальный, если хочется приключений то поднимается artifatory - он и центральный проксирует и позволяет прозрачно «накладывать» на него свои

Deleted ()
Ответ на: комментарий от Deleted

нету все под java использует теже maven репозитори 8)

В том-то и прикол Composer, то в этой системе можно использовать любые репозитории. Хоть свои сторонние, хоть центральный. При этом центральный — не хранит сами библиотеки, а является только системой связи отдельных репозиториев участников системы.

А что, MOP или Ivy тоже через Maven работают?

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

Нет, речь именно о тестовом включении _своего_ репозитория с пакетом в центральную систему.

Я ничего не понял, но тебе нужно в билд-скрипте подключать разные репозитории? Допустим, в gradle это выглядит так: http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.h...

aidan ★★★★ ()
Ответ на: комментарий от KRoN73

мавен тоже может юзать любые репозитории, это настраивается как локально для машины (щас так на работе) так и для проекта (не проверял), дефолтно юзается локальный -> центральный, т.е. локальный и кеш и туда сливается все что собирается на машине + ручками

А что, MOP или Ivy тоже через Maven работают?

ivy ужасен, и юзает теже мавеновские репозитории, ибо своих у него формат есть, но самих то репозиториев нет

а шо такое mop я не в курсе 8)

что умеет мавеновские репозитории: http://search.maven.org/#artifactdetails|org.apache.commons|commons-io|1.3.2|jar -там под «Dependency Information» список конфигов для разлиных систем сборки

Deleted ()
Ответ на: комментарий от Deleted

а шо такое mop я не в курсе 8)

Да, MOP, оказывается, тоже через Maven работает :-/

что умеет мавеновские репозитории

Пока вижу, что Maven умеет очень, очень многое. Но всё не то, что мне нужно :-/

KRoN73 ★★★★★ ()
Ответ на: комментарий от Deleted

то шо тебе по твоему описанию нужно, он умеет, может ты хочешь не то что описываешь?

Я так понимаю, мне весьма много не хватает. Вот простой кусок работы разработчика с Composer. Для примера беру не что-то из крупных проектов, а из своих тестов.

Вот я сделал рыбу своего проекта. Хочу всю разработку разруливать централизованно, через Composer.

1. Добавляю в репозиторий простенький composer.json (который самим же Composer в значительно степени может быть сформирован). Помещаю репозиторий на GitHub. На packagist.org добавляю его в систему Composer, всё, он доступен для пользователей.

2. Для теста разворачиваю проект с нуля:

composer create-project balancer/b2-framework

В принципе, если проект законченный, его уже можно сразу запускать:

php ./run.php

3. Но нас интересует разработка и подразумевается, что это — рыба.

Нужно начать использовать, например, шаблонизатор Smarty. Я добавляю строчку («require: {«smarty/smarty»}») в composer.json своего проекта и делаю update. Делаю коммит в репозиторий. Если буду ставить в другой раз или кто-то сделает composer update в копиях — изменение тут же будет получено.

Дополнительный бонус — Composer берёт на себя все вопросы автозагрузки классов, никакой возни с include и т.п.

Всё равно как-то не так описал…

KRoN73 ★★★★★ ()
Ответ на: комментарий от Deleted

Кстати, не нахожу. А maven вообще умеет установить выбранный проект в локальный подкаталог, чтобы сразу начать работать с ним? Да ещё без привязки к конкретному юзеру (т.е. системные библиотеки в этом каталоге, а не в ~ юзера)?

Что-то типа такого (установить и сразу запустить):

$ mkdir laravel-test
$ cd laravel-test
$ composer create-project laravel/laravel
$ laravel/artisan serve

Как это в Maven делать? Можно пример какого-нибудь проекта, который можно так установить и тут же проверить?

KRoN73 ★★★★★ ()
Последнее исправление: KRoN73 (всего исправлений: 2 )
Ответ на: комментарий от KRoN73

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

AlexM ★★★★★ ()
Ответ на: комментарий от KRoN73

ну, примерно так и выглядит работа с MVN. Вы описываете в pom.xml зависимости Вашего проекта, mvn берёт на себя их скачивание (если их ещё нет в «общесистемном» репозитории), и, э-э-э, вот...

AlexM ★★★★★ ()
Ответ на: комментарий от KRoN73

Строго говоря Maven работает только с ~/.m2/repository. Но если там нету нужно артефакта, то он автоматически качает его с центрального или любого стороннего репозитория.

Любой проект в котором ты напишешь mvn install попадет в ~/.m2/repository. Для этого не нужно ничего ни на какой сервер заливать.

vertexua ★★★★★ ()
Ответ на: комментарий от KRoN73

В Maven не принято работать с системными папками, так как в этом нет никакой необходимости. Те ужасы что ты видел в другиях ЯП, аля PHP, Python, Ruby - установка библиотеки в системные каталоги с последующей поломкой системы в Java мире - моветон.

vertexua ★★★★★ ()
Ответ на: комментарий от KRoN73

ну, «системные библиотеки» будут в $M2_REPO.

Касательно вытаскивания и разворачивания при помощи maven сорцов проекта из некоего репозитория, взгляните на mvn scm:checkout и scm:bootstrap

AlexM ★★★★★ ()
Ответ на: комментарий от vertexua

В Maven не принято работать с системными папками

Мне не нужны системные каталоги. Пусть он просто поставит всё в подкаталоги. Ну какая привязка к ~ при разворачивании готового решения?

Те ужасы что ты видел в другиях — установка библиотеки в системные каталоги

Речь, как раз, о локальном использовании. А использование фиксированного каталога в $USER — такой же моветон и ужас, как и использование системного.

KRoN73 ★★★★★ ()
Ответ на: комментарий от vertexua

Если б Вы знали, как нервирует идея руками указывать полный classpath тех, кто привык к сладкому ;)

вообще, я вполне осознаю, что в основе лежит maven'овский постулат о «воспроизводимости билда», из которого напрямую вытекает необходимость окружения, полностью независимого от «системных» библиотек. Но иногда, говорю, хочется сладкого.

AlexM ★★★★★ ()
Ответ на: комментарий от AlexM

Зачем когда либо указывать полный classpath?

Я указываю артефакт и все сферически в вакууме работает. (Сферически, хоть я и точно знаю как конечно)

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 1 )
Ответ на: комментарий от AlexM

ну, «системные библиотеки» будут в $M2_REPO

То есть без строгой фиксации переменных окружения — никак?

Касательно вытаскивания и разворачивания при помощи maven сорцов проекта

Сорцы не обязательны. Интересует хотя бы вариант разворачивания инсталляции готового приложения. Как в примере MOP? Maven? Ivy? Интересует пакетный менеджер под Java. (комментарий)

Скачал, запустил. Ладно, чёрт с ним, пусть даже с привязкой к юзеру (хотя это и ужасно). Как такое сделать? Можно аналогичный пример?

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

Дайте для примера такие же две команды (или одну) для Maven, на примере какого-нибудт приложения. Ну, не знаю, от балды, что-то а ля «maven install play-framework && play»

KRoN73 ★★★★★ ()
Ответ на: комментарий от AlexM

Если б Вы знали, как нервирует идея руками указывать полный classpath тех, кто привык к сладкому ;)

Меня это все последние 16 лет нервирует, как первый раз с Java познакомился :D

KRoN73 ★★★★★ ()
Ответ на: комментарий от vertexua

Например, при запуске java -jar <...>

По-другому, без явного -cp <...> не работает ;)

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

И нет, это не «ужас-ужас». Говорю ж, мне даже начало нравиться. Но я знаю, что существуют и альтернативные решения в виде pkgconfig-скриптов и прочих PYTHONPATH.

AlexM ★★★★★ ()
Ответ на: комментарий от KRoN73

Дайте для примера такие же две команды (или одну) для Maven, на примере какого-нибудт приложения.

Возможно, Вы этого хотите: http://stackoverflow.com/questions/2818402/maven-svn-checkout-example ?

AlexM ★★★★★ ()
Последнее исправление: AlexM (всего исправлений: 1 )
Ответ на: комментарий от KRoN73

То есть без строгой фиксации переменных окружения — никак?

Это наша Родина, сынок!

Но, в целом, решение вполне рабочее, и гораздо более универсальное, чем $CLASSPATH :)

AlexM ★★★★★ ()
Ответ на: комментарий от AlexM

Обычно все запускают или с IDE или с Maven, как тесты, так и приложение. А jar собирают с ссылками на зависимости которые выкладывают в папку, например lib, с помощью dependency plugin

vertexua ★★★★★ ()
Ответ на: комментарий от vertexua

Ну, можно даже не со «ссылками на зависимости», а целиком, jar-with-dependencies, через maven-assembly-plugin (goal: attached). Но периодически хочется странного.

AlexM ★★★★★ ()
Ответ на: комментарий от KRoN73

То есть без строгой фиксации переменных окружения — никак?

Эээ, что не так. Оно не один пакет туда положит. Это место для всех пакетов, акуратно разложеных по подпапках с версиями. Это аналог /usr/lib что-ли, вместо /otp/myapp.

Интересует хотя бы вариант разворачивания инсталляции готового приложения

Maven собирает war, который потом деплоят на продакшн в какой-то Tomcat в котором свои настройки и подключения к СУБД. Мавен в основном сам серваки запускает и тесты для девелопмента.

Ладно, чёрт с ним, пусть даже с привязкой к юзеру (хотя это и ужасно)

Еще раз говорю, это ваш девелопмент репозиторий. Деплоить вы будете например вкладыванием уже готового war в папку webapps томката напиример, который вы ставите обычным sudo apt-get install. Точнее делает это админ, который настроит его специфично, а вам даже пароль от продакшн базы не скажет

vertexua ★★★★★ ()
Ответ на: комментарий от KRoN73

Ээ нагенерить директорий и файлов для веб приложения:

http://maven.apache.org/guides/mini/guide-webapp.html

если же скачать готовое и собрать\запустить то выкачивать сорцы надо вручную да (хотя в этом стреде давали какето сылки) а там

cd projectname mvn install или mvn deploy (могу ошибкаться ибо из консоли набирал жто один раз)

Deleted ()
Ответ на: комментарий от AlexM

Возможно, Вы этого хотите

Э... Вижу много слов, но не вижу строчки — примера для разворачивания работающего приложения :-/

KRoN73 ★★★★★ ()
Ответ на: комментарий от Deleted

Опять не то.

В общем, получается какой-то разговор слепого с глухими :) Ладно, проехали. Я уже смирился, что под Java аналога Composer нет. Придётся по-старинке, всё самому. Ну и с Maven там, где он будет полезен.

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

Омг, да никто так не делает. В Java десятки библиотек для каждого маленького компонентика, ормов и прочего и никто не клепает всякие хелло-ворлды чтобы быстро их завести. Добавляют в pom то что надо, делают парочку файлов и тд. Но пишут pom сами. Считайте это традицией, как у нас в Украине сало едят

Есть спец проекты со скаффолдингом, тот же Spring Roo, JBoss Forge или Play 2 Console для Java, но почти никто ними не пользуется, просто потому что так не принято в силу тех или инных причин.

Если кратко, то в Maven есть плагины доступные с центрального репозитория для чего только пожелает больная фантазия, но все сами пишут pom файлы. Да ускоряя написание с помощью IDE, но инструменты в стиле «нагенерить мне проект» воспринимаются со скептизицмом.

Если сильно нужно, то погуглите maven webapp quickstart archetype. Он сделает вебапп и нагенерит pom. Но в него не включают сервер просто потому что у всех он свой, их десятки, и в него задеплоить можно просто дописав (скопипастив, нагуглив) нужный плагин именно для этого сервера. Ну или как нормальный человек, из IDE, которая автоматически распарсит Maven проект как признаный стандарт, соберет и задеплоит правильный war со всеми зависимостями

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 2 )
Ответ на: комментарий от vertexua

Омг, да никто так не делает. В Java десятки библиотек для каждого маленького компонентика

Да пусть сколько угодно. Мне приложение надо развернуть. Конечно, со всеми зависимостями.

Добавляют в pom то что надо

Зачем мне что-то делать вручную, когда автор приложения уже должен был об этом позаботиться?

Если сильно нужно, то погуглите maven webapp quickstart archetype. Он сделает вебапп и нагенерит pom.

Я сейчас прошу задачу не создания скелета для моего приложения, а задачу разворачивания готового приложения.

KRoN73 ★★★★★ ()
Ответ на: комментарий от vertexua

Сделайте сами себе архетайп и генерте потом проекты одной командой и запускайте сразу со скачаным сервером - второй

vertexua ★★★★★ ()
Ответ на: комментарий от vertexua

Но пишут pom сами.

Не обязательно :) Есть всякие генерилки типа такой http://www.jaxio.com/documentation/celerio/bootstrap.html или такой http://tobacco.noroutine.me/

Но, честно говоря, я пока не понимаю scope задачи: получить себе работающий helloworld в выбранном окружении? Получить само окружение, без helloworld'а? Продеплоить результат в выбранное окружение?

AlexM ★★★★★ ()
Ответ на: комментарий от KRoN73

Я сейчас прошу задачу не создания скелета для моего приложения, а задачу разворачивания готового приложения.

Ок, вы не ясно выразились.

mvn clean package -DskipTests

sudo apt-get install tomcat7

sudo /etc/init.d/tomcat7 start

sudo cp ./target/hereGoesAppName.war /var/lib/tomcat7/webapps/

firefox http://localhost:8080/hereGoesAppName/

Если что не так, разруливайте, но идею вы поняли

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 1 )
Ответ на: комментарий от KRoN73

1. Свободного общего репозитория в maven точно нет. Можно завести свой домен, на нем поднять сервер с репозиторием, и туда выкладывать артефакты. Есть даже пример с использованием scp вместо нексуса: http://steveswinsburg.wordpress.com/2009/12/09/setting-up-your-own-maven-repo...

В принципе, если этот сервер прописать в settings.xml, то можно креативить свои архетипы, в которых уже будет скелет системы. Правда, архетипы тоже не в два клика описываются, увы и ах.

2. Насчет шаблонов, которые можно забирать прямо с гитхаба. Есть скаловская штуковина giter8: https://github.com/n8han/giter8 . Здесь уж забор из репозитория идет в один клик:

g8 n8han/giter8

(из официальной доки)

А потом, если скелет умеет запускаться, то скомандовать что-то вроде mvn exec:java <нужные параметры>

Но g8 - это скала. А скала - это наркоманский sbt, тормоза со всех сторон и, зачастую, полная эзотерика. Есть ли аналог на чистой Java - не знаю.

3. Почему бы просто простой проект не закатать в обычный svn/hg/git? Все равно они должны водиться на девелоперской машине. А привязанности к путям обычно и нет совсем, конфиг должен быть переносимым.

anonymous ()
Ответ на: комментарий от KRoN73

еслибы мусье читал документацию то знал, что то что там указано в ответе можно передать мавену одной строкой через параметры команды

Deleted ()
Ответ на: комментарий от KRoN73

Хм, и это вы писали о глухих.

Я описал абсолютно непосредственно

разворачивания готового приложения

Если вам религия не позволяет копировать war файл, что делают так или иначе все, то вот как заставить это сделать Maven

http://www.mkyong.com/maven/how-to-deploy-maven-based-war-file-to-tomcat/

Оно по HTTP зальет приложение в томкат. Будете писать в итоге только mvn tomcat7:deploy

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 2 )
Ответ на: комментарий от Deleted

еслибы мусье читал документацию то знал, что то что там указано в ответе можно передать мавену одной строкой через параметры команды

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

Вот если выполнить пример из двух (mkdir&&cd не обязательны), что я приводил выше, то будет запущено приложение.

Приведите мне пример таких же команд maven. Вот чтобы я ввёл их и получил бы запущенное приложение.

И без установки tomcat :) Я же не о конкретном war спрашиваю. И выше же только что мне самому говорили, что лезть в систему — моветон.

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

а задачу разворачивания готового приложения.

Что такое «готовое приложение»? Какие у него составляющие, и откуда они берутся?

Готовое приложение в терминах [java-] веб-девелопмента - это war, который может быть задеплойен в требуемый servlet-контейнер. Выше уже давали ссылку на мэйвеновскую доку.

Неготовое приложение - это, например, некоторый набор сорцов (Ваших), которые нужно получить из определённого SCM-репозитория. Опять же, пример есть выше.

Другой вариант «неготового приложения» - это некоторый хелловорлд, генерируемый для выбранного окружения. Тоже, опять же, ссылка была.

Естественно, Вы не пишете pom'ки для томката или ещё какого веб-фрэймворка, Вы просто указываете их в зависимостях в pom'ке _своего_ приложения, и maven заботится о том, чтобы их артефакты были скачаны в процессе сборки/деплоймента.

AlexM ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.