我正在GraalVM上运行Java 15应用程序中的JavaScript代码。这是一个在Tomee上运行的Web应用程序。它运行得很好,现在我还需要用GraalVM运行Python代码。
我需要在pom.xml中包含哪些库?我在这里看到几个:
https://mvnrepository.com/artifact/org.graalvm.python
这就是我今天在pom.xml中的内容:
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>22.1.0.1</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>22.1.0.1</version>
</dependency>
字符串
我应该从graal.js更改为graal.sdk吗?我希望能够使用相同的引擎运行JavaScript或Python。
2条答案
按热度按时间x6h2sr281#
编辑:
对于JDK < 21,GraalPy(GraalVM上的Python)没有任何Maven工件。此外,对于JDK < 21,GraalPy的先前版本不会被维护。最重要的是JDK 15已经过时了,所以“I hope this is not an important system”;-)
但是,您可以使用较旧的GraalVM版本,理想情况下是仍然受支持的LST,例如,截至目前为21.3。您可以选择基于JDK 17或JDK 11的GraalVM 21.3。可能还有其他一些基于JDK 15的不受支持的GraalVM版本。然后为给定的GraalVM下载GraalPy(https://github.com/oracle/graalpython/releases)并使用
$GRAALVM_HOME/bin/gu install -F the-graalpython-release.jar
安装它。然后你使用GraalVM安装作为你的JDK(即$JAVA_HOME)。GraalPy将“只是”开箱即用。不需要任何依赖关系。你可以为JavaScript做同样的事情。如果您可以将Java升级到21或更高版本:
你想要在Java中嵌入Python的是:
org.graalvm.polyglot:python-community
(https://mvnrepository.com/artifact/org.graalvm.polyglot/python-community)或org.graalvm.polyglot:python
(https://mvnrepository.com/artifact/org.graalvm.polyglot/python)用于GraalPy Enterprise。这些是mata-pom,包含了
org.graalvm.python
组和其他地方的所有必要依赖项。因此,您的pom.xml
应该如下所示:字符串
然后你可以做一些事情,比如:
型
看起来你正在通过脚本引擎API使用JavaScript。Python不支持这一点。你可以找到一些脚本引擎实现的例子,但推荐的方法是使用
Context
API。它与语言无关,所以你可以将它用于Python和JavaScript。m4pnthwp2#
检查
oracle/graal
问题6852是否有帮助:我们正在寻找来自Java开发人员的反馈,他们使用org.graalvm.polyglot API在Java中嵌入语言,如JavaScript,Python,Ruby,Espresso,WebAssembly,LLVM等。(9月发布)将对Java应用程序的嵌入方式进行一些重大更改。(例如,gu install python)。在23.1之后,这将不再可能。您需要从Maven Repository下载工件并使用模块路径运行它们。
为了阐明这是如何工作的,这里有一个包含Python的新Maven配置的简短示例。
字符串
**注意:**如果你想要所有这些组件的开源版本,你需要将工件名称更改为python-community和tools-community。
**注意:**我们还将org.graalvm.sdk模块(graal-sdk.jar)分解为几个部分:nativeimage、polyglot、word和collections。我们仍将在下一版本中部署此模块的弃用版本,以免破坏您的代码。
这将说明您可以在pom.xml中测试的依赖关系类型。
这也将指出GraalVM updater
gu
,一个用于安装和管理可选GraalVM语言运行时和实用程序的命令行工具,它可以在您的情况下帮助maven依赖项不可用。是的,我试过这个,但它没有工作,似乎它只支持Java 21?
此外,我不确定如何将GraalVM更新程序应用于Tomee中的Myjar文件。
也许可以检查一下“tomitribe/graalvm-microprofile“中描述的过程是否可以给予一些想法,因为它确实提到(4年前,在Java 21之前)使用
gu install python
在GraalVM中安装Python语言。但是:我不确定如何将GraalVM更新程序应用于Tomee server环境中的JAR文件。通常,GraalVM更新程序用于在GraalVM安装中安装或更新语言和工具。但是,将其集成到JAR部署中需要在JAR文件中打包正确版本的库和脚本。
作为替代方法,您可以考虑: