gpt4 book ai didi

java - 将动态 Java 应用程序重新编译为 native Windows 可执行文件

转载 作者:行者123 更新时间:2023-11-30 08:27:53 24 4
gpt4 key购买 nike

当我们将 java 应用程序重新编译为 native 应用程序时,是否可以“模拟”通过 Spring AOP、依赖注入(inject)和其他 Spring 机制完成的动态代码生成? Hibernate 和纯 java 反射怎么样?一些能够将 Java 转换为 native 代码的工具包括 GCCExcelsior编译器,但它们是否提供了与 Java 应用程序工作方式相同的可靠 native 代码?

整个故事

目前,我们在工作中遇到了一个奇怪的场景。我们有一个服务器端 java web 应用程序,它使用 Spring 及其依赖注入(inject)、消息传递、MVC 和 AOP。应用规模较大,结构复杂,依赖关系复杂,涉及第三方较多,代码库庞大。

问题是我们必须针对应该托管上述应用程序的 Windows 系统(Windows 7 嵌入式;Core2 Duo;4GB RAM)。我们有某些限制(硬件、软件和法律)不允许我们在目标硬件上使用纯 java 代码。硬件运行 Windows 操作系统,我们唯一允许的选项是 native 可执行文件 (EXE)。

因此,我们必须将 java 服务器应用程序(或它的最小子集)转换(一个软词)为设备的 native 应用程序。根据 Internet 上的某些资源,这可能是通过某些生成 native (非 JAVA)二进制文件的编译器实现的。然而,由于动态平台(如 Java)与 native 平台的静态性质之间的严重差异,某些 JVM 功能将不可用 - 例如动态编译和代理(根据 this 页面)。因此,对于依赖动态基础技术(如 Spring 的 DI、AOP 和事务管理)的应用程序来说,这似乎是一项几乎不可能完成的任务。更不用说我们使用 Hibernate 作为 ORM。

我必须说,整个应用程序将尽可能地精简,只保留所需的功能(因为它非常独立 - 不依赖第三方服务来工作),但我们仍然不能说告别 Spring、Hibernate 和 AOP 等核心概念。因此,我的问题是:是否有可能将此类应用程序成功转换为 native 代码(具有上述属性和有效限制)?是否可以“模拟”通过 AOP 完成的动态代码生成(例如,如果依赖 AOP,则将我们的代理写成静态的)和其他 Spring 机制?提到的执行此操作的一些工具包括 GCCExcelsior编译器。他们是否使用我提到的动态技术提供了可靠的结果?除了用更静态的语言(如 C/C++)重写应用程序之外,还有其他选择吗(这在我们的时间范围内是 Not Acceptable )?我也很感激任何支持不这样做的论点,因为我们目前只是在评估这个机会。任何经过充分论证的拒绝对我来说都是可以接受的,因为我个人从未进行过此类 native 代码转换,也不知道它对软件的全部影响。

最佳答案

您唯一真正的目标选项是 IKVM 和 JNBridgePro 之类的东西——但是,考虑到您描述约束的方式,我猜 .net 应用程序并不是真正合理的,并且取决于应用程序 IKVM 的技术细节

在那种情况下,您几乎是在要求不可能的事情。没有明智的策略可以将 java 编译为支持普通企业应用程序工具链的任何重要子集的 win32 native 代码。

为目标平台从头开始重新编写应用程序比创建基础架构并进行必要的测试以将其从目标运行时破解/移植到完全不相关的外部运行时要便宜。

更新:有些事情发生了变化:现在有 graalvm这将为您的 Java 代码生成 native 图像。它既免费又奇特,并且在很大程度上满足了 OP 的要求。

关于java - 将动态 Java 应用程序重新编译为 native Windows 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20566333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com