Bir Java projesi için Vagrant: VM'de mi yoksa ana bilgisayarda mı derlemelisiniz?


92

Soru şu: Vagrant'ı bir Java projesi için (veya bu konuda derlenmiş herhangi bir dil projesi) kullanırken, sanal makinede mi yoksa ana bilgisayarda mı derlemelisiniz? Ayrıca, IDE'nizin ve tüm geliştirme araçlarınızın da VM'nin içinden veya ana bilgisayardan çalıştırılmasını ister misiniz?

Gibi görünüyor , çok iyi tanımlanmamış tam olarak nasıl bir Java IDE ve Serseri VM ile derleme / dağıtma işlemi çalışır. Genel olarak benim izlenimim, kodun ana bilgisayarda düzenlendiği ve derlenmemiş diller için harika çalışan VM'de çalıştırıldığıdır. Stackoverflow'daki diğer yanıtlar , fazladan derleme adımı nedeniyle Vagrant'ın derlenen diller için daha az kullanışlı olduğunu ima etti, ancak yine de ne yapılabileceğini görmek istiyorum.

Zaten düşündüğüm bazı şeyler:

Neden sanal makinede derlemelisiniz?

  • ana bilgisayarda derleme yapılıyorsa, java yüklenecek bir başka yazılımdır
  • ana bilgisayarda derleme yapılıyorsa, ana bilgisayardaki java sürümü sanal makinedekiyle manuel olarak güncellenmelidir
  • ana bilgisayardaki karşılık gelen java sürümü mevcut olmayabilir (örneğin, bir Mac'te)

Neden sanal makinede IDE var?

  • ortam ve IDE arasında daha sıkı entegrasyon, uygulamayı çalıştırmak için kısayolları kullanabilir
  • uzaktan hata ayıklama olmadan java uygulamaları için hata ayıklayıcıya bağlanabilir (tek adımda çalıştırma / hata ayıklama)

Neden ana bilgisayarda derleme

  • daha hızlı derleme süreleri
  • sanal makineyi üretimin mümkün olduğu kadar yakın tutmak istiyorum

Neden ana bilgisayarda IDE var

  • kodu ana bilgisayarda düzenlemek ve onu sanal makinede çalıştırmak serseri bir kuraldır
  • daha iyi kullanıcı arayüzü performansı (X yönlendirme ve VNC yavaştır)

Düşünceleriniz nelerdir: IDE'mi VM'nin içinden mi yoksa ana bilgisayardan mı çalıştırmalıyım? VM'nin içinden mi yoksa ana bilgisayarın içinden mi derlemeliyim?

Yanıtlar:


61

Çok fazla düşündükten ve denemeden sonra, Vagrant'ı nerede kullanacağıma ve Java geliştirme iş akışıyla nasıl bütünleşeceğine karar verdim.

JavaEE / konuşlandırılmış uygulamalar için, bir web sunucusunu ve bir veritabanı sunucusunu yapılandırmak, kesinlikle Vagrant'ın kullanımını garanti etmek için "yeterli" karmaşıklığa sahip şeylerdir. İki sunucu ve onları yapılandırmanın sayısız yolu ile, yapılandırmanın bir geliştiriciden diğerine senkronizasyondan çıkması ve "makinemde işler" sendromunu ortaya çıkarması kolaydır. Bu tür bir yazılım için, ana bilgisayardaki kodu düzenlemek ve derlemek ve üretim ortamınızı taklit eden bir Vagrant VM'ye dağıtmak en iyisidir. Web sunucusunun dağıtım klasörü, ana bilgisayardaki bir derleme hedefine sembolik olarak bağlanarak manuel olarak yeniden konuşlandırma ihtiyacını ortadan kaldırabilir. Yani Vagrant, geliştirme yaşam döngünüzün önemli bir parçası olabilir,

Bağımsız Java uygulamaları için (kitaplıklar veya masaüstü uygulamaları gibi) hikaye biraz değişir. Bu durumda, Vagrant'ın kullanımından tamamen kaçınarak ana makinede düzenleme, derleme ve çalıştırma en mantıklıdır. Büyük Java IDE'lerinden (Eclipse, Netbeans, IntelliJ ...) birini kullanıyorsanız, makinede zaten Java yüklüdür. Bu noktada, Vagrant kullanmanın ek yüküne kıyasla çok az avantaj vardır ve yalnızca geliştirme sürecinize fazladan bir karmaşıklık katmanı koymaya hizmet eder. Bunun nedeni, Java'yı bir IDE ile düzenleyebildiğinizde, her şeyi ana bilgisayar üzerinde çalıştırabilmenizdir. Bir sorun, proje için gerekli olan Java sürümünün, ana bilgisayarda IDE'yi çalıştıran sürümle eşleşmemesidir. Genel olarak (umarım) bu çok fazla sorun değildir; bu yazı itibariyle JDK6'nın kullanım ömrü sona ermiştir ve JDK8 henüz piyasaya sürülmemiştir (bunun bizi nerede bıraktığını tahmin edin). Ancak birden fazla sürüm çalıştırmanız gerekiyorsa, JAVA_HOME'u ana bilgisayarda gerektiği gibi ayarlayabilmelisiniz. Bu fazladan karmaşıklık getirse de, yalnızca Java'nın farklı sürümlerini kullanan projelerle çalışmak için bir Vagrant çalışma zamanını sürdürmekten daha az karmaşıktır.

İlginç soru, konteynersiz web uygulamalarıyla ne yapılacağıdır. Web sunucusu (bu durumda uygulamanın içinde) harici web sunucusu için yaptığımız gibi VM içinde çalıştırılmalı mı? Veya bağımsız uygulama için yaptığımız gibi ana bilgisayar üzerinde çalıştırılsın mı? Konteynırsız web uygulamaları için endişelenecek harici bir web sunucusu yoktur, ancak muhtemelen bir veritabanı vardır. Bu durumda hibrit bir yaklaşım benimseyebiliriz. Konteynırsız bir web uygulaması çalıştırmak, temelde bağımsız bir uygulama çalıştırmakla aynıdır, bu nedenle kodunuzu ana makinede derlemek ve çalıştırmak etkili olacaktır. Ancak bir veritabanı söz konusu olduğunda, veritabanı sunucusunun kendi Vagrant VM'si üzerinde olması mantıklı olacak kadar hala yeterince karmaşıklık ve yapılandırma vardır.

Umarım bu, Vagrant ile ilgilenen Java geliştiricilerine onu nasıl kullanacakları hakkında bir bağlam verir.


Windows işletim sistemi ana bilgisayarı ve Linux işletim sistemi sanal makinesi için, IntelliJ'i ana bilgisayarda (Windows) X11 aracılığıyla çalıştırarak Linux VM'de çalıştırmaya ilişkin düşünceleriniz nelerdir?
Kevin Meredith

3
Harika soru: Bundan bahsetmedim ama IDE'yi Vagrant VM içinde çalıştırarak birçok test yaptım ve performansın korkunç olduğunu gördüm ... bir menüye tıklamak yaklaşık 12 saniye sürdü. Şu gibi şeyleri denedim: daha hızlı bir şifre belirtin, X11 için sıkıştırma kullanın ve sanal makine video RAM'ini artırın, yalnızca yanıt süresini 4 saniyeye çıkarmak için bu hala kullanılamaz. Yani düşüncelerim, Vagrant'ın bir IDE çalıştırmak için tasarlanmadığı yönünde.
Jay

Yine de bir şans vermeniz gerektiğini düşünüyorum - VirtualBox 2D hızlandırmayı Windows ana bilgisayarları için olduğu gibi etkinleştirmedim (ve bir Windows ana bilgisayarım yoktu). Denemediğim diğer performans fikirleri arasında şunlar yer alıyor: VMWare sağlayıcısının özel grafik optimizasyonlarına sahip olduğu söyleniyor, X11'den daha iyi performansa sahip olabilecek VRDP'yi deneyebilir, NX Sunucusunun X11'den daha hızlı olması gerekiyor ve sonunda baharat var- space.org. İşe yarayan bir şey bulursanız, lütfen buraya geri gönderin, çünkü bunu duymak isterim!
Jay

2
IntelliJ'i konuk bir sanal makinenin içinde test etmedim (ve bir iş arkadaşımın konuktaki yavaşlığıyla ilgili deneyimleri vermemiş olabilir). Bununla birlikte, 'Vagrant - Up and Running' bölümünde aşağıdakileri okudum: Shared folders incur a heavy performance penalty within the virtual machine when there is heavy I/ O, so they should only be used for source files. Any compilation step, database files, and so on should be done outside the shared folder filesystem inside the guest filesystem itself.Bu kitabın açıklaması (Vagrant yaratıcısı tarafından yazılmıştır) ana bilgisayar VM'de derlemeye karşı çıkıyor gibi görünüyor, değil mi?
Kevin Meredith

4
Alıntı, "sanal makine içinde ağır bir performans cezasından" bahsediyor ve ana bilgisayar için genel bir performans cezasından bahsetmiyor, bu yüzden buradaki bağlamın VM içindeki performans / işlemler için olduğunu düşünüyorum . Bu bağlamda, bu alıntıyı, konuk ve ev sahibi üzerinde derleme önermek yerine konuk içinde yapılan bir derleme adımı yapıldığında performansı tahmin etmek olarak yorumluyorum. Bu alıntı için bağlam hakkında daha fazla bilgi verebilir misiniz? Kitap bu senaryoyu özel olarak ele alıyor mu? Tabii ki tüm bunlar gerçek testlere tabi :)
Jay

