首页 > 解决方案 > 使用 WebAssembly,有没有办法获取 .jar 并现在在浏览器中运行它?

问题描述

我对 WebAssembly 的理解有点挑剔,但我见过诸如TeaVMJWebAssembly 之类的项目,它们似乎将 Java 字节码转换为 WebAssembly。我的问题是这些工具中的任何一个都可以用来将整个 .jar 小程序翻译成可以在浏览器中执行的东西吗?

标签: javabrowserjarwebassembly

解决方案


目前没有直接转换。但是,您可以使用 JWebAssembly 重构您的 Applet/Java 代码,但需要付出一些努力和限制,然后生成 WebAssembly 代码。因此,您将需要重构您的小程序代码(项目文档项目状态java限制中详细说明了语言限制)并通过 JWebAssembly API 项目中的 DOM API 重写 GUI。

正如JWebAssembly (wiki/FAQ) 所说:

问:我可以使用 JWebAssembly Swing、AWT 或 Applet 应用程序进行编译吗?
答:不,您需要通过 JWebAssembly API 项目中的 DOM API 编写 GUI。理论上,任何人都可以编写一个库来实现对 Swing 和/或 AWT 的支持。但是,不建议这样做。

JWebAssembly 转换类似于 1:1 转换。生成的 WebAssembly 代码与原始 .class 文件的大小相似。

在这个 TeaVM 案例中,不仅仅是直接转换,您还会发现一个专门为 Javascript 设计的开发框架,并且目前对 WebAssembly (Wasm) 具有实验性支持。它试图重建方法的原始结构,它有一个优化器来删除死代码,将虚拟调用转换为静态调用等。

正如TeaVM (Github) 所说:

WebAssembly 支持处于实验状态。它可能缺少 JavaScript 后端可用的主要功能。目前还没有文档,您应该手动做很多事情(例如将生成的 wasm 文件嵌入到您的页面中,导入 JavaScript 对象等)。查看示例/基准模块。您应该首先检查 pom.xml 文件以了解如何从 Java 构建 wasm 文件。然后,您可能需要检查 index-teavm.html 和 index-teavm.js 以了解如何将 WebAssembly 嵌入到您的网页中。

正如官方网站所说:

TeaVM 主要是一个 Web 开发工具。它不是为了使用 Java 或 Kotlin 中的大型现有代码库并生成 JavaScript。不幸的是,Java 的设计并不是为了在浏览器中高效运行。如果不生成低效的 JavaScript,有些 Java API 是不可能实现的。其中一些 API 是:反射、资源、类加载器和 JNI。TeaVM 限制了这些 API 的使用。通常,您必须手动重写代码以适应 TeaVM 约束。

您可以查看这个示例项目、java 源代码(例如 WasmBenchmarkStarter.java)和 pom.xml 以查看代码(示例)。

另一个类似的项目是:bytecoder

问候


推荐阅读