Vagrant for Java项目:你应该在虚拟机还是主机上编译?

下面是一个问题:当为一个Java项目(或任何编译的语言项目)使用Vagrant时,你应该在虚拟机还是主机上进行编译? 另外,你是否希望你的IDE和所有的开发工具能够从虚拟机内部运行,或者在主机上运行?

似乎没有很好地定义 Java IDE和编译/部署过程如何与Vagrant VM一起工作。 一般来说,我的印象是代码是在主机上编辑的,并运行在虚拟机上,这对于非编译语言来说非常有用。 Stackoverflow上的其他答案暗示了Vagrant对于编译语言不太有用,因为额外的编译步骤,但我仍然想看看可以做什么。

我已经想到了一些事情:

为什么要在VM上编译

  • 如果在主机上编译,java是多一个安装软件
  • 如果在主机上编译,主机上的Java版本必须手动保持与虚拟机上的最新版本保持一致
  • 主机上相应的java版本可能不可用(比如在Mac上)

为什么VM上有IDE?

  • 环境和IDE之间更紧密的集成,可以使用快捷方式来运行应用程序
  • 可以连接debugging器的Java应用程序,而无需远程debugging(一步运行/debugging)

为什么要在主机上编译

  • 更快的编译时间
  • 希望尽可能保持虚拟机尽可能接近生产

为什么在主机上有IDE?

  • 编辑主机上的代码并在虚拟机上运行它是stream浪的惯例
  • 更好的UI性能(X转发和VNC缓慢)

你有什么想法:我应该从VM还是主机运行IDE? 我应该从虚拟机或主机内部进行编译吗?

经过深思熟虑和实验,我决定在哪里使用Vagrant,以及它如何与Java开发工作stream程集成。

对于JavaEE /已部署的应用程序,configurationWeb服务器和数据库服务器绝对是“足够”复杂的事情,以保证使用Vagrant。 使用两台服务器和无数种方式来configuration它们,configuration就很容易从一个开发人员不同步,导致“在我的机器上工作”症状。 对于这种软件,最好是在主机上编辑和编译代码,并将其部署到模仿您的生产环境的Vagrant VM。 Web服务器的部署文件夹甚至可以链接到主机上的编译目标,无需手动重新部署。 因此,Vagrant可能是您开发生命周期中的重要组成部分,但是从主机进行代码/编译/部署以及在使用Java的VM上运行的周期时间将比主机上的代码周期时间长,并且在虚拟机上运行我们用PHP / Ruby / Node /等看到。

对于独立的Java应用程序(如库或桌面应用程序),故事有所变化。 在这种情况下,在主机上编辑,编译和运行是最有意义的,完全避免使用Vagrant。 如果您使用的是大型Java IDE(Eclipse,Netbeans,IntelliJ …)之一,则您已经在计算机上安装了Java。 在这一点上,与使用Vagrant的开销相比,它几乎没有什么优势,只会在开发过程中增加一层额外的复杂性。 这是因为当你用IDE编辑Java时,你可以在主机上运行所有的东西。 一个问题是项目所需的Java版本可能与主机上运行IDE的版本不匹配。 一般来说(希望)这不是一个太大的问题; 截至撰写本文时,JDK6已经终结,而JDK8还没有发布(猜测这个问题离我们而去)。 但是,如果您确实需要运行多个版本,则应该可以根据需要在主机上设置JAVA_HOME。 虽然这确实带来了额外的复杂性,但是与维护Vagrant运行时相比,使用不同版本的Java来处理项目更简单。

有趣的问题是如何处理无容器Web应用程序。 Web服务器(在本例中是应用程序内部)是否应该像在外部Web服务器上那样在虚拟机内部运行? 或者像我们为独立应用程序那样在主机上运行? 对于无容器Web应用程序,没有外部Web服务器担心,但仍然有可能是一个数据库。 在这种情况下,我们可以采取混合方式。 运行无容器Web应用程序与运行独立应用程序基本相同,因此在主机上编译和运行代码将会很有效。 但是在涉及数据库的情况下,仍然有足够的复杂性和configuration,使数据库服务器在自己的Vagrant虚拟机上是合理的。

希望这给那些对Vagrant感兴趣的Java开发者一些关于如何使用它的上下文。

去年我对这个话题感兴趣:)

我的解决scheme是有一个stream浪的机器可以configuration标志。 例如,其中一个标志启用了桌面gui,因为有些开发人员喜欢在主机上编码,而其他人则更喜欢与桌面和IDE集成更多的环境。

要面对桌面缓慢,你应该安装一个非常有用的stream浪插件(耶…stream浪者有插件,大大改善了开发环境)这样:vagrant插件安装vagrant-vbguest这个插件将安装虚拟盒嘉宾添加到每个客户使其在使用virtualbox界面时可用。 然后启用gui这样编辑Vagrantfile:

config.vm.provider“virtualbox”do | vb | vb.gui =真结束

为了加快共享文件夹的性能,我build议使用rsync:config.vm.synced_folder“./git”,“/ home / vagrant / git”,input:“rsync”,rsync__exclude:“.git /”在主机上编辑源代码的方式,然后rsync -ed到来宾。