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

在M1 Mac上使用quarkus构建本机映像失败

温星华
2023-03-14

在我的项目的根目录中,我发出了以下命令来创建一个特定于我的操作系统的本机可执行文件。有关详细信息,请参阅以下指南

mvn package -Pnative -Dquarkus.native.container-build=true

这是输出。

[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< com.example:quarkus-spring >---------------------
[INFO] Building quarkus-spring 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- quarkus-maven-plugin:1.13.7.Final:generate-code (default) @ quarkus-spring ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ quarkus-spring ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ quarkus-spring ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- quarkus-maven-plugin:1.13.7.Final:generate-code-tests (default) @ quarkus-spring ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ quarkus-spring ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ quarkus-spring ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ quarkus-spring ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.example.controller.GreetingControllerTest
2021-06-22 21:17:05,339 WARN  [io.qua.dat.dep.dev.DevServicesDatasourceProcessor] (build-10) Unable to determine a database type for default datasource
2021-06-22 21:17:05,340 WARN  [io.qua.agr.dep.AgroalProcessor] (build-16) The Agroal dependency is present but no JDBC datasources have been defined.
2021-06-22 21:17:06,080 INFO  [io.quarkus] (main) Quarkus 1.13.7.Final on JVM started in 1.004s. Listening on: http://localhost:8081
2021-06-22 21:17:06,081 INFO  [io.quarkus] (main) Profile test activated.
2021-06-22 21:17:06,081 INFO  [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, hibernate-orm-panache, mongodb-client, mutiny, narayana-jta, resteasy, smallrye-context-propagation, spring-boot-properties, spring-data-jpa, spring-data-rest, spring-di]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.755 s - in com.example.controller.GreetingControllerTest
2021-06-22 21:17:06,699 INFO  [io.quarkus] (main) Quarkus stopped in 0.020s
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ quarkus-spring ---
[INFO]
[INFO] --- quarkus-maven-plugin:1.13.7.Final:build (default) @ quarkus-spring ---
[INFO] [org.jboss.threads] JBoss Threads version 3.2.0.Final
[WARNING] [io.quarkus.agroal.deployment.AgroalProcessor] The Agroal dependency is present but no JDBC datasources have been defined.
[INFO] [org.hibernate.Version] HHH000412: Hibernate ORM core version 5.4.29.Final
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building native image source jar: /Users/viswanath/projects/quarkus-spring/target/quarkus-spring-1.0-SNAPSHOT-native-image-source-jar/quarkus-spring-1.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building native image from /Users/viswanath/projects/quarkus-spring/target/quarkus-spring-1.0-SNAPSHOT-native-image-source-jar/quarkus-spring-1.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildContainerRunner] Using docker to run the native image builder
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildContainerRunner] Checking image status quay.io/quarkus/ubi-quarkus-native-image:21.0-java11
21.0-java11: Pulling from quarkus/ubi-quarkus-native-image
Digest: sha256:356624049da5f564e14acbaf167a341a01b332569db83e9967b1e72cfdf06653
Status: Image is up to date for quay.io/quarkus/ubi-quarkus-native-image:21.0-java11
quay.io/quarkus/ubi-quarkus-native-image:21.0-java11
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 21.0.0.2 (Java Version 11.0.10+8-jvmci-21.0-b06)
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildRunner] docker run --env LANG=C --rm -v /Users/viswanath/projects/quarkus-spring/target/quarkus-spring-1.0-SNAPSHOT-native-image-source-jar:/project:z quay.io/quarkus/ubi-quarkus-native-image:21.0-java11 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-DCoordinatorEnvironmentBean.transactionStatusManagerEnable=false -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=1 -J-Duser.language=en -J-Duser.country=GB -J-Dfile.encoding=UTF-8 --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy\$BySpaceAndTime -H:+JNI -H:+AllowFoldMethods -jar quarkus-spring-1.0-SNAPSHOT-runner.jar -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -J-Xmx8192m -H:-AddAllCharsets -H:EnableURLProtocols=http,https --enable-all-security-services --no-server -H:-UseServiceLoaderFeature -H:+StackTrace quarkus-spring-1.0-SNAPSHOT-runner
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
^C%

本机映像生成失败,因为构建刚刚挂起。

我选择在主机上安装Graal VM,并选择非基于容器的方法,如下所示。

>

❯ brew安装——cask GRALVM/tap/GRALVM-ce-lts-java11

