Бродяга для проекта Java: следует ли компилировать в виртуальной машине или на хосте?
вот вопрос: при использовании Vagrant для проекта Java (или любого скомпилированного языкового проекта, если на то пошло), следует ли компилировать в виртуальной машине или на хосте? Кроме того, вы хотите, чтобы ваша IDE и все ваши инструменты разработки запускались также из виртуальной машины или на хосте?
кажется, не очень хорошо определено, как именно Java IDE и процесс компиляции / развертывания работают с бродячей виртуальной машиной. Как правило, мое впечатление заключается в том, что код редактируется на хосте и запускается на виртуальной машине, что отлично подходит для некомпилированных языков. Другие ответы на Stackoverflow подразумевают, что Vagrant менее полезен для скомпилированных языков из-за дополнительного шага компиляции, но я все еще хочу посмотреть, что можно сделать.
некоторые вещи я уже продумал:
зачем компилировать на виртуальной машине
- если компиляция на хосте, java-это еще одна часть программного обеспечения для установки
- при компиляции на хосте версия java на хосте должна поддерживаться вручную в курсе, что на ВМ
- соответствующая версия java на хосте может быть недоступна (скажем, на Mac)
Почему IDE на виртуальной машине
- более тесная интеграция между средой и IDE, можно использовать ярлыки для запуска приложения
- можно подключить отладчик для Java-приложений без удаленной отладки (один шаг запуска/отладки)
зачем компилировать на хосте
- быстрее компилировать раз
- хотите, чтобы виртуальная машина была как можно ближе к тому, как выглядит производство
Почему IDE на хосте
- это соглашение vagrant для редактирования кода на хосте и запуска его на виртуальной машине
- лучшая производительность пользовательского интерфейса (X переадресация и VNC медленно)
каковы ваши мысли: должен ли я запускать свою IDE изнутри виртуальной машины или хоста? Должен ли я компилировать из виртуальной машины или хоста?
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