0

我按照build quarkus native executable的步骤进行操作。

1.引导项目:

mvn io.quarkus:quarkus-maven-plugin:0.11.0:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=getting-started \
-DclassName="org.acme.quickstart.GreetingResource" \
-Dpath="/hello"

2.在minishift中使用docker

minishift start
eval $(minishift docker-env)

3.生成包:

mvn package -Pnative -Dnative-image.docker-build=true

失败并出现以下错误跟踪:

[INFO] [io.quarkus.creator.phase.nativeimage.NativeImagePhase] docker run -v /Users/.../quarkus/getting-started/target:/project:z --rm swd847/centos-graal-native-image-rc12 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar getting-started-1.0-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:+PrintAnalysisCallTree -H:EnableURLProtocols=http -H:-SpawnIsolates -H:-JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace
Error: Invalid Path entry getting-started-1.0-SNAPSHOT-runner.jar
Caused by: java.nio.file.NoSuchFileException: /project/getting-started-1.0-SNAPSHOT-runner.jar

根据要求,树输出如下所示:

在此处输入图像描述

4

2 回答 2

0

我认为最好的方法是将创建应用程序映像的过程和实际编译合并到一个 Dockerfile 中。

你的 Dockerfile 应该包含 3 个阶段

  • 构建 Java 应用程序
  • 构建原生镜像
  • 构建最终的 Docker 镜像

如果应用程序有编译问题 ++ 构建 jar 文件,第一阶段是快速失败

第二阶段是通过 native-image 命令从 jar + libs 生成本机映像,或者如果您使用包含 maven 和 graalvm 的映像,则可以使用“mvn -Pnative verify”。

第三阶段是基于编译好的原生镜像和alpine或fedora-minimal等最小基础镜像构建最终的Docker镜像

构建应用程序的示例 ++ 构建本机映像 ++ 构建最终的 Docker 映像 - https://github.com/quarkusio/quarkus-quickstarts/blob/master/getting-started-knative/Dockerfile

于 2019-05-14T14:07:16.677 回答
0

Quarkus的-Dnative-image.docker-build=true功能仅适用于本地docker守护进程。

在您的情况下,您正在使用 Minishift 中的 Docker 守护程序和构建文件,因为构建工件不存在于 Minishift VM 中。

更新

现在有一个跟踪此问题的 Quarkus问题

于 2019-03-18T07:34:45.903 回答