Комментарии 12
Классная статья. И из нее следует, что разработчики Spring не думают о разработчиках плагинов)
промахнулся с ответом, написал в общий тред) продублирую тут ссылкой: https://habr.com/ru/companies/explyt/articles/854304/comments/#comment_27542688
Спасибо, вы сделали правильный вывод!
Если разработчики Spring добавили бы один метод, который срабатывал после завершения построения bean definitions, в интерфейс SpringApplicationRunListener о котором я упомянул в статье, то было бы сильно проще.
И тут кстати можно продолжать аналогии с билд системами, в том же Maven есть AbstractEventSpy, где в onEvent в нетипизированном виде приходят все необходимые события о этапах сборки. Который я и использовал в своем плагине GMaven, чтобы получить данные о проектной модели. А Spring (Spring Boot в частности) можно назвать по сути такой же "билд-системой". Только которая работает на уровень выше и отвечает за "сборку" приложения в момент старта. У нее также есть конфигурационные файлы, которые необходимо прочитать перед запуском, и на основании всех конфигов построить конечное приложение. И действительно, было бы не плохо, иметь там больше точек интеграции с внешним миром и это практически напрашивается... У них уже есть определнные тулзы для разработчиков, но они для этой задачи мне не подошли, я их изначально рассматривал.
И поэтому еще кстати, эта идея так легко легла на External System API ИДЕИ, которое было задумано как общее флоу для билд систем, на ней основываются такие плагины как Gradle, SBT - Scala, мой альтернативный мавен плагин GMaven. Что уже в процессе разработки я понял, что эти аналогии не лишены оснований. Если изначально, я использовал External System API с целью быстрее выкатить прототип, то по итогу я даже сам удивился, как легко и непринужденно эта идея легла на текущее API ИДЕИ для билд систем, что весь процесс разработки занял буквально несколько дней и у меня не возникло в процессе никаких затыков. Это был как раз тот случай, когда несколько недель изучаешь и думаешь как сделать, и потом за пару дней кодинга, получаешь готовое решение.
Интересно, неужели никто не запрашивал у них эту доработку за все время?
Я не нашел. Хотя пытался, когда реализовывал данный функционал. Может быть плохо искал...
Возможно стоит завести им issue на этот счет.
У них есть плагины для билд систем https://docs.spring.io/spring-boot/build-tool-plugin/index.html
Как мне видится это должно быть реализованно именно там. Т.к. приложение надо изначально собрать. А далее выполнить определнный таск, который распечатает мета-информацию о текущем контексте приложения. Например как это сделано в мавен для анализа зависимостей: maven dependency:tree
И так можно реализовать IDE независмое решение для поддержки спринг в любой среде разработки. В целом это можно сделать и сейчас, используя ихние готовы плагины Maven/Gradle для сборки и запуска, добавать нашу библиотеку в classpath и поменять точку запуска, но это как вы правильно заметили, требует больших телодвижений.
Мне кажется стоит завести issue. Заодно можно узнать - думают ли они в этом направлении
Завел issue - https://github.com/spring-projects/spring-boot/issues/43208
Поставили статус - "for: team-meeting" Видимо ничего готового для этих целей нет.
Совсем не понял зачем плагин.... Каких возможностей в community версии нет, которые решает это?
Не играй в догонялки со Spring — Explyt Spring plugin для IDEA Community