LINUX.ORG.RU

Java IDE удаленная компиляция/отладка

 , ,


2

2

В NetBeans (C++) когда то встречал дико удобную фичу: собирать/запускать/отлаживать код на удаленной машине. То есть пишешь код локально, а при сборке IDE перекидывает сырцы на удаленный узел, там собирает и запускает, либо запускает отладку бинаря.

Какие Java IDE такое умеют?

Deleted

Ответ на: комментарий от Deleted

Прямо из коробки Java/C++ remote build+run - никак. Хотя может для Нетбинса что-то такое есть, но я в нем не шарю

Как делаю это я: на Ansible пишу соответствующий скрипт, запускаю из Идеи сразу перед подключением удаленной отладкой

Если ты не знаешь как сделать через Ansible, то можно вручную сделать так:

- В меню Tools->Deployment настраиваешь автоматическую синхронизацию твоего проекта по SSH/SFTP с удаленным сервером (где собираешься запускать). На удаленном сервере автоматически оказывается копия исходников и синхронизируется мгновенно как ты в файле что-нибудь изменишь.

- Добавляешь новый Run/Build Configuration, точно так же как и всегда, только тип выбираешь не Java Application, а Remote Debug

- В поле «before launch» (это список в самом низу окна) добавляешь через плюсик новый элемент типа «Run Remote External Tool»

- В опциях указываешь тот же самый сервак, который ты уже настроил в Tools->Deployment. Поле «программа» указываешь «mvn clean install -DskipTests», или что ты там хочешь запускать

- На удаленном серваке, конечно, нужно поставить джаву и мавен

- Добавляешь еще один пункт таким же образом - запуск твоей приложухи, в свойствах запуска обязательно надо активировать удаленную отладку

- Понятно что между твоим компом и удаленным сервером долдна быть сетевая связность, настроеный фаервол, запущенный SSH

Ну и да, туда же в список действий закинь killall java (pkill -9 java может быть?), прога же должна перезапускаться между запусками подключения

Вроде всё, работы на полчаса

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

То есть докер не только под деплой на удаленной машине, но и под удаленную сборку катит?

Deleted
()

Любая IDE умеет, это базовый функционал.

Legioner ★★★★★
()
Ответ на: комментарий от Deleted

Да под что хочешь катит. Даже под сборку на локальной, но в докере)

Сейчас уже многие разрабатывают на локальном так, что весь софт запускается в докере. В докере же тестируется и в докере и собирается. Ясен пень, что и вынести докер на внешнюю машину тоже можно, но это слегка увеличит время сборки и т.п.

В IDEA без проблем можно собирать и не в докере, но по ssh на удаленном, правда, мне не понравилось, довольно медленно вся эта канитель работает, по сравнению с локальной разработкой.

menangen ★★★★★
()
Ответ на: комментарий от iZEN

Дженкинс - это тот кусок быдлокода, который требует полного перезапуска при обновлении любого плагина? Тот самый, который при включении всех плагинов из репозитория запускается 10 часов? Который со старта жрет оперативки как вся операционная система, даже если плагинов нет вообще?

Тот самый, в котором нельзя экспортить и импортить джобы без рутового аккаунта (или рута дженкинса, или самого сервера). Где админам запрещают из-за этого пользоваться графическим интерфейсом, и они фигачат все в Pipeline Plugin? Текстом, во встроенном в браузере текстовом поле вместо хотя бы JS редактора? На грувях, официциальная документация к API которых не совпадает с действительностью?

Боже, как можно в 2017 году в суе употреблять имя этого куска быдлокодерского говна? Место дженкинсу одно - на свалке истории

Придумали Ansible, Chef, Puppet, Saltstack. Мгновенный старт. Нормальный headless режим, включая без агента в Ansible. Нормальный расход RAM. Не зависит по RAM/CPU от количества плагинов - хоть миллиард. Нормальная документация на API и возможность писать в полноценной IDE, включая отладку плагинов.

Как говорили в Зеленом Слонике: дали людям звездочки Ansible, носи, носи звездочки! Не хотят носить, хотят жрать говно. И это офицеры Программисты?

stevejobs ★★★★☆
()
Ответ на: комментарий от iZEN

Самое смешное, что даже для задачи ТСа Дженкинс не подходит. Для того чтобы дернуть из IDE запуск и удаленную отладку с предварительным билдом и копированием с помощью Дженкинса, ему придется раскурить для этого не только наркоманский интерфейс и засрать им 300+ метров оперативной памяти и 5% процессора. Ему еще придется поприседать в попытках из NetBeans/Eclipse/Idea дернуть API дженкинса.

Господи, как же я не люблю Jenkins, словами не передать.

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

А если в Jenkins не пользоваться всеми плагинами из репозитория, которые якобы тормозят весь такой процесс удалённой отладки, то это сильно помешает простой сборке и тестированию приложения?

iZEN ★★★★★
()
Ответ на: комментарий от stevejobs

зачем тут вообще дженкинс

«собирать/запускать/отлаживать код на удаленной машине»

если то же самое делает сам Maven

Как? Покажи.

iZEN ★★★★★
()
Ответ на: комментарий от stevejobs

Ему еще придется поприседать в попытках из NetBeans/Eclipse/Idea дернуть API дженкинса.

По опыту из IDEA? Всё ясно с тобой.

iZEN ★★★★★
()

Какие Java IDE такое умеют?

Eclipse и NetBeans с помощью Hudson/Jenkins. Из коробки. По щелчку мышкой.

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

