Vagrant dla projektu Java: należy skompilować w maszynie wirtualnej lub na hoście?

Oto pytanie: podczas korzystania z Vagrant dla projektu Java (lub jakiegokolwiek skompilowanego projektu językowego), należy skompilować w maszynie wirtualnej lub na hoście? Czy chciałbyś, aby Twoje IDE i wszystkie narzędzia programistyczne były uruchamiane również z wnętrza maszyny Wirtualnej lub na hoście?

Wygląda na to, że nie jest zbyt dobrze zdefiniowane jak dokładnie Java IDE i proces kompilacji/wdrażania działają z VM Vagrant. Generalnie mam wrażenie, że kod jest edytowany na hoście i uruchamiany na maszynie wirtualnej, który świetnie sprawdza się w przypadku języków nie skompilowanych. Inne odpowiedzi na Stackoverflow sugerują, że Vagrant jest mniej przydatny dla skompilowanych języków ze względu na dodatkowy krok kompilacji, ale nadal chcę zobaczyć, co można zrobić.

Pewne rzeczy już przemyślałem:

Dlaczego kompilować na maszynie wirtualnej

    W przypadku kompilacji na hoście java jest jeszcze jednym oprogramowaniem do zainstalowania.]}
  • W przypadku kompilacji na hoście, wersja java na hoście musi być ręcznie aktualizowana z że na VM
  • Nie jest to jednak możliwe, ponieważ nie jest to możliwe.]}

Dlaczego IDE na VM

  • ściślejsza integracja pomiędzy środowiskiem i IDE, może używać skrótów do uruchamiania aplikacji
  • Pozwala na podłączenie debuggera do aplikacji java Bez zdalnego debugowania (one step run/debug) [14]}

Dlaczego kompilować na serwerze

  • szybszy czas kompilacji
  • chcesz utrzymać maszynę wirtualną jak najbliżej tego, co produkcja wygląda jak to możliwe

Dlaczego mam IDE na Hostie

  • jest to konwencja vagrant, aby edytować kod na komputerze i uruchomić go na maszynie wirtualnej
  • Dzięki temu, że VNC i X-forwarding są wolne, nie trzeba się martwić.]}

Jakie są Twoje myśli: czy powinienem uruchomić moje IDE z wnętrza maszyny wirtualnej czy hosta? Czy powinienem kompilować z wnętrza maszyny Wirtualnej lub hosta?

Author: Community, 2013-07-13

2 answers

Po wielu przemyśleniach i eksperymentach zdecydowałem się, gdzie użyć Vagrant i jak integruje się on z przepływem pracy programistycznej Javy.

W przypadku aplikacji JavaEE / wdrożonych konfiguracja serwera WWW i serwera bazy danych to zdecydowanie rzeczy, które mają" wystarczającą " złożoność, aby uzasadnić użycie Vagrant. Dzięki dwóm serwerom i niezliczonym sposobom ich konfiguracji konfiguracja jest łatwa do zsynchronizowania z jednym programistą do drugiego, co powoduje, że "działa na moim komputerze" syndrom. W przypadku tego rodzaju oprogramowania najlepiej byłoby edytować i kompilować kod na hoście oraz wdrażać do vm Vagrant, która naśladuje środowisko produkcyjne. Folder wdrażania dla serwera www może być nawet symlinkowany do celu kompilacji na hoście, co eliminuje konieczność ręcznego przesunięcia. Tak więc Vagrant może być ważną częścią cyklu rozwoju, ale czas cyklu dla kodu/kompilacji/wdrożenia z hosta i uruchomienia na maszynie wirtualnej z Javą byłby dłuższy niż czas cyklu dla kod na hoście i uruchom na maszynie wirtualnej, którą widzimy z PHP / Ruby/Node / etc.

