Учимся делать могучий код по видео-уроку. Автор спокойно и размеренно объясняет все моменты, все работает и вообще кругом благолепие и красота. Что может пойти не так?
Что может пойти не так?Как показывает практика, что угодно. Это только в теории "сношать Жабу" просто и приятно (да еще и моя любимая IDE с ней дружит куда плотнее, чем с пыхом). На практике же ты ее сперва поймай, потом выясни, не ядовитая ли она, защиту себе оборудуй - строго совместимую, не абы что! - да и вообще, почитай какие-нибудь материалы, выходящие за рамки прекраснодушных статеек с JavaRush или "Java in a nutshell". Ибо опыт ошибок трудных гласит, что сам язык, конструкции, ООП и прочие паттерны - это так, понятная механика. С которой работать легко и приятно. А вот окружение - это уже совсем другой компот. И ладно еще привычный мне пых - там-то все просто (нужную версию поставь, библиотеки установи, сервак ака-Nginx/Apache установи, хосты настрой, мускуль нужной версии подними, композер оборудуй, ну и с фронтом тоже что-то подобное). Оно если не работает, то не работает обычно сразу (если, конечно, речь не о каких-то специфических библиотеках или сторонних пакетах). А вот жаба - это, конечно, да.
Нет, поначалу оно действительно легко и непринужденно. "Hello, home" работает? Прекрасно. Предварительная компиляция проходит? Вообще замечательно. Ошибки нужные отражает в консоли? Очаровательно. Какая прелесть. А вот потом начинаются приключения. У меня, в частности, они начались на моменте "получить данные из директории с сырцами". Что может пойти не так? Ну, максимум, директорию не туда воткнул и путь к ней не тот прописал. Да? Так ведь? Аааааага. Если бы речь шла, опять же, о привычном мне пыхе, то там действительно, откуда хочешь - оттуда и грузи, только за адресом и доступами проследи. А вот жаба тут отличилась. Ей, понимаете ли, мало того, что нужно строго в определенное место эти сырцы пихать (причем сугубо индивидуально для каждой IDE, мы ведь не из баша компилируемся), так еще и крайне желательно адрес этой директории в тематической xml-ке прописать. Про xml, положим, я догадывался, хотя полагал, что это больше для андройд-разработки актуально. Наивно расчитывал, что это должно уходить на откуп IDE. Аааааага(2). Нет, оно действительно когда-то так и было (во всяком случае, в Stackoverflow скриншотики про 8 версию это наглядно демонстрируют), но у меня-то 12.5, и в ней эта никому не нужная мелочь почему-то выпилена. Ладно, допустим, эту проблемы мы знаем... Или не знаем? А откуда нам ее знать, если сообщение об ошибке выглядит ни разу не как "ой, а у вас тут Гуф умер и файлик нужный в директории с исходниками не найден", а вполне себе как "пакет с названием 'никому-не-известный-набор-символов-v.3.0' упал с ошибкой, ты вообще чего творишь? а ну быстро проверься мавеном!". Мавен - это такая специфичная для жабы наркота, что-то вроде помеси сборщика с пакетным менеджером (я еще не разобрался толком, это еще надо будет). Причем не основной и единственный (то ли дело пых, с его одним единственным composer-ом! ну еще с PECL-ом и PEAR-ом, но это же совсем другой расклад!..), а есть еще Gradle, Ant и хз что. Причем информацию по ним нужно еще курить, поелику сакральный их смысл мне пока не ясен. Что-то устарело, что-то вообще для другого сделано, что-то применяется в тандеме... Брррр, ребята, я всего лишь хотел запустить простое приложение на пару десятков строк кода! Вот когда подумаешь о прелести стандартизированного C#. Хотя, подозреваю, при запуске через Mono там те же пляски с бубном получаются примерно. Ладно, пренебречь, вальсируем. Скачиваю мавен (консольный, естессно, т.к. встроенный в IDE умеет только считать меня идиотом). Натравливаю его на код. И вполне закономерно получаю полное недоумение - мол, а что это вообще такое? И почему у вас оно все не так? И литерал тут не але? Ну, э. Гоню прочь ассоциацию про "Шла Саша по шоссе а тут Камаз". Медитирую. Прихожу к выводу, что жаба-то у меня не та! В смысле, встроенная в интегрированную среду разработки жаба - это одна (ага, та, которую я скармливал этой самой среде), а вот система у меня потребляет совсем другую, которая мало того, что не Oracle, а Open, так еще и v11, а не v17. В то время как настроечный pom.xml гласит, что версия должна быть именно... ээээ, что? Почему 11? А как она тогда вообще в IDE запускается? Мгм. Ладно, меняю. Что ж, работать от этого оно не начало, зато хотя бы сменило тип ошибки, уже прогресс. Что дальше? Ага, а дальше я выясняю, что сырцы-то обрабатывать пытаюсь, но при этом нужного плагина для них в комплектации почему-то не имею (на кой для этого нужен плагин - вопрос дискуссионнный, особенно при провозглашаемой политике "все есть подключаемый пакет"). Дальше Maven мне ненароком заметил, что неплохо бы еще парочку таких же штук ему бы в xml бы добить бы. Чешу затылок, иду смотреть на синтаксис и нужные версии (обязательный аргумент, привет от composer.json). Нашел, а также с некоторым недоумением обнаружил, что IDE - умничка и лапочка (хоть в чем-то) и версии мне подставляет автоматикой. Прелесть. Запускаю. Не работает. А, ну да, нужно ж jdk нужный поставить. Как культурный человек иду на оф сайт оракла, скачиваю там deb-пакет, ставлю. sudo update-alternatives --config java ! И что мне в ответ молвит чудо-юдо? А молвит оно, что, мол, обманули тебя басурмане проприетарные, и не желаешь ли ты принять баньку да сплясать с бубном вокруг котла ради такого случая? Вздыхаю, в очередной раз пренебрегаю и вальсирую. Ставлю OpenJdk v17. Не люблю их, сложный софт с ними капризно очень работал... мгм, 9 лет назад. Благо, он хотя бы в центральном репозитории есть, да и результат выполнения предыдущей команды вроде как намекает на то, что оно так хотя бы в теории работает. Фух, ладно, работает и на практике тоже. Настраиваю, скармливаю... И вуаля, осчастливленный мавен велеречиво рассыпается в комплементах. Это приятно, только компиляция так и не заработала. Равно как и не заработала сборка в нетбинсе. На всякий случаю перезагружаю ему pom.xml. Не катит. Пару раз меняю его в незначительных нюансах. Неа. Запускаю maven. Все нормально, но все еще не работает. Задумываюсь, что раньше в таких случаях было принято фигачить кулаком по монитору. Не наш вариант - современная техника от такого в чувство вовсе не склонна приходить. Пляшу с бубном.
В общем, в итоге оно заработало. Я так и не понял, что стало последней каплей, но оно теперь запускается. Да, в некоторых местах выглядит как франкенштейн с торчащими из самых неожиданных мест проводками, но хотя бы работает. Смотрю на время. Видео-урок длится полчаса, а с этой проблемой возился два часа. Подумал насчет опечалиться зрящно потраченным временем, но удержало осознание того, что лет эдак n-цать назад на это ушло бы куда больше ресурса. Выдыхаю, досматриваю урок и закрываю ноут. Хватит пока что.
@музыка:
Modern Jovi
@темы:
Программирование,
Восторг,
Остапа понесло