3

Geçen yıl bu konuyla ilgilenmiştim :)

Çözümüm, bayraklarla yapılandırılabilen serseri bir makineye sahip olmak. Örneğin, bu işaretlerden biri masaüstü arayüzünü etkinleştirir çünkü bazı geliştiriciler ana makinede kodlamayı tercih ederken, diğerleri masaüstü ve içindeki IDE ile çok daha entegre bir ortama sahip olmayı tercih eder.

Masaüstü yavaşlığıyla yüzleşmek için çok kullanışlı bir serseri eklentisi (evet ... vagrant, geliştirme ortamını büyük ölçüde iyileştiren eklentilere sahiptir) şu şekilde yüklemelisiniz: serseri eklenti kur vagrant-vbguest Bu eklenti, her konuk için sanal kutu misafir eki yükleyecektir. Virtualbox arayüzünü kullanırken kullanılabilir hale getirin. Daha sonra gui'nin Vagrantfile dosyasını bu şekilde düzenlemesini etkinleştirmek için:

config.vm.provider "sanal kutu" do | vb | vb.gui = gerçek son

Paylaşılan klasör performanslarını hızlandırmak yerine rsync: config.vm.synced_folder "./git", "/ home / vagrant / git", şunu yazın: "rsync", rsync__exclude: ".git /" kaynak kodun ana bilgisayarda düzenlenmesi ve ardından konuğa yeniden senkronize edilmesi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.