琥珀是松科松属植物的树脂化石,其状态透明似水晶,色泽如玛瑙。不透明的琥珀又称蜜蜡。
自新石器时代开始,它的美就被人们赞誉。琥珀能制成各种装饰品,是从古至今备受重视的宝石。
JavaScript's a trap!
最初是为了方便使用 Java 和 JavaScript 做交叉编程,
对 GraalVM 的 polyglot 功能进行了一点微小的封装,
将一些初始化解释器和类型转换的样板代码封装成工厂方法以供使用.
由于 GraalJS 不支持 JVM 模块化,
不方便把这部分代码放在 Topaz 项目 里,
所以单独分离作为一个子项目.
现在应该可以支持运行 Graal 项目支持的各种脚本语言,
但是只有 JavaScript 和 Python 有经过测试.
代码基于 Java 21.
最新改动:
- 4.0.0
- 接口重做, 支持多语言脚本处理
未来特性:
- 支持加载 JavaScript ES 模块
<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/FirokOtaku/Amber</url>
</repository>
</repositories>
<dependencies>
<!-- 基础依赖 -->
<dependency>
<groupId>firok</groupId>
<artifactId>amber</artifactId>
<version>{VERSION}</version>
</dependency>
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>polyglot</artifactId>
<version>{VERSION}</version>
</dependency>
<!-- 需要什么语言和特性就加入什么 -->
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>js-community</artifactId>
<version>{VERSION}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>python-community</artifactId>
<version>{VERSION}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.graalvm.polyglot</groupId>
<artifactId>tools-community</artifactId>
<version>{VERSION}</version>
<type>pom</type>
</dependency>
</dependencies>
firok.amber.test.SimpleScriptProxyTests
内有基础示例调用代码.
请注意, 由于 GraalJS 的 Value.as
方法不能直接将 JavaScript Object 转换为 Java Object,
如果你需要映射的方法所返回 Java 类型, 目前已知两种方式可以实现:
- (推荐) 在 JavaScript 脚本中使用
Java.type()
等 API 先获取到 Java 类型, 然后对其实例化 - 从 JavaScript 脚本返回
JSON.stringify()
后的字符串, 然后在 Java 中使用 Jackson 或 GSON 等库转换为 Java 类型
详见 firok.amber.test.JavaTypeConvertTests
.