将Graal VM添加到JEnv管理的Java版本

❯ jenv add/Library/Java/JavaVirtualMachines/graalvm-ce-lts-java11-20.3.1/Contents/Home-graalvm64-11.0.10已添加

对于项目,设置GraalVM的Java11。在项目的目录中,发出以下命令

jenv本地graalvm64-11.0.10

将GRALVM_HOME环境变量设置为GRALVM安装目录。将以下内容添加到~/。zshrc

❯ export-GRAALVM_HOME=/Library/Java/JavaVirtualMachines/GRAALVM-ce-lts-java11-20.3.1/Contents/HOME

并重新加载对所做的更改。通过发出命令

❯ source ~/.zshrc

>

  • 使用以下命令安装本机映像工具。GraalVM的一些早期版本默认包含本机图像工具。现在已经不是这样了;安装GraalVM后,必须将其作为第二步进行安装。

    ❯ ${GRAALVM_HOME}/bin/gu安装本机映像

    安装binutils并将其添加到路径

    ❯ brew安装binutils

    ❯ echo'export PATH=“/opt/homebrew/opt/binutils/bin:$PATH”

    使用项目根目录中的以下caommand创建本地可执行文件

    mvn干净安装-Pynal-Dnative-image.docker-build=true-Dquarkus.native.native-Image-xmx=4g

    最后,当我运行本机映像时,它失败了。

    ❯ ~/projects/quarkus-spring/target ./quarkus-spring-1.0-SNAPSHOT-runner                                      
    [1]    11638 killed     ./quarkus-spring-1.0-SNAPSHOT-runner
    

    有什么帮助吗?

  • 共有1个答案

    谷梁凌
    2023-03-14

    留档解释了-Dquarkus.native.container-build=true选项意味着您想要构建一个Linux可执行文件,并且构建应该在容器中进行。您甚至可以通过以下方式控制Docker/Podman的运行时:

    # Docker
    ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=docker
    # Podman
    ./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman
    

    这很可能是因为它是Linux二进制文件,所以上一个命令之后,可执行文件无法在MacOS上运行的原因。您可以通过以下方式进行检查:

    file ./quarkus-spring-1.0-SNAPSHOT-runner
    

    虽然在命令行中使用“-Dquarkus.native.docker build=true”而不是“-Dquarkus.native.container build.true”,我不知道是否有任何关联。

     类似资料:
    • 我有以下简化设置: 4)应用程序.属性 当我使用本机maven配置文件(mvn clean package-pnative)运行该文件时,我得到: 使用--report-unsupport-elements-at-runtime运行它也没有太大帮助。当我删除MyEntity类时,它在Mac+GRAALVM-CE-Java11-20.0.0上成功地编译为本机可执行文件

    • 有可能在Java 16下构建本机Quarkus映像吗?没有找到任何操作说明。 不知何故,这应该是可能的,因为Oracle发布了对Java16的GraalVM支持(https://www.graalvm.org/release-notes/21_1/)

    • 我正在构建一个夸克原生可执行映像,但由于未知参数,它失败了。我在属性文件中使用了变量,但它不起作用。 我正在使用java 11。可以 有人有任何想法吗?谢谢!!!

    • 当我建立一个本土形象时,我面临着一个反思的问题 通用域名格式。神谕svm。主持。代替DeletedElementException:不支持的java字段。朗,同学们。newInstanceCallerCache是可访问的:此元素的声明类已被替换,但替换类中不存在此元素 我该怎么修?我的环境GraalVM 20和Zulu OpenJdk11 我的pom

    • Quarkus文档解释了如何使用Maven构建docker映像。但我在利用Gradle和Kotlin。我正在想办法做这些步骤: 首先,我想我想要一个包含gradle而不是maven的图像(Quay.io似乎没有)。然后,我必须考虑我还需要复制什么(而不是pom.xml),也许???其次,我相信这个图像也包含了GraalVM。所以我不确定我能在那里做些什么。 我必须使用Maven吗?我真的真的不想。

    • 在使用amazon sdk的实现与amazon Rekognion和amazon Understand工具进行交互后,它在开发人员(mvn compile quarkus:dev)上运行得非常好,但在尝试进行REST Web服务的本机编译时崩溃,该服务是使用以下技术开发的; GraalVM CE 22.0.0.2。 Quarkus框架(Quarkus bom.io.Quarkus.platform