W przypadku samodzielnych aplikacji Java (takich jak biblioteki lub aplikacje desktopowe) historia nieco się zmienia. W tym przypadku najbardziej sensowne jest edytowanie, kompilowanie i uruchamianie na komputerze hosta, całkowicie rezygnując z używania Vagrant. Jeśli używasz jednego z dużych IDE Javy (Eclipse, Netbeans, IntelliJ...), masz już zainstalowaną Javę na komputerze. W tym momencie jest bardzo mała przewaga w porównaniu do narzut korzystania z Vagrant, i tylko służy umieścić dodatkową warstwę złożoności w procesie rozwoju. Dzieje się tak, ponieważ do czasu, gdy będziesz w stanie edytować Javę za pomocą IDE, będziesz w stanie uruchomić wszystko na hoście i tak. Jednym z problemów jest to, że wersja Java wymagana dla projektu może nie pasować do wersji z IDE na hoście. Ogólnie (mam nadzieję) nie jest to zbyt duży problem; w momencie pisania tego jdk6 jest już wycofany, a JDK8 nie jest jeszcze wydany (Zgadnij, gdzie to zostaje nas). Ale jeśli musisz uruchomić wiele wersji, powinieneś być w stanie ustawić JAVA_HOME na hoście w razie potrzeby. Chociaż wprowadza to dodatkową złożoność, jest ona mniej skomplikowana niż utrzymywanie środowiska wykonawczego Vagrant tylko do pracy z projektami wykorzystującymi różne wersje Javy.

Ciekawe pytanie brzmi, co zrobić z aplikacjami internetowymi bez kontenerów. Czy web serwer (w tym przypadku wewnętrzny do aplikacji) powinien być uruchomiony wewnątrz maszyny wirtualnej, tak jak to zrobiliśmy dla zewnętrznego web serwera? Lub uruchomić na host tak jak zrobiliśmy dla samodzielnej aplikacji? W przypadku aplikacji internetowych bez kontenerów nie ma zewnętrznego serwera www, o który można się martwić, ale nadal prawdopodobnie istnieje baza danych. W tej sytuacji możemy przyjąć podejście hybrydowe. Uruchamianie aplikacji internetowej bez kontenerów jest zasadniczo takie samo jak uruchamianie samodzielnej aplikacji, więc skuteczne byłoby skompilowanie i uruchomienie kodu na komputerze hosta. Ale przy zaangażowanej bazie danych jest jeszcze wystarczająco dużo złożoności i konfiguracji, że ma sens niech serwer bazy danych będzie na własnej Vagrant VM.

Miejmy nadzieję, że to da programistom Javy, którzy są zainteresowani Vagrantem, jakiś kontekst na temat tego, jak z niego korzystać.

 58
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-05 12:56:56

Zainteresowałem się tym tematem przez ostatni rok:)

Moim rozwiązaniem jest mieć maszynę vagrant konfigurowalną z flagami. Na przykład jedna z tej flagi włącz graficzny interfejs graficzny pulpitu, ponieważ niektórzy programiści wolą kodować na komputerze hosta, podczas gdy inni wolą mieć znacznie bardziej zintegrowane środowisko z pulpitem i IDE w nim.

Aby zmierzyć się z wolnością pulpitu powinieneś zainstalować bardzo przydatną wtyczkę vagrant (tak... vagrant ma pluginy, które znacznie poprawiają środowisko programistyczne) w ten sposób: Vagrant plugin install Vagrant-vbguest Ta wtyczka zainstaluje dodatek virtual box guest na każdym gościu, aby był użyteczny podczas korzystania z interfejsu virtualbox. Następnie aby włączyć gui Edytuj plik Vagrantfile w ten sposób:

Config.vm.dostawca "virtualbox" do |vb| vb.gui = true , end

Zamiast przyspieszyć działanie folderu udostępnionego proponuję użyć rsync: config.vm.synced_folder "./git", "/ home / vagrant/git", Typ: "rsync", rsync_ _ exclude:".git/" W ten sposób kod źródłowy jest edytowany na serwerze, a następnie rsync-ed do gościa.

 3
Author: Saverio Ferrara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-08 09:21:23