Как встроить V8 в приложение Java?

Я ищу решение для встраивания движка Google JavaScript V8 в мое Java-приложение.

У вас есть какие-то решения?

4 ответа

Решение

Вы можете использовать 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>

Возможно, вы могли бы попробовать Jav8, который реализует Java Scripting API (JSR223) на базе движка Google V8 Javascript. Я работаю над этим несколько недель назад, и он может поддерживать самые простые сцены.

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

На самом деле нет простого способа сделать это, но я бы предложил Rhino или JNI. С первым проще, но не с v8, с последним - с трудом и привередливостью, но с v8.

Или вы можете использовать отдельный процесс v8 и общаться с ним через Java.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я обслуживаю Javet.

J2V8 устарел на несколько лет. Я рекомендую Javet, отличную библиотеку Java со встроенной последней версией V8. Образец кода:

      try (V8Runtime v8Runtime = V8Host.getInstance().createV8Runtime()) {
    System.out.println(v8Runtime.getExecutor("'Hello Javet'").executeString());
}

Основные особенности

  • Linux + Windows
  • V8 v8.9.255
  • Открытие большинства API V8 в JVM
  • Перехват JS-функций
  • Родные BigInt и Дата
  • Бассейн двигателя Javet
  • Легкая пружинная интеграция
  • Отладка в реальном времени с помощью Chrome DevTools
Другие вопросы по тегам