将Java虚拟机的一部分捆绑到项目中

将Java虚拟机的一部分捆绑到项目中,java,jvm,Java,Jvm,是否可以编写一个不安装Java的Java程序?我知道这是一个愚蠢的问题,但我问这个问题的原因是因为我想创建一个Java程序,该程序将Java虚拟机的各个部分捆绑在其中,以消除它对需要安装Java的计算机的依赖性。这可能吗?如果可能,我怎么做?这取决于你的意思: 可以为Java应用程序编写应用程序安装程序,该应用程序还将安装嵌入式JRE。需要注意的是,Oracle Java二进制许可证不允许您嵌入部分JRE。这是整个JRE。。。或者什么都没有 在某些情况下,可以将Java编译为本机代码,无需安装

是否可以编写一个不安装Java的Java程序?我知道这是一个愚蠢的问题,但我问这个问题的原因是因为我想创建一个Java程序,该程序将Java虚拟机的各个部分捆绑在其中,以消除它对需要安装Java的计算机的依赖性。这可能吗?如果可能,我怎么做?

这取决于你的意思:

  • 可以为Java应用程序编写应用程序安装程序,该应用程序还将安装嵌入式JRE。需要注意的是,Oracle Java二进制许可证不允许您嵌入部分JRE。这是整个JRE。。。或者什么都没有

  • 在某些情况下,可以将Java编译为本机代码,无需安装Oracle JRE即可执行

然而,这两种方法都有严重的缺点(IMO)

  • 嵌入式JRE方法可能会导致用户机器上JRE安装的激增,以及及时应用Java安全补丁的问题

  • 编译为本机代码的方法存在严重的局限性。例如,GCJ编译器/运行时仅支持Java1.4,并添加了一些1.5


总而言之,最好要求用户从信誉良好的来源下载最新的JRE,并将其安装在标准位置。请注意,这是一个简单的过程,适用于除最怕技术的用户外的所有用户,前提是他们拥有管理员权限。(如果他们不这样做,他们也不能安装您的软件…

这就是JRE的有效功能。@HotLicks但您需要计算机上的JRE来运行Java程序。我说的可能是将JRE的一部分捆绑到程序中,这样它就可以在没有安装它的计算机上运行。我很确定有一种方法可以构造一个包含JRE的可执行JAR。当然,问题是你最终得到的东西相当大,而且开始时会非常缓慢。我不相信这是经常做的。我想做它主要是作为我正在制作的程序的一个选项。我想给用户一个选项,让他们在不捆绑JRE的情况下使用JRE,但对于不知道如何安装JRE的用户,我想给他们一个选项,让他们将JRE作为程序的一部分。@HotLicks虽然我不能说是否经常这样做,但苹果的应用商店要求任何Java“应用程序”捆绑JRE…仅供参考;)那么有可能吗?我知道这是不实际的,但我想知道这是否可能。这绝对是可能的。用你的应用程序打包一个JRE,编写一个同时安装两个的安装程序。这样做的一个好处是您确切地知道您运行的JRE是什么,并且能够支持它。另一方面,您正在运行一个JRE,需要支持它。@Pedantic-我不认为这是一个反面。无论如何,您都需要支持在至少一个版本的Java(JRE)上运行。在我看来,安全补丁的问题要重要得多。@Stephen C我同意你的意见,我提到的方法的“反面”是,你必须管理针对正在部署的应用程序使用的JRE。如果我们能够依靠用户在一个单一的、可预测的地方安装和维护JRE,我就不会在我的评论中给出建议。还要记住程序文件(x86)和MS(tm)平台上的程序文件,对于那些必须处理64位系统的人来说,这很烦人。