经过深思熟虑和实验,我决定在哪里使用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开发者一些关于如何使用它的上下文。