如何交叉编译Java源代码到JavaScript?

给定一组Java源代码文件,我怎样才能将它们编译成一个或多个JavaScript文件,这些文件可以与手工制作的JavaScript一起使用?

GWT是一种选择,但是我迄今看到的每一个例子都是为了打造一些奇特的网站。 将Java源代码转换为可与手工JavaScript一起使用的Javascript的简单用例尚未得到充分记录 。

我在这个主题上的GWT邮件列表中开始了一个线程 ,但是对于这是否可行,意见似乎有所混淆。

一个人给了一个非常有用的提示,这是检查GWT出口商 。 问题是源代码和文档都不是现成的,尽管有这个和这个 。

编辑:GWT的出口商的源代码是在这里

我也看到了Java2Script 。 但是,我又一次无法找到如何解决我的简单用例的例子。

这个问题最好的办法是什么? 有什么更好的我失踪?

当你使用GWT时,你基本上是把UI部分转换成Javascript(并且假定你使用了在你编写Java时提供的UI部件)。 只有一些Java库可以在Javascript中访问。 通常在GWT应用程序中,大量使用Java库的东西都会在服务器端运行,并以AJAX(GWT为您处理)的形式连接到Javascript。 所以GWT不一定会把你的完整应用程序转换成Javascript(尽管如果你愿意限制你对Java库的使用和某些功能)。

无论如何,如果这种方法(呼叫Java内运行的Java服务器上的Java)吸引你,一个不错的选择是DWR ,它基本上允许你的Javascript直接调用在服务器上运行的Java类中的方法(没有你建立一个Web服务或其他前端)。 不是你问的,我知道。

更有意义的是,它看起来像是示例应用程序的源代码, 演示了gwt-exporter的使用 。

我不确定它是否适合您的用例,但是如果您同意放弃Java API并使用Java中的JavaScript API,则可以使用JSweet ,这是一个构建在TypeScript顶部的Java to JavaScript转换器。 它使您可以访问数百种类型良好的JavaScript API(DOM,jQuery,下划线,angularjs等)。 它生成JavaScript代码,您可以将其与传统JavaScript和TypeScript代码混合使用。

注意:JSweet 不适用于旧版Java代码和传统Java API,但是您的用例并未提及重复使用旧代码。

[更新]从版本1.1开始,JSweet现在也支持一些Java API,例如Collections(java.util)。 因此,可以在一定程度上重用遗留Java代码。 增加对Java API的支持也很简单。

虽然问题是关于将Java源代码编译为JavaScript,但我认为值得一提的是,有一种将Java字节码编译为JavaScript的TeaVM 。 我从来没有尝试过,但似乎很有希望。

这里有两个其他的选项,要看的东西和第三个选项不转换,只是住在一起。

  1. Java2Javascript

我一直想试试这个 – 看起来更接近问题。 引用网页:

一个Eclipse Java to JavaScript编译器插件和一个Eclipse Standard Standard Widget Toolkit(SWT)的JavaScript版本与其他常用实用程序(如java.lang。*和java.util。*)的实现。 您可以通过Java2Script Pacemaker将基于SWT的富客户端平台(RCP)转换为富Internet应用程序(RIA)。

JavaScript体验中的Java有限 – 您需要移植必要的依赖关系,或者通过jQuery等工具找到替代方案

  1. DukeScript

当我查看DukeScript时,它会编译一些前端Javascript并从浏览器的Javascript中调用Java。 这似乎或多或少是一种混合的方法,所以你可以使用Javascript的Java丰富的库。 我将陷入Java的浏览器安全策略。

利用Java运行时的Java体验更完整的Javascript。 如果我想在浏览器环境之外使用Javascript,

  1. Nashhorn

以Java的资源作为JavaScript的基础: Nashorn和JavaFX ,作为一个丰富的Javascript操作客户端的例子,可以考虑这个例子。 无论如何,使用Java内部的JavaScript引擎,你不需要在Javascript-VM和Object-Java之间转换Java-VM。

不完全是主题,但Kotlin是一种100%的Java兼容的语言,可以编译为JavaScript。

IntelliJ IDEA可以自动将Java转换为Kotlin并将其编译为在Node或浏览器上运行。

给定一组Java源代码文件,我怎样才能将它们编译成一个或多个JavaScript文件,可以使用手工制作的JavaScript?

内置Java API和Java语言功能与JavaScript之间没有直接的关联。 所以任何创建“转换器”的尝试都是不完整的。 作为一个基本的例子,Java类没有直接对应的JavaScript语言。

无论是不完整的转换工具是否适合您的用例,在没有源代码的情况下是不可能知道的。


也就是说,我建议解决你的问题是首先尝试使用GWT :设置一个演示项目,放入你的库的源代码,并从JavaScript端调用它,看看它的.js文件中的GWT输出。 其他海报推荐的其他一些工具也值得一试。

如果这是成果丰硕的,让你的一部分,伟大的。

从那里,你需要/想要手动完成其余的转换。 毕竟,假设你想让代码实际上正常工作,手动审查肯定是有序的。 一些单元测试与它一起转换也是理想的。

你没有说明你的项目的来源有多大,但是如果它很小(比方说少于一千行的代码),即使是手工完成的转换也不是非常困难。 如果它比这个大得多,我会建议你回顾一下,如果你确实需要JavaScript代码的话。

Interesting Posts