当前位置: 首页 > 面试题库 >

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

危文乐
2023-03-14
问题内容

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

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

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

为什么要在VM上编译

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

为什么在虚拟机上安装IDE

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

为什么要在主机上编译

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

为什么主机上有IDE

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

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


问题答案:

经过大量的思考和实验,我决定了在哪里使用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开发人员提供一些有关如何使用它的上下文。



 类似资料:
  • 问题内容: 我正在尝试反编译 Java项目(.jar)文件,并且能够从其中获取.java文件。现在如何将其编译回来?我可以将.java文件作为单个文件添加到Netbeans。但是如何将其作为项目添加并编译呢?该项目是JavaFX项目。所以请帮我。 问题答案: 有很多方法可以实现此目的,但是我认为您不能像这样直接在框内(在本例中为开箱)将项目导入jar中。 我们可以使用最基本的技术(我承认有点脏),

  • 你好, 我有一个项目的web使用和本地使用和共享一些代码。 正在工作,但是如果我删除web版本正在工作的代码和库,则web版本在同一代码库中不工作。 我认为问题是在配置,我已经尝试了很多版本,但在鼻涕工作。 要让web启动我使用的服务器,请执行以下操作: 我的配置文件: 还有一些错误:

  • 问题内容: 我有一个Java FX项目,正在使用maven 3.0.5进行构建。当我运行mvn package / install时,项目失败,并抱怨该包javafx。 * 不存在。据我了解,Javafx是用Java 1.7打包的,因此该构建没有接受它是没有意义的。当我在IDE(intellij)中编译它时,它可以正常工作,并且之后我的maven构建也成功安装,但是我不希望每次执行全新安装时都必须

  • 问题内容: 当我尝试使用此错误时,显示: 我看到有类似的主题,但是我的工作环境是Eclipse,我从Git中提取了我的项目(我将项目导入为常规项目),并且使用了Apache Ant。谁能帮我? 问题答案: 由于您将项目导入为常规项目,因此它不具有Java性质,这就是问题所在。 将以下行添加到工作区的.project文件中并刷新。

  • 问题内容: 您应该在服务器端进行验证,还是可以在客户端进行验证? @TheTXI 我很高兴您感到惊讶,我只是不想遗漏任何可能改变某人答案的虚假信息。 似乎很多人都在关注我要追求的目标,但是应该将Ajax的一部分保留在我的问题中,因为这是最重要的部分。 但是,我阅读这些帖子后知道,一个坏人可以轻松地加载萤火虫并将我的按钮更改为“提交”按钮并进行发布。或其他方式。 问题答案: 浏览器/客户端验证很方便

  • 问题内容: 我正在尝试在示例应用程序中设置react-router,但出现以下错误: 我的应用程序设置如下: 父组件 子/ 组件 知道我在做什么错吗? 这是一个沙盒链接来演示该问题。 问题答案: 我假设您使用的是React-Router V4,就像您在原始Sandbox Link中 使用的一样。 您呈现在调用组件用来渲染和主要成分是外面,这就是为什么它被抛出的错误: 您不应在 外使用 变化 : 使