这是一个问题:当将Vagrant用于Java项目(或任何编译语言项目)时,您应该在VM中还是在主机上编译?此外,您是否希望您的IDE和所有开发工具也可以在VM内部或主机上运行?
似乎not very well defined确切地说Java IDE和编译/部署过程如何与Vagrant VM一起工作。一般来说,我的印象是代码在主机上编辑,并在VM上运行,这对于非编译语言非常有用。由于额外的编译步骤,Other answers on Stackoverflow暗示Vagrant对编译语言不太有用,但我仍然想看看可以做些什么。
我已经考虑过的一些事情:
为什么要在VM上编译
为什么在VM上安装IDE
为什么要在主机上编译
为什么主机上有IDE
您有什么想法:我应该从VM或主机内部运行IDE吗?我应该从VM或主机内部编译吗?
答案 0 :(得分:60)
经过深思熟虑和实验,我决定在哪里使用Vagrant以及它如何与Java开发工作流程集成。
对于JavaEE /已部署的应用程序,配置Web服务器和数据库服务器绝对是具有“足够”复杂性以保证使用Vagrant的东西。有了两台服务器和无数种配置方式,配置很容易从一个开发人员转到另一个开发人员,导致“我的机器上的工作”综合症。对于这种软件,最好在主机上编辑和编译代码,并部署到模仿生产环境的Vagrant VM。 Web服务器的部署文件夹甚至可以符号链接到主机上的编译目标,从而无需手动重新部署。因此,Vagrant可能是开发生命周期的重要组成部分,但是从主机进行代码/编译/部署以及使用Java在VM上运行的周期时间将长于主机上的代码的周期时间并在VM上运行我们看到PHP / Ruby / Node / etc。
对于独立的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开发人员提供了一些关于如何使用它的上下文。
答案 1 :(得分:3)
去年我对这个话题感兴趣:)
我的解决方案是让一个可以使用标志配置的流浪汉机器。 例如,这个标志之一启用桌面gui,因为一些开发人员更喜欢在主机上编码,而其他开发人员更喜欢在桌面和IDE中使用更加集成的环境。
要面对桌面缓慢,你应该以这种方式安装一个非常有用的vagrant插件(是的... vagrant有插件,大大改善了开发环境):vagrant plugin install vagrant-vbguest 此插件将在每个guest虚拟机上安装虚拟盒guest虚拟机,以便在使用virtualbox界面时可以使用它。 然后启用gui以这种方式编辑Vagrantfile:
config.vm.provider“virtualbox”do | vb | vb.gui = true 端
相反,为了加快共享文件夹的性能,我建议使用rsync: config.vm.synced_folder“./git”,“/ home / vagrant / git”,输入:“rsync”,rsync__exclude:“。git /” 通过这种方式,源代码在主机上编辑,然后rsync-ed到guest虚拟机。