Java项目的Vagrant:您应该在VM中编译还是在主机上编译?

Java项目的Vagrant:您应该在VM中编译还是在主机上编译?,java,vagrant,Java,Vagrant,这里有一个问题:当使用Vagrant进行Java项目(或任何编译过的语言项目)时,您应该在VM中编译还是在主机上编译?另外,您希望IDE和所有开发工具也从VM内部运行,还是在主机上运行 这似乎正是JavaIDE和编译/部署过程如何与一个流浪的VM一起工作的。一般来说,我的印象是代码在主机上编辑,并在VM上运行,这对于非编译语言非常有用。我已经暗示,由于额外的编译步骤,Vagrant对编译语言没有那么有用,但我仍然想看看能做些什么 有些事情我已经想清楚了: 为什么要在虚拟机上编译 如果在主机上编

这里有一个问题:当使用Vagrant进行Java项目(或任何编译过的语言项目)时,您应该在VM中编译还是在主机上编译?另外,您希望IDE和所有开发工具也从VM内部运行,还是在主机上运行

这似乎正是JavaIDE和编译/部署过程如何与一个流浪的VM一起工作的。一般来说,我的印象是代码在主机上编辑,并在VM上运行,这对于非编译语言非常有用。我已经暗示,由于额外的编译步骤,Vagrant对编译语言没有那么有用,但我仍然想看看能做些什么

有些事情我已经想清楚了:

为什么要在虚拟机上编译

  • 如果在主机上编译,java是需要安装的又一个软件
  • 如果在主机上编译,则必须手动使主机上的java版本与VM上的java版本保持最新
  • 主机上相应的java版本可能不可用(例如,在Mac上)
为什么虚拟机上有IDE

  • 更紧密地集成环境和IDE,可以使用快捷方式运行应用程序
  • 无需远程调试即可连接java应用程序的调试器(一步运行/调试)
为什么要在主机上编译

  • 更快的编译时间
  • 希望让虚拟机尽可能接近生产环境吗
为什么主机上有IDE

  • 在主机上编辑代码并在虚拟机上运行代码是一种流浪约定
  • 更好的UI性能(X转发和VNC速度较慢)

您的想法是什么:我应该从VM还是主机内部运行IDE?我应该从虚拟机还是主机内部编译?

经过大量思考和实验,我决定在何处使用Vagrant,以及它如何与Java开发工作流集成

对于JavaEE/部署的应用程序,配置web服务器和数据库服务器绝对是“足够”复杂的事情,足以保证使用Vagrant。有了两台服务器和无数种配置方式,开发人员之间的配置很容易失去同步,从而导致“在我的机器上工作”综合症。对于这种软件,最好在主机上编辑和编译代码,并部署到模拟您的生产环境的虚拟机上。web服务器的部署文件夹甚至可以符号链接到主机上的编译目标,从而无需手动重新部署。因此,Vagrant可能是开发生命周期中的一个重要部分,但是从主机上运行代码/编译/部署并使用Java在VM上运行的周期要比我们使用PHP/Ruby/Node/等在主机上运行代码和在VM上运行的周期长

对于独立的Java应用程序(如库或桌面应用程序),情况有所变化。在这种情况下,最好在主机上编辑、编译和运行,完全避免使用Vagrant。如果您正在使用一个大型JavaIDE(Eclipse、Netbeans、IntelliJ…),那么您已经在机器上安装了Java。在这一点上,与使用Vagrant的开销相比,它几乎没有什么优势,只会在开发过程中增加一层复杂性。这是因为当您能够使用IDE编辑Java时,您已经能够在主机上运行所有内容。一个问题是项目所需的Java版本可能与主机上运行IDE的版本不匹配。总的来说(希望如此),这不是一个太大的问题;在撰写本文时,JDK6已经结束了生命,而JDK8还没有发布(猜猜这会给我们留下什么)。但是,如果确实需要运行多个版本,则应该能够根据需要在主机上设置JAVA_HOME。虽然这确实会带来额外的复杂性,但它比维护一个不稳定的运行时来处理使用不同版本Java的项目要简单

有趣的问题是如何处理无容器web应用程序。web服务器(在本例中是应用程序的内部)是否应该像外部web服务器那样在VM内部运行?或者像我们对独立应用程序那样在主机上运行?对于无容器web应用程序,不需要担心外部web服务器,但仍然可能有一个数据库。在这种情况下,我们可以采取混合方法。运行无容器web应用程序本质上与运行独立应用程序相同,因此在主机上编译和运行代码是有效的。但涉及到数据库时,仍然有足够的复杂性和配置,因此让数据库服务器位于其自己的Vagrant VM上是有意义的


希望这能为对Vagrant感兴趣的Java开发人员提供一些关于如何使用它的背景知识。

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

我的解决方案是让一台流浪机器可以配置标志。 例如,其中一个标志启用桌面gui,因为一些开发人员更喜欢在主机上编写代码,而其他人更喜欢在桌面和IDE中有一个更集成的环境

为了解决桌面速度慢的问题,你应该安装一个非常有用的vagrant插件(是的…vagrant有一些插件可以极大地改善开发环境),方法是:vagrant插件安装vagrant vbguest 该插件将在每个客户机上安装virtual box guest addition,使其在使用virtualbox界面时可用。 然后,要启用gui,请按以下方式编辑该文件:

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

为了加快共享文件夹的性能,我建议使用rsync: config.vm.synced_文件夹“/git”,“/home/vagrant/git”,键入:“rsync”,rsync_排除:“.git/” 通过这种方式,源代码在主机上编辑,然后重新同步到来宾。

对于Windows操作系统