Бродяга для проекта Java: следует ли компилировать в виртуальной машине или на хосте?



вот вопрос: при использовании Vagrant для проекта Java (или любого скомпилированного языкового проекта, если на то пошло), следует ли компилировать в виртуальной машине или на хосте? Кроме того, вы хотите, чтобы ваша IDE и все ваши инструменты разработки запускались также из виртуальной машины или на хосте?



кажется, не очень хорошо определено, как именно Java IDE и процесс компиляции / развертывания работают с бродячей виртуальной машиной. Как правило, мое впечатление заключается в том, что код редактируется на хосте и запускается на виртуальной машине, что отлично подходит для некомпилированных языков. Другие ответы на Stackoverflow подразумевают, что Vagrant менее полезен для скомпилированных языков из-за дополнительного шага компиляции, но я все еще хочу посмотреть, что можно сделать.



некоторые вещи я уже продумал:



зачем компилировать на виртуальной машине




  • если компиляция на хосте, java-это еще одна часть программного обеспечения для установки

  • при компиляции на хосте версия java на хосте должна поддерживаться вручную в курсе, что на ВМ

  • соответствующая версия java на хосте может быть недоступна (скажем, на Mac)


Почему IDE на виртуальной машине




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

  • можно подключить отладчик для Java-приложений без удаленной отладки (один шаг запуска/отладки)


зачем компилировать на хосте




  • быстрее компилировать раз

  • хотите, чтобы виртуальная машина была как можно ближе к тому, как выглядит производство


Почему IDE на хосте




  • это соглашение vagrant для редактирования кода на хосте и запуска его на виртуальной машине

  • лучшая производительность пользовательского интерфейса (X переадресация и VNC медленно)


каковы ваши мысли: должен ли я запускать свою IDE изнутри виртуальной машины или хоста? Должен ли я компилировать из виртуальной машины или хоста?

439   2  

2 ответов:

после долгих размышлений и экспериментов я решил, где использовать Vagrant и как он интегрируется с рабочим процессом разработки Java.

для JavaEE / развернутых приложений настройка веб-сервера и сервера базы данных-это определенно вещи, которые имеют "достаточную" сложность, чтобы гарантировать использование Vagrant. С двумя серверами и множеством способов их настройки, это легко для конфигурации, чтобы выйти из синхронизации от одного разработчика к другому, в результате чего " работает на моем синдром "машины". Для такого рода программного обеспечения лучше всего было бы отредактировать и скомпилировать код на хосте и развернуть его на бродячей виртуальной машине, которая имитирует вашу производственную среду. Папка развертывания для веб-сервера может быть даже символически связана с целью компиляции на хосте, что устраняет необходимость повторного развертывания вручную. Таким образом, Vagrant может быть важной частью вашего жизненного цикла разработки, но время цикла для кода/компиляции/развертывания с хоста и запуска на виртуальной машине с Java будет больше, чем цикл время для кода на хосте и запуска на виртуальной машине, которую мы видим с PHP / Ruby/Node / etc.

для автономных приложений Java (таких как библиотеки или настольные приложения) история немного меняется. В этом случае имеет смысл редактировать, компилировать и запускать на главной машине, избегая использования Vagrant вообще. Если вы используете одну из больших Java IDE (Eclipse, Netbeans, IntelliJ...), у вас уже установлена Java на машине. В этот момент есть очень мало преимуществ по сравнению к накладным расходам использования Vagrant, и только служит для того, чтобы поставить дополнительный уровень сложности в процессе разработки. Это связано с тем, что к тому времени, когда вы сможете редактировать Java с помощью IDE, вы все равно сможете запускать все на хосте. Одна из проблем заключается в том, что версия Java, необходимая для проекта, может не соответствовать версии, в которой работает IDE на хосте. В общем (надеюсь) это не слишком большая проблема; на момент написания этой статьи JDK6 является окончанием жизни, а JDK8 еще не выпущен (угадайте, где это оставить нас.) Но если вам нужно запустить несколько версий, вы должны иметь возможность установить JAVA_HOME на хосте по мере необходимости. Хотя это создает дополнительную сложность, это менее сложно, чем поддерживать бродячую среду выполнения только для работы с проектами, использующими разные версии Java.

интересный вопрос заключается в том, что делать с бесконтейнерными веб-приложениями. Должен ли веб-сервер (в данном случае внутренний для приложения) запускаться внутри виртуальной машины, как это было сделано для внешнего веб-сервера? Или запустить на хосте, как мы сделали для автономного приложения? Для бесконтейнерных веб-приложений нет внешнего веб-сервера, о котором можно было бы беспокоиться, но, скорее всего, есть база данных. В этой ситуации мы можем использовать гибридный подход. Запуск бесконтейнерного веб-приложения по существу совпадает с запуском автономного приложения, поэтому было бы эффективно скомпилировать и запустить код на главной машине. Но с задействованной базой данных там все еще достаточно сложности и конфигурации, чтобы она имеет смысл, чтобы сервер базы данных был на своей собственной бродячей виртуальной машине.

надеюсь, это дает Java-разработчикам, которые заинтересованы в Vagrant, некоторый контекст о том, как его использовать.

Я интересовался этой темой в течение последнего года:)

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

чтобы столкнуться с медлительностью рабочего стола, вы должны установить очень полезный плагин vagrant (да... бродяга имеет плагины, которые значительно улучшить среду разработки) таким образом: Vagrant plugin install vagrant-vbguest Этот плагин установит virtual box guest addition на каждого гостя, чтобы сделать его пригодным для использования при использовании интерфейса virtualbox. Затем, чтобы включить графический интерфейс, отредактируйте Vagrantfile следующим образом:

config.виртуальная память.провайдер "virtualbox" do |vb| ВБ.графический интерфейс = истина конец

вместо того, чтобы ускорить работу общей папки, я предлагаю использовать rsync: конфиг.виртуальная память.synced_folder"./Тэи", "/домашний/бродяга/ГИТ", типа: "синхронизировать", синхронизировать__исключить: ".мерзавец/" Таким образом, исходный код редактируется на хосте, а затем rsync-ed для гостя.

Comments

    Ничего не найдено.