Как стать автором
Обновить

Комментарии 13

Просто запускать нужную джаву по полному пути или по нужному симлинку слишком просто?

Запустить по полному пути несложно. И даже подменять каждый раз JAVA_HOME и дюжину симлинков не то, чтобы сложно, но изрядно геморройно. А подменять надо, поскольку вы ведь не хотите лезть в кишки того же gradle, чтобы полменить пути там внутри. Ну, вот эта утиль, собственно, и подменяет то, что нужно. Впрочем, довольно хреново - мне так и не удалось нё запинать. jenv пишет, что переключилась на одну версию, а java -v показазывает другую... :(

Наверно в самом кровавом энтерпрайзе это еще и нужно. Но где энтерпрайз и где Homebrew. А обычный современный софт давно уже ничего не требует. java -jar service.jar -big_config.yaml и поехали.

В энтерпрайзе это не нужно. А вот при разработке в том числе для энтерпрайза версии менять приходится. И кроме вашего java -jar в каталоге JAVA_HOME/bin есть ещё дюжина бинарников, а ещё рантайм, экстёрнал либы, сертификаты. И всё это для разных окружений разное и их тоже надо подменять даже в вашем простейшем хелловорде. И ещё раз внимательнее - я говорил для примера про грэдл. Где у него java -jar service.jar -big_config.yaml ?

И ещё раз внимательнее - я говорил для примера про грэдл

Очень давно не использовал, но первая ссылка Гугла говорит что одной строкой в конфиге все делается.

есть ещё дюжина бинарников, а ещё рантайм, экстёрнал либы, сертификаты

Вот это и используется в кровавых энтерпрайзах. Современная разработка перешла на более простые варианты.

Очень давно не использовал, но первая ссылка Гугла говорит что одной строкой в конфиге все делается.

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

Вот это и используется в кровавых энтерпрайзах. Современная разработка перешла на более простые варианты.

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

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

Профили давно везде есть. Шаблоны и переменные давно поддерживаются во всех конфигах. Все уже решено. Меняется по кнопке. Если вы что-то делаете даже в двух местах, то пора посмотреть подумать и исправить это. Точно есть какое-то стандартное решение.

Вы можете продемонстрировать что именно более простое используется в "современной разработке", чем явский рантайм, явский компилятор, установленный набор сертификатов и набор библиотек?

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

Джава хороша своей огромной экосистемой. Все проблемы о которых вы даже не задумывались решены. И не просто решены, а есть типовое решение. Проверенное всем миром. Никто давно ничего в 10 местах не меняет. Даже в одном менять не стоит. Все делается просто по кнопке.

Профили давно везде есть. Шаблоны и переменные давно поддерживаются во всех конфигах. Все уже решено

То есть всёртаки не надо менять вручную строчки в конфиге? Ну, надо же! А вы говорили, что запросто меняете каждый раз...

Если вы что-то делаете даже в двух местах, то пора посмотреть подумать и исправить это. Точно есть какое-то стандартное решение.

Серьёзно? А как же строчка в конфиге? Но я вам даже больше скажу - одно из этих решений называется jenv. Внезапно.

Ну да. Компилятор вызывается из системы сборки,

В которой надо строчку в конфиге поменять, как вы сами сказали.

рантайм работает сам просто кого вызовешь

Неа. Вы бы хоть попробовали :)...

Сертификаты из стандартного хранилища подхватываются сами

Вы же их не используете, они же неудобные. И, нет, это работает иначе.

Ну вот отсюда вызвал, оно из того же jdk и подхватилось

Niet :)

Сторонние библиотеки приезжают в сборку какие укажешь в системе сборки.

Это же та которой надо строку в конфиге поменять? Или не надо?

Никто давно ничего в 10 местах не меняет. Даже в одном менять не стоит

Зачем же вы сказали, что надо поменять в конфиге?

Все делается просто по кнопке.

(Сходил за попкорном) ну, так назовите уже эту кнопку! "Имя, сестра, имя" (ц)

Все делается просто по кнопке.

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

Тут ниже уже написали про sdkman. С ним вообще можно один раз у проект настроить.

~ ❯ mkdir sdkman-test && cd sdkman-test
sdkman-test ❯ mkdir j8 && cd j8 && sdk env init && echo java=8.0.372-librca > .sdkmanrc && cd ..
.sdkmanrc created.
sdkman-test ❯ mkdir j17 && cd j17 && sdk env init && echo java=17.0.7-librca > .sdkmanrc && cd ..
.sdkmanrc created.
sdkman-test ❯ mkdir j21 && cd j21 && sdk env init && echo java=21-librca > .sdkmanrc && cd ..    
.sdkmanrc created.
sdkman-test ❯ cd j8 && sdk env && java -version && cd ..

Using java version 8.0.372-librca in this shell.
openjdk version "1.8.0_372"
OpenJDK Runtime Environment (build 1.8.0_372-b07)
OpenJDK 64-Bit Server VM (build 25.372-b07, mixed mode)
sdkman-test ❯ cd j17 && sdk env && java -version && cd ..

Using java version 17.0.7-librca in this shell.
openjdk version "17.0.7" 2023-04-18 LTS
OpenJDK Runtime Environment (build 17.0.7+7-LTS)
OpenJDK 64-Bit Server VM (build 17.0.7+7-LTS, mixed mode, sharing)
sdkman-test ❯ cd j21 && sdk env && java -version && cd ..

Using java version 21-librca in this shell.
openjdk version "21" 2023-09-19 LTS
OpenJDK Runtime Environment (build 21+37-LTS)
OpenJDK 64-Bit Server VM (build 21+37-LTS, mixed mode, sharing)

А самое главное, что sdkman не ограничивается только jdk.

Добрый день, у jenv есть хорошая альтернатива - SDKman - https://sdkman.io. Он по запросу выкачивает и устанавливает как JDK, так и такие инструменты как maven, gradle. Так же можно в разных каталогах использовать разные JVM.

Не холивара ради а только для разнообразия.

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий