在 Wildfly/JBoss 中使用 GraalVM(脚本)

Using GraalVM (scripting) within Wildfly/JBoss

我想使用 GraalVM(版本 22.0.0.2,Java 17.0.2)在 Wildfly(版本 26.0)中执行 Java脚本。

如果我有以下代码:

System.out.println("Polyglot class: "+PolyglotException.class);

然后我从 Eclise 开始的 JSE 单元测试工作正常。但是如果我在 Wildfly 中的 EAR 中调用相同的代码,我会得到一个

java.lang.ClassNotFoundException: org.graalvm.polyglot.PolyglotException

怎么了?我如何通知 Wildfly org.graalvm 类 可用?


解法:

感谢 ehsavoie 的提示!本来就有这样的想法,但是测试的时候做错了

您必须执行以下操作:

  1. 在你的文件中输入 jboss-dependendt-structure.xml 像这样的东西:

    <jboss-deployment-structure>
        <deployment>
            <dependencies>
                <module name="org.graalvm" export="true"/>
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    
  2. 在 `modules/org/graalvm/main/module.xml' 中定义一个文件,内容如下:

    <module name="org.graalvm" xmlns="urn:jboss:module:1.6">
        <properties>
            <property name="jboss.api" value="public"/>
        </properties>
        <dependencies>
            <system export="true">
                <paths>
                    <path name="org/graalvm/polyglot"/>
                    <!-- probably more packages will follow, but this is enough for the example -->
                </paths>
            </system>
        </dependencies>
    </module>
    

如果上面的例子有错别字,请见谅。我希望,未来的 Wildfly 版本可能会自动包含这样的文件。目前,我很高兴它能正常工作。

您必须在应用程序中添加对 org.graavml.polyglot 模块的依赖,或者像对模块 /sun/scripting/main/

所做的那样公开它