我正在创建一个 java/groovy 应用程序,它还支持通过 groovy 编写脚本。有很多遗留的 Java 代码和用 Groovy 编写的新部分。除此之外,该应用程序还可以使用 groovy 编写脚本。
我可以让所有东西都在 VM 下运行,并像过去一样混淆 jar 中的符号 - 没问题。但:
我正在评估使用 GraalVM 创建本机二进制文件,但问题是它如何与在运行时运行外部 groovy 脚本兼容?graal 是否保留类和方法的符号信息,以及方法调用的数据交换如何从脚本处理到本机?我不确定这是否会奏效。
从过去的类似项目中,我知道在大多数情况下,本机编译会去除任何符号的二进制文件。我还需要这个功能来代替混淆。计划是为某些方法和对象保留符号,这些符号只允许由外部 groovy 脚本访问。
澄清:这尤其与 GroovyScriptEngine 和 CroovyClassLoader 有关。此处为第 1.3 和 1.4 节。
与 groovy VM 相比,GraalVM 的内存模型如何编译 groovy?如果我在运行时加载一个类并将一个从本机端创建的对象 foo 传递给它,那么脚本是否可以正常工作并能够正常使用成员,甚至可以对 foo 进行反射?
谢谢您的帮助。