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

Quarkus构建本机可执行文件NoSuchFileException:/project

阮才俊
2023-03-14

我遵循了构建quarkus本机可执行文件的步骤。

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

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

共有2个答案

傅阳炎
2023-03-14

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

Dockerfile应该包含3个阶段

  • 构建java应用程序
  • 打造原生形象
  • 构建最终的Docker形象

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

第二阶段是从jar库中通过本机图像命令生成本机图像,或者如果您使用的图像同时包含maven和graalvm,您可以使用“mvn-Pnm验证”。

第三阶段是基于编译后的本机映像和最小基础映像(例如alpine或fedora-最小)构建最终的Docker映像

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

拓拔弘扬
2023-03-14

-Dnative图像。Quarkus的docker build=true功能将仅适用于本地docker守护程序。

在您的例子中,您使用的是Minishift中的Docker守护程序和构建文件,因为构建工件不在Minishift VM中。

使现代化

现在有一个Quarkus问题跟踪这一点。

 类似资料:
  • 构建失败 我跟着https://quarkus.io/guides/building-native-image-guide#creating-a-container. 这两种方法都会产生朴素的图像可执行文件。

  • 我尝试使用docker构建一个Quarkus本机可执行文件,使用以下命令““ Quarkus版本:2.2.1.最终Maven版本:3.8.1Java版本:11

  • 我正在使用多阶段Docker构建构建Quarkus本机可执行文件,如Quarkus-构建本机可执行文件中所述 我的项目只包含了——示例,其中添加了一些ORM功能(因此没有太多依赖项)。构建工作正常,但我的问题是,它在构建期间会消耗大量内存。这意味着最高可达6Gib。在我看来,构建时间也很长(总共约4-6分钟)。 当我在构建我们的CI/CD基础设施时,问题就开始了。我们没有那么多内存,因此生成失败,

  • 我正在尝试为一个使用Quarkus和JavaFx的应用程序构建一个本机可执行文件。我实现这一点的唯一方法是将许多javaFx类标记为——在运行时初始化,但这导致在尝试启动应用程序时失败,并显示以下消息: 我想我需要在构建之前添加javafx模块,但不知道如何从Maven实现这一点。如果有人能帮助我,我将非常感激。提前谢谢。 PS:如果有人知道使用springboot的替代解决方案,请分享:) 更新

  • 我想使用pyInstaller的单文件夹模式,但我不想每次都收集所有依赖项。 大多数情况下,我可以重用它以前打包的所有依赖项,我只需要可执行文件,我想如果我能在构建过程中尽快停止,我会在构建过程中节省10~20分钟。exe文件已生成。 我知道用-F标志将所有依赖项打包到一个可执行文件中,但这不是我想要的。我只希望pyInstaller在打包步骤之前停止。 我希望生成在可能输出时立即停止:

  • 问题内容: 我已经成功构建了使用本机(JNI)库的Android应用(GUI)。 但是,现在我想创建一个从命令行运行的可执行文件(root特权),并且根本不使用GUI。我该如何构建类似的东西? 问题答案: 从NDK r8d开始,这可以通过更简单的方式解决。 创建具有以下目录层次结构的项目: 使用以下内容填写Android.mk。最重要的是最后一行。检查NDK文档中其他变量的含义。 转到目录,然后键