问题标签 [j2v8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
549 浏览

java - 在 neo4j 中嵌入 j2v8 库并重用 V8 运行时

我需要嵌入j2v8-4.6.0 库(JavaScript 引擎的绑定,V8)以用于neo4j-community-3.1.0(图形数据库管理系统)用户定义的函数。

所以,我的简单插件的代码:

该插件已正确编译和安装。并且用户函数的第一次调用js.eval没有错误发生。但是第二次调用(以及以下所有调用)给出了错误:

我读过J2V8 强制执行单线程,并且对单个运行时的所有访问都必须来自同一个线程。

这意味着每次调用用户函数时,都需要创建运行时(V8.createV8Runtime)。但这是一项昂贵的操作。

那么问题来了:如何避免每次调用函数都需要创建 V8 运行时,而重用曾经创建的 V8 运行时?

0 投票
1 回答
2995 浏览

java - 如何使用 J2V8 在 Android 中使用 NodeJS

我使用J2V8库为 android 创建了代码,用于在 android mobile 中执行 nodejs 脚本。但是当我运行应用程序时它给了我错误。

Gradle 依赖项

代码

错误

请帮我解决这个错误。


普通 V8 发动机工作正常,但上面createNodeJS给出了错误。

0 投票
1 回答
214 浏览

android - J2V8 和 Stetho

我有一个使用 J2V8 的 Android 应用程序,并且想使用 Stetho 创建一个可以在 Chrome 开发工具中使用的调试桥。

有没有关于如何将 Stetho 连接到我正在使用的 V8 运行时的文档?

0 投票
1 回答
325 浏览

javascript - J2V8可以执行匿名函数吗?

我正在尝试执行这段 javascript 代码

但我收到了这个错误:

如果我将函数分配给一个变量,我既没有错误也没有结果。

您对如何使用 J2V8 运行此脚本有任何想法吗?先感谢您

0 投票
1 回答
969 浏览

gradle - 如何在使用 Gradle 构建胖罐时编译不同的口味

我想在 Java 项目中包含V8 的 Java 绑定(“J2V8”)。原因是(i)V8 JavaScript 引擎比 JRE 附带的 JavaScript 引擎快得多,并且(ii)我使用的库仅在 JavaScript 中可用,并且移植到 Java 需要付出很多努力。

问题是 J2V8 是为不同的平台编译的:linux 64bit、macos 64bit、windows 64bit、windows 32bit。

我现在想生成不同的 JAR,包含所有依赖项(fat jars):

  • jabref-linux_x86_64.jar
  • jabref-macosx_x86_64.jar
  • jabref-windows_x86_32.jar
  • jabref-windows_x86_64.jar
  • jabref-all.jar- 没有 v8 引擎的平台独立 JAR

我目前正在使用影子插件创​​建胖罐子。

请注意,该项目不是Android 项目。在那里,使用 Android 插件,这样做似乎很简单。

第一个想法是引入配置和配置特定的依赖关系:

但现在我被困住了。在伪代码中,我想做:

shadowJar来自影子插件。

背景资料

相关问题

使用 Gradle 管理具有类似 Android 风格的 Java Web 应用程序的问题具有类似的标题,但要求提供源目录,而我要求提供依赖项。此外,我想生成一个胖 JAR,而一个普通的 JAR 似乎就足够了。但是,解决方案可能是相似的。一个提示是使用主要来源为JavaFlavoursExtension.groovy的gradle-java-flavors 插件

以下问题与此类似。但是,该设置与 Android 应用程序有关,而不是与普通 Java 应用程序有关。

0 投票
1 回答
384 浏览

javascript - 如何在 es6 版本的 javascript 中使用 java 库?

我想在用 ES6 编写的 javascript 中使用 java 库。我尝试了 j2v8 和 nashorn,但它们不支持 ES6 功能。还有其他方法可以做到这一点吗?

0 投票
1 回答
325 浏览

javascript - J2V8 ReferenceError:尝试执行脚本时未定义进程

我正在使用 J2V8 从我的 Java 代码中调用一个 javascript 函数。当我尝试执行我的脚本时,它给了我 ReferenceError : process is not defined。该脚本使用 reactDomServer 将哈希映射转换为 html 对象。

我正在初始化我的 V8,如下所示:

另外,当你想使用 V8 调用 JS 函数时,有没有办法将 hashmap 作为参数传递?

这与 nashorn 一起使用,但我无法使其与 V8 一起使用。看来我的参数需要是 V8 值或原语。我找到的所有示例都非常简单,只传递字符串或整数作为参数。如果我的参数是几个对象,我应该将它们声明为 V8 值,然后将它们推送到 V8 数组中并将该数组作为我的函数参数传递吗?

谢谢!

0 投票
0 回答
207 浏览

java - 如何使用 J2V8 从 Java 向 Node 提供异步数据

我有一个用 JavaScript 编写的应用程序,它使用 rxjs 库来处理异步数据。我想插入一个 java 后端,我发现 J2V8 可以让我启动 Node 并通过 Java 与它对话。

对于同步任务,一切都很好,但是当我将 rxjs Observable 映射到 RxJava Observable 时,我得到(默默地吞下)“无效的 V8 线程访问”异常。

我明白为什么会这样。Node 是单线程的,当我尝试推送我的异步响应时,它可能正忙着做自己的事情。

我想要实现的更广泛的观点是:

订阅事件到达 Java => 订阅传递给 NodeJS 进行处理 => NodeJS 回调给 Java 以获取实际数据源 => Java 将数据推回 NodeJS 进行处理 => NodeJS 将结果传递给原始 Java 订阅者。

具体来说,我想要一些关于如何将异步事件从 Java 推送到 Node.js 的建议。

编辑:回答有关我为什么要这样做的问题。我有一个 NodeJS 服务器,它可以用一些 JS 数据源做我希望它做的事情。我想添加一个 Java 数据源,它将使用 websockets 与 NodeJS 服务器进行通信。每个数据源都有一堆请求/响应逻辑,因此我希望通过包含此逻辑的短 JS 管道汇集到达 Java 数据源的请求。我可以复制 Java 中的逻辑,但我试图避免用 2 种不同的语言编写和维护相同的东西。

我正在尝试做的事情完全有可能是愚蠢的,但我正处于原型阶段,所以我正在试验。

0 投票
0 回答
287 浏览

javascript - J2V8 J8Object 编组到/从 Json

我正在使用J2V8 项目的 NodeJS 接口在 Akka Actor 内部创建一个脚本沙箱(使用来自 Akka-Http 的 spray.json.JsObject 库用 Scala 编写)。我有架构的 json 海岸到海岸设计。

我在actor(scala代码)的范围内有JSON对象,并且想要一种通过V8Objects将这些对象传入和传出nodejs脚本的自然方式。我有将 json 对象作为字符串传递的代码,但每个脚本都需要执行 JSON.parse() 调用。

斯卡拉:

Javascript:

有没有办法使用 J2V8 API 更简单地在 Json 和 V8Objects 之间来回编组?

未来自我的注意事项:我正在探索 Scala 中的 J2V8 作为运行 Nashorn 以获得服务器端脚本支持的替代方案。使用 Nashorn,我发现 99% 的 javascript 库都无法工作,因为它们依赖于 DOM 对象。使用 V8 的 NodeJS 接口,我能够加载/使用标准节点模块,如 http/https 和加密。

0 投票
1 回答
434 浏览

javascript - j2v8:创建绑定对象的新实例

我们的团队目前正在考虑使用哪个 JavaScript Engine Bridge。我们在LiquidCoreJ2V8之间进行选择。我的问题是关于 j2v8。假设我必须在 JavaScript 中创建一些 java 类的几个实例,如何j2v8使用标准实例化注释(new ClassName())来实现这一点?在 Liquidcore 中,您可以使用超级构造函数绑定一些扩展JSFuction的类:

并使用所需的类名注册属性,如下所示:

然后打电话:

java方法methodName将触发,我们将获得新的instanceClass作为JSValue对象作为参数,已经绑定并准备好在javascript中使用。