Проклятие Джавы распространяется не только на десктопные UI, но и на билд-системы.
Ant, кажется, был ничего? Эдакий make, только писать надо на XML (времена были тяжелые, XML казался хорошей идеей). Ну я не пользовался особо, но видел.
Где-то начиная с Maven что-то пошло не так. В Maven впервые в полную силу была реализована идея «ты что-то пишешь, а потом оно где-то в совсем другой момент используется». Типа, твои действия привязываются к stages, но stages ты явно не вызываешь, они вызываются неявно, когда ты вызываешь команды, причем пачками. То есть тебе нужно не просто куда-то свой плагин вставить, но и убедиться, что он не вставился туда, куда не нужно. Короче, сложно, я за 15 лет так и не разобрался.
Лучше всего абсурдность Maven подчеркивает Lein, система сборки для Clojure. Lein сел на ту же инфраструктуру, что и Maven, буквально: в те же репозитории ходит, те же jar-ки использует. Но при этом Lein это самая простая, логичная, лаконичная, удобная система сборки из вообще всего, что я когда-либо видел (как и многое в Clojure, впрочем). То есть понимаете, да? Делает то же самое, использует те же вводные, но делает это НОРМАЛЬНО. А джависты — ну, джависты это джависты.
Так вот. На Maven мысль, к сожалению, не остановилась. XML начал потихоньку умирать (спека на 125 ТЫСЯЧ букв, кто ж такое вытерпит?), чем заменили бы его здравомыслящие люди? Ну, JSON-ом, наверное? YAML в худшем случае. Ну это здравомыслящие. А джависты взяли Groovy, язык, нигде вообще не использовавшийся в принципе. Потому что могут.
Так появился Gradle. Groovy, конечно, шаг вперед по сравнению с XML все равно. Но вот чего не учли создатели: на Groovy стало очень удобно программировать билд. На Maven программировать тоже можно было, но гораздо неудобнее: надо плагин создавать, компилять его как-то, выкладывать куда-то публично, и только потом использовать.
А вот на Груви можно писать прям в билд-файле. И это катастрофа. Потому что любят Джава-программисты больше всего? Правильно, писать абстрактный код. И вот это катастрофа. Билды превращаются в свою отдельную систему, с функциями, классами, взаимными импортами, умолчаниями, абстракциями, архитектурой. Архитектурой, блин! В билд-файле! Хуже того, она и построена еще вся на умолчаниях: ты что-то куда-то добавляешь, а потом оно где-то совсем в другом месте, никак не связанном с первым, тебе аукнется. Как это понять? А никак, надо знать заранее.
Я уж не говорю про всякие мелочи, типа того, что Gradle сам себя скачивает, отдельно в каждый проект. То есть у начинающего Джава программиста в среднем в системе стоит пять-десять копий Gradle одновременно.
Или, например, у Gradle три конфига вместо одного. Почему три? Да фиг его знает. Но запомнить где что я тоже так и не смог. Просто щелкаю их все по очереди, пока не найду то что надо.
Котлинисты, кстати, знаете как решили эту проблему для себя? Никак, лол. Заменили Groovy на Kotlin, оставив все остальные проблемы ровно на том же месте, где они изначально лежали.
А теперь я расскажу вам о той самой идеальной билд системе, которая порешала все недостатки Maven и Gradle и сделала жизнь джавистов и котлинистов счастливой. Вот она:
Post #135
8.94K
- 💯 1