Работа дженкинса тут - выкачать из репозитория, сделать killall java, собрать через maven, дать команду на запуск.

Синхронизация файлов между серверами по SSH/RSync работает почти мгновенно.

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

(кроме пароля на ssh или открытого ключа, который у тебя и так в ~/.ssh/config прописан если ты не мазохист)

Просто когда ты прекратил писать и подождал секунду-другую - оно уже улетело на удаленный сервер.

Если пишешь на PHP - этого уже достаточно. Можно настроить LiveReload и видеть, как содержимое странички в браузере меняется одновременно с тем, как ты пишешь в текством файле, даже не нажимая ctrl+S.

Комбинация клиент: git-commit, git-push, jenkins: git-clone - работает миллион лет, она никогда не сможет соревноваться с тупым копированием файлов по ssh/rsync.

Плюс в такой комбинации тотально засрется коммит лог гита временными коммитами (ты же не будешь коммитить вручную? ты будешь git add . && git commit -a -m «temp commit»). И потом когда тебе таки захочется сделать полноценный коммит, придется применить особую гит магию для партиал сквошинга по тексту комментария «temp commit» - офигеть какая радость!

Если пишешь на джаве а не на PHP - придется еше добавить две вещи: подключаться удаленной отладкой (мы же не похапэшники, работать без отладчика) и мавеном запускать удаленную сборку. Дженкинс в этом опять же никак не помогает - удаленная отладка это ide+java agent, сборка мавеном делается одинаково из чего угодно

Кстати, если удаленная отладка запущена сквозь JRebel, то в каком-нибудь JSP или Thymeleaf можно сделать прямо как в примере с PHP. Только кнопку таки придется давить, JRebel тормозной и со временем начинает течь, если делать live reload каждые 200мс на это быстро наткнешься

stevejobs ★★★★☆
()
Ответ на: комментарий от iZEN

«собирать/запускать/отлаживать код на удаленной машине»

Как? Покажи.

файлы с кодом проекта уже автоматически положила тебе IDE на нужный сервер. Дело за малым, на этом сервере нужно запустить что-то вроде (строчки написал из головы, не проверял, могут быть опечатки):

cd /build/git/myapp
killall java
pkill -9 java
mvn clean install -T8 -DskipTests
nohup java --add-opens java.base/java.lang=ALL-UNNAMED -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar ./target/myapp.jar >myapp.out 2>&1

Зачем тут какой-то дженкинс?

Если сильно хочется запустить на миллионе серверов, то сохраняешь эти строчки в файл, и дальше

apt-get install ansible

myapp.yml:

---
- name: Transfer and execute a script.
  hosts: servers
  tasks:
     - name: Transfer the script
       copy: src=build-and-run-myapp.sh dest=/home/izen mode=0777

     - name: Execute the script
       command: sh /home/izen/build-and-run-myapp.sh
ansible-playbook myapp.yml

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

в чем смысл тащить дженкинс ради трех строчек в консоли?!

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

в чем смысл тащить дженкинс ради трех строчек в консоли?!

Смысел - в атомарности заданий на построение и запуск.

У тебя на любом этапе вероятна лажа от случайного чиха кодера, рефлекторно задевшего клавишу. А при использовании нормальных коммитов и пушей/пуллов из/в локального репозитория dvcs на сервер сборки исключаются такого рода случайности. Не, ну если вам с Git такое делать тяжело и лениво, как ты тут описал, и вынужденно используется rsync, то с более прозрачной и простой в этом отношении dvcs Mercurial это не вызывает каких-либо затруднений. Тем более, что HG интегрирован в Netbeans настолько, что программист не замечает его работы и в любой момент может перейти на нужную версию проекта.

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

Тоже не вижу смысла тащить дженкинс. Может быть соберусь поставить и настроить докер, как посоветовал menangen. Или напишу скрипт на before launch, как посоветовал stevejobs.

Проблема в том, что я ковыряюсь с GWT+GXT (до сих пор). Проект большой (50kloc), собирается долго. На работе ещё время ожидания прилично (тут i7 4770), а по удаленке локально на ноутбуке собирать замаешься (атом вместо процессора, сборка при изменении пары строчек верстки одной из форм занимает около 12 минут). Вот и хочу заюзать мощности рабочего компа при сборке, а для редактора использовать локальную идею на ноуте (по VNC - мыло, по x2go - искажение цветов подсветки синтаксиса в редакторе идеи), ибо для редактора мощностей ноутбука хватает с лихвой, а запускаешь сборку - ноут можно даже не пытаться использовать - нагрузка процессора 100%, даже скролл в браузере лагает.

А ради правки верстки использовать dvcs считаю overkill'ом. В коммитах должно быть уже нечто осмысленное, когда что-то заработало и можно закрепить результат.

Всем спасибо.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 3)
Ответ на: комментарий от Deleted

А ради правки верстки использовать dvcs считаю overkill'ом. В коммитах должно быть уже нечто осмысленное, когда что-то заработало и можно закрепить результат.

Согласен. Но тебе же надо целиком пересобирать проект после правки нескольких строчек, нет?

Тогда нужно разбить проект на модули и работать с каждым модулем по отдельности. Так можно будет отлаживать мелкие правки локально, а для пересборки всего проекта делать осмысленный коммит на сервер и собирать там.

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

У нас архитектура пока что далека от модульности. А времени, чтобы разбить это все по уму - пока нет.

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