当前位置: 首页 > 知识库问答 >
问题:

使用自定义类路径运行GraalVM本机映像命令行?

魏晨
2023-03-14

我在一个项目中,目前构建了26个JAR(+6如果我们算上仅测试的JAR)。出于性能原因,我们希望将它们全部组合到单个可执行文件中。这是在windows机器上,具有graalvm-ce-java11-20.0.0。我们在用IntelliJ和Gradle。我现在只是想出一个命令行,在我尝试在Gradle中复制它之前,它甚至可以工作一点点。Gradle还不在图片中,因此缺少适当的标记。

我想尽了一切办法来度过我的第一次缺课,但都没有结果。这给我的打击是一个基本的东西,我太接近和看不到森林,由于所有三次诅咒的树木在路上。

我目前在graalvm/bin文件夹中有所有的jar。那应该会很容易,对吧?没那么多。

我正在尝试构建jar D,使用来自(其他地方)的类,jar a.foo.bar.a.p是它找不到的第一个类,这将它踢出或退回构建。

我尝试了目录的相对路径:native-image-cp./-jar d

我尝试了目录的完整路径:native-image-cp c:/foo/bar/baz-jar d

我尝试了问题中的jar的完整路径:native-image-cp c:/graalvm/bin/a.jar-jar d

我已经尝试了类路径的所有别名:

  • native-image-cp...-jar d
  • native-image-classpath...-jar d
  • 本机映像--类-路径...-jar d

我甚至尝试通过Gradle的jar{manifest{attributes:(“class-path”:“...”)}}向d.jar的manifest.mf添加类路径。这与工作的“main-class”:“foo.bar.d.baz”属性在同一位置。

我只是发生在一个本机映像自动忽略的目录上(它是自己的bin文件夹吗?)让我们一探究竟!不,那也没用。

注意,这里我没有尝试所有可能的组合/排列。--class-path包含X、Y,但不包含z。

我错过了什么?如果有人能发布一个众所周知的好的命令行(理想情况下适用于windows),我会非常感激的。

共有1个答案

岳时铭
2023-03-14

要尝试的第一件事是让命令行在没有本机映像的情况下工作,只需使用普通的Java。

Java启动器所做的类似,native-image不支持混合-jar-cp。如果您传递-jar,它将重写类路径,并且-cp参数将被忽略。

您可以避免使用-jar,只需传递主类的名称:

native-image -cp ...;D foo.bar.D.baz

(我在这里假设d是jar的完整路径)

JAR中的class-path属性应该可以工作(在这种情况下,您不需要传递-cp),但是您需要注意如何解析该属性中的路径:它们将相对于包含该属性的JAR的位置进行解析。

 类似资料:
  • 我正在尝试使用GraalVM为spring cloud gateway构建本机映像。我已经成功构建了一个可以启动的本机映像,但在第一个http请求时,我出现了以下错误: 添加此标志没有帮助 并在反射配置中添加一个条目,不是吗 该项目可以在这里找到:https://github.com/hanouard/demo-native-gateway 你知道是什么导致了这个错误吗?

  • 我正在尝试用Dockers创建一个GraalVM本地映像。我已经创建了一个Micronaut项目,并成功创建了jar应用程序,并在docker中运行;此外,我已经用这个jar文件创建了一个GraalVM本机映像,现在可以运行这个应用程序,但我需要在docker中运行一个GraalVM本机映像,在论坛中寻找答案。我发现有必要在docker中构建本机映像。因此我尝试了这个docker文件: 它不会抛出

  • 我正在尝试运行一个Java类作为gradle任务。 我已将此添加到我的: 但是,当我在命令行上运行时,它会失败并出现以下错误: 因此,我在我的任务中添加了一个类路径,如问题中所述: 然而,这是一个大型的遗留项目,具有非常长的类路径,所以当我运行< code > gradle download keystore 时,我得到了另一个错误: 所以我在中修改了我的,现在看起来像这样: 这适用于命令行,但是

  • 失败:生成失败,出现异常。 错误:执行任务“:QuarkusBuild”失败。Io.Quarkus.Builder.BuildException:生成失败:由于错误导致生成失败[error]:生成步骤Io.Quarkus.Deployment.Pkg.Steps.NativeImageBuildStep#Build引发异常:java.lang.RuntimeException:未能在io.Quar

  • 我正在试验在GraalVM本机映像中从Java代码运行JS脚本。 Java代码如下所示: JS代码只是通过调用对象上的一个方法来尝试使用它,例如: 当在GraalVM中运行时,这项功能有效,但当创建本机映像时,它会失败,并出现以下错误: 如果我只是像在

  • 我想添加hbase类路径到我的火花,但我得到了错误,当我运行命令。 我在env中使用java 1.8在本地设置了hadoop 3.2.0。 $hbase类路径 /usr/lib/hadoop/libexec/hadoop函数。sh:第2364行:HADOOP_ORG。阿帕奇。HADOOP。HBASE。UTIL。GETJAVAPROPERTY_USER:变量名/usr/lib/hadoop/libe