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, разными репозиториями и прочим таким.
Плюс еще несколько десятков версий на каждую зависимость, которые нужно внятно выбрать при добавлении. Слава богу, они хоть не конфликтовали у меня пока.
Вот у нас есть на данный момент что: 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, разными репозиториями и прочим таким.
Плюс еще несколько десятков версий на каждую зависимость, которые нужно внятно выбрать при добавлении. Слава богу, они хоть не конфликтовали у меня пока.
no subject
- по дефолту все ресурсы не исходники лежат у мавена в отдельной папке src/main/resources, но у большей части проектов в реальном мире в конфиге maven-resource-plugin прописано, что ресурсы могут лежать и вместе с исходниками тоже. Причем обычно это прописано в каком-нибудь родительском поме. Поначалу меня обескураживало, почему в одном проекте работает, а в другом - нет.
- classpath конечно один, но даже в самом простом случае, их на самом деле два - для компиляции и для запуска. Если использовать системы сборки, то этих classpath-ов оказывается гораздо больше - test, compile, runtime, container - и у IDE представления о том,что куда входит и сколько их всего может не совпадать с системой сборки (подозреваю, что на этом месте люди начинают обратно любить ant, где конкретно эти нюансы как правило прописываются явно руками).
- логирование (сколько боли в одном этом слове)
- вы забыли запуск из IDE собранного там же war VS запуск из IDE собранного проекта но не запакованного в war (exploded в терминах Idea) VS запуск непосредственно проекта (не знаю, есть ли это в Idea - в Eclipse это есть в нескольких вариантах разными плагинами)
На самом деле за это Java-экосистему и любим, что какого-то одного пути обязательного для всех не навязывается.
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
no subject
https://github.com/csoma/Scala-starter
starting sbt project from the scratch
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
Но сборка этого war и особенно копирование зависимостей для него для меня темный лес.
Эм. maven как раз был придуман для того чтобы оно само. Прописываем зависимости, указываем в target war далее mvn package получаем на выходе готовый war.
Я обычно начинаю с того, что запускаю jetty внутри своего приложения, передавая ему хендлер явно, т.к. таким образом для меня проще понять, что в каком порядке работает и откуда берется конфигурация. Но даже в этом случае количество вариаций на тему "запустить жабу с указанием classpath и main class" просто поражает.
Откройте для себя уже web servlet spec. Реально проще жить станет. Там одна точка входа WEB-INF/web.xml
(no subject)
no subject