代码之家  ›  专栏  ›  技术社区  ›  NeradaXsinZ

创建Java独立的可执行应用程序,以便在不同的平台上运行而不需要任何安装

  •  2
  • NeradaXsinZ  · 技术社区  · 6 年前

    我已经使用JLink创建了Java应用程序的运行时映像,我希望能够将我的应用程序作为可执行程序传输到不同的平台。

    理想情况下,它是一个单一的文件,用户可以双击并启动应用程序,而无需安装任何东西。

    目前有没有一个好的方法可以做到这一点?

    3 回复  |  直到 6 年前
        1
  •  2
  •   DudeManGuy    6 年前

    您可以制作一个安装JDK和应用程序的安装程序。通过使用类似于 Launch4j 对于Mac可执行文件,请遵循Oracle的本教程: Packaging a Java App for Distribution on a Mac 最后: For Linux

    Minecraft使用这种方法,据我所知,我不知道其他方法。

    如果你想制作便携式应用程序,“make once run anywhere”类型的应用程序,那么我建议尝试一种不同的编程语言,比如C,它也需要.NET JVM,但是嵌入在Windows系统中。

        2
  •  0
  •   Strom    6 年前

    双击可在多个平台上运行可执行文件,需要事先在操作系统中注册文件类型,或先注册现有的文件类型以了解如何处理代码。

    jLink静态地将“所需模块及其传递依赖项”链接到输出。

    这个问题没有跨平台的解决方案。

    在一个文件中包含所有平台是不可能的(或者换句话说,不可行),因为每个可执行类型(COFF、ELF…)都有不同的结构。您可以尝试使用通用批处理文件来启动正确的可执行文件,但在Windows上,这需要文本文件类型编码;因此会破坏剩余的二进制代码。

    使用JLink 新的JMOD文件格式将允许您在Java容器中存储本机代码,从而允许在单个可执行映像中将入口点嵌入到嵌入式本机JRE代码中。 对于一个预先定义的平台。

    这个问题的另一方面是安全问题。由于嵌入的JRE不受安全更新的影响,crackers可能会选择嵌入以前已知的有缺陷的JRE,从而将正确的漏洞暴露给未知的消费者。

    反病毒程序的预期响应是将所有未更新的嵌入式JRE标记为病毒。

        3
  •  -1
  •   ZhekaKozlov    6 年前

    另外,看看 SubstrateVM . 这不是一个真正的Java,但是,它可能在某些情况下帮助您,像简单的命令行应用程序。

    基板虚拟机是一个允许提前(AOT)的框架。 在封闭世界假设下编译Java应用程序 可执行图像或共享对象(elf-64或64位mach-o)。