Size: a a a

Чат подкаста «Разбор Полётов»

2020 July 13

NC

Nikolay Chernov in Чат подкаста «Разбор Полётов»
источник

AE

Alexandr Emelyanov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Нет, не так. В джаве захотел ты подрубить Хибернейт. Зашел на мавен централ или на ДжейБоссовский репозиторий - а там миллион пакетов, в которых одни и те же классы запаблишены. Причем набор классов в разных джарах разный, потому что люди бандлят несколько зависимостей вместе и паблишат это рядом. И в зависимости от того, какой у тебя application server, через какой апи ты хочешь с хибером работать, что у тебя помимо хибера используется, тебе подойдет какой-то конкретный вариант джарника.

Ок, удобно, клево! О нас заботятся. Ага, щаз! На деле обновляешь ты какую-то левую зависимость, а она решила, что в новой версии джарника она теперь будет бандлить еще какие-то классы, которые раньше не бандлила. И внезапно в твоем правильно собраном супчике зависимостей у тебя дублировние классов, которого раньше не было. И ты опять лезешь подбирать джарочки, пока билд не начнет работать.

Поэтому обновлять зависимости в JVM-мире никто не любит. Люди копипастят свои sbt/gradle/maven скрипты со старыми зависимостями, тк знают что эта комбинация работает. Или пишут всякие “генераторы проектов” (jHipster помнишь?) чтобы те за них делали эту работу.

Что сделал npm, и что потом подхватил Rust, Deno, и наверняка еще кто-то - это разделил пространство резолюций зависимостей, так что иметь разные версии транзитивных зависимостей стало возможно.

В npm и cargo я регулярно бампаю версии, тк знаю, что мне ничего не грозит - код мой продолжит работать. В cargo есть момент с зависимостями на C/C++ библиотеки - там dll-hell продолжает присутствовать. Но в живом проекте их единицы.

И да, есть миллион шуток про размер node_modules, но лучше иметь 300 мегов зависимостей, чем плавить мозг jar-hell-ом
это какие либы себе бандлят другие? это же дико редко, да и зачем их использовать? никто не заставляет. а что бы не было конфликтов версий (или было минимально) давно придумали bom
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Alexandr Emelyanov
это какие либы себе бандлят другие? это же дико редко, да и зачем их использовать? никто не заставляет. а что бы не было конфликтов версий (или было минимально) давно придумали bom
Зайди на search.maven.org и вбей fc:javax.persistence.Entity

мне выдает 1000+ результатов

И это что мне на ум пришло, хоть я на JVM уже лет 8 ничего не пишу. В реальных проектов такого перепакованного говна - вагон и маленькая тележка.
источник

DP

Denis Pavlyuchenko in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Зайди на search.maven.org и вбей fc:javax.persistence.Entity

мне выдает 1000+ результатов

И это что мне на ум пришло, хоть я на JVM уже лет 8 ничего не пишу. В реальных проектов такого перепакованного говна - вагон и маленькая тележка.
хочется небольшой комментарий дать. Кажется, все таки в реальных проектах обычно спринг бут (если говорить про “среднеем значение по больницы”), в котором нет такой проблемы
источник

AE

Alexandr Emelyanov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Зайди на search.maven.org и вбей fc:javax.persistence.Entity

мне выдает 1000+ результатов

И это что мне на ум пришло, хоть я на JVM уже лет 8 ничего не пишу. В реальных проектов такого перепакованного говна - вагон и маленькая тележка.
В чем проблема использовать офф артефакты?
источник

AE

Alexandr Emelyanov in Чат подкаста «Разбор Полётов»
Как обычно, проблема высосана из пальца
источник

NC

Nikolay Chernov in Чат подкаста «Разбор Полётов»
Да вроде бы человек очертил реальный сценарий, в котором заимел Попоболь
источник

AE

Alexandr Emelyanov in Чат подкаста «Разбор Полётов»
Последний раз конфликты версий в стабильных версиях библиотек разгребал 4-5 лет назад
источник

A

Artjom Kalita in Чат подкаста «Разбор Полётов»
Alexandr Emelyanov
Как обычно, проблема высосана из пальца
+1, это что-то из серии зашел в гугел набрал джава там 1000+ результатов джава говно
источник

AE

Alexandr Emelyanov in Чат подкаста «Разбор Полётов»
Nikolay Chernov
Да вроде бы человек очертил реальный сценарий, в котором заимел Попоболь
Ну тут как говорится "как какой изврат хочет, тот такой и делает"
источник

NC

Nikolay Chernov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
По опыту уровень боли от обновления:

Java - Python - Ruby - Rust - JavaScript

Слева самое болезненное, справа наименее болезненное
А Луашечка в этой цепочке на какую позицию встанет? Просто интересно.
источник

AE

Alexandr Emelyanov in Чат подкаста «Разбор Полётов»
Если правильно помню, то года полтора назад, вроде, разгребал конфликты зависимостей в npm, причем такого ада в Java я не видел никогда
источник

YM

Yurii Melnychuk in Чат подкаста «Разбор Полётов»
На текущем проекте пока не ввели package-lock.json, несколько раз огребли проблем с тем, что транзитивные зависимости втихую обновлялись и мы ловили какие-то баги от этого. Может, конечно,  package-lock.json это стандарт и нормальные проекты должны его иметь всегда, но без него было проблем больше чем с Java
Ну и все версии в package.json теперь пишем без ^/~
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Nikolay Chernov
А Луашечка в этой цепочке на какую позицию встанет? Просто интересно.
На луа я писал только под FreeSwitch, и там кроме как его апи, ничего не использовалоась. Поэтому ХЗ
источник

ВВ

Виктор Вербицкий... in Чат подкаста «Разбор Полётов»
Alexandr Emelyanov
Последний раз конфликты версий в стабильных версиях библиотек разгребал 4-5 лет назад
а мне вот прямо сейчас предстоит...
источник

ВВ

Виктор Вербицкий... in Чат подкаста «Разбор Полётов»
Обновилась либа и начался ад: https://github.com/javister/javister-docker-base/pull/48
источник

ВВ

Виктор Вербицкий... in Чат подкаста «Разбор Полётов»
Причём ад у них прямо внутри либы... :(
источник

A

Artjom Kalita in Чат подкаста «Разбор Полётов»
а в чем адд то ? на самом деле уже не помню когда геморройно было обновлять вещи - может потому-что я на спринговой инфраструктуре живу и там все кучеряво правильно сделано...
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Yurii Melnychuk
На текущем проекте пока не ввели package-lock.json, несколько раз огребли проблем с тем, что транзитивные зависимости втихую обновлялись и мы ловили какие-то баги от этого. Может, конечно,  package-lock.json это стандарт и нормальные проекты должны его иметь всегда, но без него было проблем больше чем с Java
Ну и все версии в package.json теперь пишем без ^/~
package-lock - норма. До него были yarn-lock, npm shrinkwrap.

Знаю, есть долбанутые компании, которые package-lock не коммитят, тк в их другом языке лок-файла нет. Обычно этим джава и питон-люди страдают.
источник

A

Artjom Kalita in Чат подкаста «Разбор Полётов»
сейчас же в гредле есть депенденси лок
источник