LINUX.ORG.RU

Spring application cli

 


0

1

Хочется иметь возможность обращаться к приложению из консоли. Что-то типа cli-api.

В инете есть инфа про spring-shell, только он как-то не производит впечатления.

Можно было бы сделать через rabbitmq, у него есть cli утилиты. Только вот думаю, стоит ли для такой не масштабной задачи его использовать. Может есть что-то проще, может средствами linux.

В идеале только linux утилиты и bash.

На Java CLI лучше не делать. Консольные проги запускаются часто, в т.ч. в режиме --help, а Java стартует медленно. Увы и ах, но это так. Единственное приличное CLI, что я видел, — это javac, ant и maven. Все остальное (gradle, sbt, JBoss Forge) запускается и работает по полчаса, ругаться хочется.

В gradle есть режим --daemon, когда основа постоянно запущена, а с консолью общение идет через сравнительно легкую обертку, которая так или иначе дергает сервер. Прилично, но памяти на это уходит просто уйма, тоже не радует.

Спринг, опять же, легковесностью давно не отличается, тормоза обязательно будут, вряд ли spring-shell в этом плане оптимизирован.

Минус еще крупнее — Java кроссплатформенна, а терминалы — совершенно нет. В современных прогах есть переводы курсора (например, прогресс-бар обновлять, а не печатать проценты на новой строке), раскраска (монотонный вывод мало кого радует), да что там, в библиотеке curses куча хаков и полезняшек. Хороших библиотек под это дело на яве нет, ибо некроссплатформенно. А плохих тоже нет, насколько помню. Gradle и sbt как-то красят вывод, но в общем рекомендуется использовать внешние тулзы, тот же python rainbow.

У тебя же приложение и так сервер? Тогда общение с ним можно организовать через http из любого языка; я бы посоветовал python; для запросов библиотека Requests, с собственно организацией CLI не сталкивался, советовать не буду, но наверняка что-то найдется.

Ход конем — задействовать golang. Изкоробки есть сетевое общение https://golang.org/pkg/net/http/ и разбор командной строки https://golang.org/pkg/flag/ . Полученная прога будет есть мало памяти и очень быстро работать, инфа 100% и без шуток. Для CLI — самое оно. Зависимостей никаких, на выходе один-единственный статический бинарник, в т.ч. и под винду.

anonymous
()
Ответ на: комментарий от anonymous

sbt можно запустить один раз, а потом он даже перекомпиливать сам будет. плюс есть апи, которое дает возможность держать сервер конпеляции поднятым.

тс, когда перейдешь на скалу, возьми Ammonite.

а лучше забей на кли, сделай приватное рест-апи. легче поддерживать и меньше проблем с удаленкой.

cdshines ★★★★★
()
Последнее исправление: cdshines (всего исправлений: 1)
Ответ на: комментарий от cdshines

Мне консоль больше нравится. Тут искал что-то для хотя бы промотра баз данных. Одних плагинов к eclipse штук 10 посмотрел. Еще просто приложения, которые в интете рекомендуют. А в результате, или не вменяемое, или глючит, или выглядит плохо. Сел, написал простой скрипт на groovy, он мне все показывает: метаданные, содержимое таблиц.

barberry ★★
() автор топика

Думаю, решить так.

В linux:

Для сервера использовать java.net.ServerSocket и удобную библиотеку для парсинга входных строк. В качестве клиента использовать bash скрипт и netcat. Вроде как получается легенько и быстренько. Минимум зависимостей.

В Windows:

Хоть у меня его и нет нигде. Там наверное тоже можно netcat запустить в cygwin.

Еще в bash completion научиться и будет торт.

barberry ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.