我遵循了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
根据要求,树的输出如下所示:
答案 0 :(得分:0)
Quarkus的-Dnative-image.docker-build=true
功能仅适用于 local 泊坞窗守护程序。
在您的情况下,您正在使用Minishift中的Docker守护进程和构建文件,因为Minishift VM中不存在构建工件。
更新
现在有一个Quarkus issue对此进行跟踪。
答案 1 :(得分:0)
我认为最好的方法是将创建应用程序映像的过程和实际编译过程结合到一个Dockerfile中。
您的Dockerfile应该包含3个阶段
第一步是如果应用程序存在编译问题++来构建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