【问题标题】:Convert Java to JavaScript that runs on JVM将 Java 转换为在 JVM 上运行的 JavaScript
【发布时间】:2015-06-02 14:49:40
【问题描述】:

我是 GWT(将 Java 转换为在浏览器中运行的 JavaScript)的忠实粉丝,但是是否有任何工具可以将 Java 转换为 JavaScript 以在 JVM 中运行(通过 Nashorn 或 Rhino)?

更新

更多信息...我正在探索的想法是将后端代码编译为 JavaScript,然后将其存储在数据库中。然后,Web 应用程序可以从数据库中提取一个后端“模块”并在服务器上执行它。

更新

我不会将此作为答案发布,因为我怀疑这是一个好主意,但出于好奇,我尝试在 JVM 中运行 GWT 生成的 JavaScript。在“详细”级别编译时,我不得不模拟 GWT 期望存在的 3 个 DOM 对象(hack!),但它确实有效。

Test.gwt.xml

<module rename-to='test'>
  <entry-point class='test.client.Test'/>
  <source path='client'/>
  <source path='shared'/>
  <super-source path="jre"></super-source>
  <add-linker name="xsiframe"/>
</module>

...注意超级源jre...

test/client/Test.java

public class Test implements EntryPoint {
  public void onModuleLoad() {
    print("" + new File("/Users/.../someFile.txt").exists());
    print("Hey");
  }

  public native void print(String msg) /*-{
    print(msg);
  }-*/;
}

...模拟的 File 类...

test/jre/java/io/File.java

public class File {

  public File(String name) {
    _init(name);
  }

  private native void _init(String name) /*-{
    this._obj = new java.io.File(name);
  }-*/;

  public native boolean exists() /*-{
    return this._obj.exists();
  }-*/;
}

测试/RhinoTest.java

public class RhinoTest {
  public static void main(String[] args) throws IOException, ScriptException {
    String js = FileUtils.readFileToString(new File("/Users/.../Test/war/test/130CD4F977EDEB096DFEF9871580F1CD.cache.js"));
    js = "var $wnd = { test: { __sendStats: function() {} } };"
       + js;
    new ScriptEngineManager().getEngineByName("JavaScript").eval(js);
  }
}

生产:

trueHey

【问题讨论】:

  • Rhino 将 js 编译成类,你可以提供一个 Applet 运行时(出于安全考虑)并直接运行编译后的 Java 代码。
  • 我刚刚更新了我的问题,提供了有关我的用例的更多信息。我需要在服务器上运行这个,而不是在浏览器中。除非你知道一些我不知道的事情,否则在服务器中运行一个小程序并不比动态加载一个 jar 并运行它更容易。
  • 你为什么不直接写 JavaScript 呢?
  • 我们是一家全 Java 商店。我们有大型应用程序,并且该组织有意选择 Java,因为静态类型提供的结构。我正在考虑为我们现有的应用程序使用替代部署策略。如果我建议我们用 JavaScript 重写所有应用程序,那对话就不会顺利 =)。
  • 你看过osgi栈吗?像春分或阿帕奇菲利克斯?否则我认为以这种方式使用 gwt 的想法似乎对你有用 - 你应该回答这个问题,或者改写它,因为我认为没有问题需要回答了:-)

标签: java javascript gwt rhino nashorn


【解决方案1】:

Java 和 JavaScript 很相似,就像 Car 和 Carpet 很相似。

您不会找到一个通用的解决方案,即没有复杂代码错误的事件一。

我很抱歉,但最好和最快的解决方案是手动逐步进行,因为您将花费太多时间进行调试和手动调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2016-12-23
    • 1970-01-01
    • 2022-10-19
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多