metaclass: (дзедline)
metaclass ([personal profile] metaclass) wrote2013-03-06 03:37 pm
Entry tags:

Java-экосистема

Разбираюсь потиху с Intellij IDEA и скалой. И, как обычно, утыкаюсь в "расхождения по земельному вопросу" с жабными инструментами. Сколько раз это все дело открывал - столько утыкался.

Вот у нас есть на данный момент что: jdk (много разных), мавен(две версии), sbt(аналог мавена для скалы), IDEA и тыщи плагинов под мавен, sbt и идею.
Я прочел документацию по мавену и sbt, но от входа все равно не понимаю, как принято создавать проекты с нуля и как принято их деплоить. Открываешь какой-нибудь пример, а там все заканчивается строкой вида sbt container:start, которая работает исключительно внутри запущенного sbt и с помощью плагина типа "com.github.siasia" %% "xsbt-web-plugin. Или мавен с jetty-плагином.

Предположительно, можно поставить jetty сервисом и деплоить туда приложение в виде war. Но сборка этого war и особенно копирование зависимостей для него для меня темный лес.
Я обычно начинаю с того, что запускаю jetty внутри своего приложения, передавая ему хендлер явно, т.к. таким образом для меня проще понять, что в каком порядке работает и откуда берется конфигурация. Но даже в этом случае количество вариаций на тему "запустить жабу с указанием classpath и main class" просто поражает.
Т.е. запуск из мавена, запуск из sbt, запуск из idea, деплоймент в контейнер и запуск из консоли руками и запуск в виде jar - это все совершенно между собой различающиеся варианты, с разными classpath, разными репозиториями и прочим таким.

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

[identity profile] evil-invader.livejournal.com 2013-03-06 01:51 pm (UTC)(link)
Просто томкат для экслипса и идеи легко настраивается. В эклипсе немного попахивает шаманизмом, но вот идея слёту конфигурится.
Для работы и тестирования веб-приложения (не важно скала или джава) проще использовать томкат. Jetty это уже, если нужно запускать прилагу, как стенделон, но со своим веб-сервером.
Для простых случаев в jdk вообще есть свой миниатюрный веб-сервер, который подымается в две строчки.

[identity profile] metaclass.livejournal.com 2013-03-06 01:59 pm (UTC)(link)
Вот я в основном и запускаю приложение сам, с встроенным веб-сервером.

[identity profile] evil-invader.livejournal.com 2013-03-06 02:15 pm (UTC)(link)
А веб-сервер для чего? Чтобы организовать общение rest/soap?

[identity profile] jdevelop.livejournal.com 2013-03-06 04:41 pm (UTC)(link)
ребе, если вы уже взяли spray - зачем вам jetty? возьмите spray-can, оно из коробки работает и все на NIO

[identity profile] nealar.livejournal.com 2013-03-06 02:04 pm (UTC)(link)
Вот мне щаз ВНЕЗАПНО потребовалось научиться собирать под томкэт. В идеале, раввинским способом, одной строчкой на шелле. Но идеей или эклипсой тоже покатило бы. Даже не скажу, что для меня будет лучше: знакомые спецы по жабе любят идею, а спецы по ынтырпрайзу - эклипсу. Сам вообще не шарю.

[identity profile] evil-invader.livejournal.com 2013-03-06 02:14 pm (UTC)(link)
Если только собирать, то достаточно, чтобы проект был ant или мавен. Билдишь, а дальше подкладываешь томкату и запускаешь. По идее можно научить ант или мавен сразу подкладывать куда надо. Чисто раввинатский способ - никакой IDE. Только консоль - только хардкор.

[identity profile] nealar.livejournal.com 2013-03-06 04:11 pm (UTC)(link)
Да, собрать WAR, и впарить его котяре. Поскольку билд-сервер и продакшен сервер не обязательно живут вместе (в моих фантазиях вообще первое - линупс, второе - венда), то ант или мавен учить подкладывать файлы необязательно.
Гуглить maven manual или что попроще?

[identity profile] jdevelop.livejournal.com 2013-03-06 04:41 pm (UTC)(link)
непонятно зачем нужен maven для деплоя в томкат

[identity profile] evil-invader.livejournal.com 2013-03-06 05:40 pm (UTC)(link)
для того, чтобы собрать проект

[identity profile] jdevelop.livejournal.com 2013-03-06 05:59 pm (UTC)(link)
так чтобы собрать проект - его надо допиливать под сборку с maven, это ж не просто кнопка "сделать мне заебись билд"

или я не понял вопроса-проблемы?

[identity profile] evil-invader.livejournal.com 2013-03-06 06:06 pm (UTC)(link)
Ну собсно я про это и написал. Просто неизвестно что там за проект. Если изначально сделан как мавен проект - то тогда "сделать мне билд".
Если груда какого-то кода, то проще антом расписать сборку.

[identity profile] jdevelop.livejournal.com 2013-03-06 06:10 pm (UTC)(link)
вот да, непонятно, need moar gold!

[identity profile] nealar.livejournal.com 2013-03-06 07:17 pm (UTC)(link)
Сам ещё не видел, шо там внутре. Пока что, тыкался только как end-user, слово WAR, например, узнал вчера.

[identity profile] jdevelop.livejournal.com 2013-03-07 01:06 am (UTC)(link)
что если попросить помощи у товарищей "в теме"?

(no subject)

[identity profile] jdevelop.livejournal.com - 2013-03-07 06:33 (UTC) - Expand

[identity profile] norguhtar.livejournal.com 2013-03-07 04:19 am (UTC)(link)
maven имеет смысл использовать если у проекта есть зависимости от сторонних библиотек. Тогда нет головной боли с их вытягиванием и подкладыванием. Оно само это делает.

[identity profile] evil-invader.livejournal.com 2013-03-07 06:16 am (UTC)(link)
Слабо себе представляю проект без зависимости от сторонних библиотек. Даже если все библиотеки не сторонние, а свои, то имеет смысл разворачивать локальный репозиторий.

[identity profile] jdevelop.livejournal.com 2013-03-06 09:48 pm (UTC)(link)
а это тут причем?

[identity profile] juan-gandhi.livejournal.com 2013-03-07 01:02 am (UTC)(link)
при мавне и томкате, сэр

[identity profile] jdevelop.livejournal.com 2013-03-07 01:04 am (UTC)(link)
mvn tomcat:run запустит приложение в томкате, но никак не задеплоит его в него

[identity profile] evil-invader.livejournal.com 2013-03-06 04:46 pm (UTC)(link)
Если проект изначально написан с использованием мавена, то тут особо гуглить ничего не надо. Достаточно установить maven и в консоле сделать проекту mvn install (из папки, где лежит pom.xml файл проекта).
Если же в проекте ант, то будет файл build.xml и внутри должен быть target для создания варки. Если нету, то придётся описывать самому (это не сложно) и запускать из консоли что-то вроде ant war (в зависимости от названия таргета).
Если же в проекте ничего такого не используется, то это очень старнно =). Наверное тогда придётся самому build.xml описывать, настраивать. Мавеном тут не поможешь, так как для мавенанужная определённая структура проекта, а ант более универсальный.

[identity profile] nealar.livejournal.com 2013-03-06 07:14 pm (UTC)(link)
запускать из консоли что-то вроде ant war
Да я только за одно это словосочетание этот способ асилю!

[identity profile] norguhtar.livejournal.com 2013-03-07 04:18 am (UTC)(link)
Штатный же функционал maven. Там все довольно очевидно.