Java项目无家可归:您应该在VM或主机上进行编译?


91

问题是:将Vagrant用于Java项目(或与此相关的任何编译语言项目)时,应在VM还是在主机上进行编译?另外,您是否也希望在VM内部或主机上运行IDE和所有开发工具?

似乎还没有很好地定义 Java IDE和Vagrant VM如何进行编译/部署过程。通常,我的印象是,代码是在主机上编辑的,并在VM上运行,这对非编译语言非常有用。有关Stackoverflow的其他答案已经暗示,由于额外的编译步骤,Vagrant对编译语言的用处不大,但是我仍然想看看可以做什么。

我已经考虑过的一些事情:

为什么要在VM上编译

  • 如果在主机上编译,则Java是要安装的另一软件
  • 如果在主机上编译,则必须手动将主机上的Java版本与VM上的版本保持最新
  • 主机上相应的Java版本可能不可用(例如,在Mac上)

为什么在虚拟机上安装IDE

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

为什么要在主机上编译

  • 更快的编译时间
  • 希望使VM尽可能接近生产环境

为什么主机上有IDE

  • 在主机上编辑代码并在VM上运行它是流浪汉的惯例
  • 更好的UI性能(X转发和VNC速度很慢)

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

Answers:


61

经过大量的思考和实验,我决定了在哪里使用Vagrant,以及如何将其与Java开发工作流程集成。

对于JavaEE /已部署的应用程序,配置Web服务器和数据库服务器绝对是“足够”复杂的事情,足以保证使用Vagrant。通过两台服务器以及无数种配置方式,很容易使配置从一个开发人员与另一个开发人员不同步,从而导致“我的机器上工作”综合症。对于此类软件,最好在主机上编辑和编译代码,然后将其部署到模拟您的生产环境的Vagrant VM中,效果最好。Web服务器的部署文件夹甚至可以链接到主机上的编译目标,从而无需手动重新部署。因此,Vagrant可能是您开发生命周期的重要组成部分,

对于独立的Java应用程序(例如库或桌面应用程序),情况有所变化。在这种情况下,最重要的是在主机上进行编辑,编译和运行,而完全避免使用Vagrant。如果您使用的是大型Java IDE(Eclipse,Netbeans,IntelliJ ...)之一,则您已经在计算机上安装了Java。那时,与使用Vagrant的开销相比,几乎没有什么优势,并且仅在开发过程中增加了一层额外的复杂性。这是因为到了您可以使用IDE编辑Java时,您仍然可以在主机上运行所有内容。一个问题是项目所需的Java版本可能与主机上运行IDE的版本不匹配。总的来说(希望如此),这并不是一个太大的问题。在撰写本文时,JDK6的生命周期已尽,而JDK8尚未发布(猜测这会给我们带来什么)。但是,如果确实需要运行多个版本,则应该能够根据需要在主机上设置JAVA_HOME。尽管这确实带来了额外的复杂性,但与维护Vagrant运行时(仅用于使用不同版本的Java的项目一起使用)相比,它的复杂性要低。

有趣的问题是如何处理无容器Web应用程序。Web服务器(在这种情况下是应用程序内部)是否应该像在外部Web服务器上那样在VM内部运行?还是像我们对独立应用程序所做的那样在主机上运行?对于无容器的Web应用程序,无需担心外部Web服务器,但是仍然可能有数据库。在这种情况下,我们可以采用混合方法。运行无容器Web应用程序本质上与运行独立应用程序相同,因此在主机上编译和运行代码将非常有效。但是,在涉及数据库的情况下,仍然存在足够的复杂性和配置,因此有必要将数据库服务器置于自己的Vagrant VM上。

希望这可以为对Vagrant感兴趣的Java开发人员提供一些有关如何使用它的上下文。


对于Windows OS主机和Linux OS VM,您对在Linux VM上运行IntelliJ并通过X11在主机(Windows)上运行有何想法?
凯文·梅雷迪斯

3
好问题:我没有提到它,但是我在Vagrant VM内运行IDE时做了很多测试,发现性能太差了 ……因为单击菜单大约需要12秒钟才能做出响应。我尝试了以下操作:指定更快的密码,对X11使用压缩,并增加VM视频RAM,仅使响应时间达到4秒,这仍然无法使用。所以我的想法是Vagrant不适合运行IDE。
2014年

我想您应该试试看-我没有启用VirtualBox 2D加速,因为那是针对Windows主机的(而且我没有Windows主机)。我没有尝试过的其他性能想法包括:有传言说VMWare的提供程序具有特殊的图形优化,可以尝试VRDP的性能可能比X11更好,而NX Server应该比X11快,最后还有一些香料- space.org。如果您发现任何有效的方法,请发回此处,因为我很想听听!
2014年

2
我尚未在来宾VM内测试IntelliJ(并且可能无法给出同事在来宾中的缓慢性体验)。但是,我在“ Vagrant-Up and Running”中阅读了以下内容: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.本书的声明(由Vagrant的创建者撰写)似乎反对在主机VM中进行编译,不是吗?
凯文·梅雷迪斯

4
引号提到“虚拟机内的性能严重下降”,没有提及主机的全局性能下降,因此我认为这里的上下文是针对VM内部的性能/操作。在这种情况下,我认为此报价是在来宾内部完成编译步骤时的性能预测,而不是建议在来宾与主机上进行编译。您能否详细说明此报价的上下文?这本书专门针对这种情况吗?当然,所有这些都需要经过实际测试:)
2014年

3

去年,我对此主题感兴趣:)

我的解决方案是让无业游民的机器可以使用标志进行配置。例如,此标志之一启用了桌面gui,因为某些开发人员更喜欢在主机上进行编码,而其他开发人员则更喜欢将桌面和IDE集成到其中。

要解决桌面运行缓慢的问题,您应该以这种方式安装一个非常有用的vagrant插件(是的... vagrant的插件可以大大改善开发环境):vagrant插件install vagrant-vbguest该插件将在每个guest虚拟机上安装虚拟机guest虚拟机在使用virtualbox界面时使其可用。然后,要启用gui,请以这种方式编辑Vagrantfile:

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

为了提高共享文件夹的性能,我建议使用rsync:config.vm.synced_folder“ ./git”,“ / home / vagrant / git”,键入:“ rsync”,rsync__exclude:“ .git /”在主机上编辑源代码,然后将其同步到来宾的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.