2011-06-16 130 views
28

我正在寻找一种在我的Java应用程序中嵌入Google JavaScript引擎V8的解决方案。如何将V8嵌入到Java应用程序中?

你有一些解决方案吗?

+1

犀牛不会做? – Thilo 2011-06-16 09:47:24

+9

你知道[Rhino](http://www.mozilla.org/rhino/),对吧?如果你只是想要一个适用于Java的JavaScript引擎,并且它不具有V8版本... Rhino会将JavaScript编译为Java字节码,无论是在编译时静态编译还是在运行时动态编译(或者两者兼备,如果两者都需要)用Java编写的代码和用JavaScript编写的代码之间几乎完全互操作。如果你还没有,这真是太酷了,值得一看。 – 2011-06-16 09:48:14

+0

我想你必须学习嵌入指南:http://code.google.com/apis/v8/embed.html – 2011-06-16 09:48:26

回答

16

可以使用J2V8 https://github.com/eclipsesource/J2V8。它甚至在Maven Central

以下是您好,世界!程序使用J2V8。

package com.example; 

import com.eclipsesource.v8.V8; 

public class EclipseCon_snippet5 { 


    public static class Printer { 
     public void print(String string) { 
      System.out.println(string); 
     } 
    } 

    public static void main(String[] args) { 
     V8 v8 = V8.createV8Runtime(); 
     v8.registerJavaMethod(new Printer(), "print", "print", new Class<?>[]{String.class}); 
     v8.executeVoidScript("print('Hello, World!');"); 
     v8.release(true); 
    } 

} 

您将需要在您的pom.xml中指定您的平台。 J2V8目前支持win32_x86,macosx_x86_64,android_x86和android_armv7l。他们不同的原因是捆绑的本地绑定和V8的预生成版本。

例如,在MacOS上可以使用。

<dependencies> 
    <dependency> 
     <groupId>com.eclipsesource.j2v8</groupId> 
     <artifactId>j2v8_macosx_x86_64</artifactId> 
     <version>2.0</version> 
     <scope>compile</scope> 
    </dependency> 
</dependencies> 
+2

我在Android(arm + x86)上使用v4.2.0(AAR),它工作的很好。它闪电般快速,API非常酷,深思熟虑。它为我节省了很多工作。否则,我不得不将大量的TypeScript代码移植到Java中。谢谢@irbull,你是男人! – hgoebl 2016-07-03 13:28:09

+0

@hgoebl感谢您花时间写这些。那真的是我的一天! – irbull 2016-07-27 18:31:01

5

确实没有任何直接的方法可以做到这一点,但是,我会建议RhinoJNI。前者比较容易,但不是v8,后者很难挑剔,但v8。或者,您可以使用独立的v8进程,并与Java进行交谈。

16

也许你可以试试Jav8,它实现了基于Google V8 Javascript引擎的Java Scripting API(JSR223)。我从几个星期前开始研究它,它可以支持最简单的场景。

http://code.google.com/p/jav8/

+1

jav8的问题是jni的性能 – 2014-02-24 18:36:20

相关问题