【问题标题】:Quarkus Building a Native Executable NoSuchFileException with -Dnative-image.docker-build=trueQuarkus 使用 -Dnative-image.docker-build=true 构建本机可执行 NoSuchFileException
【发布时间】:2019-09-12 05:45:00
【问题描述】:

构建失败

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

我关注了https://quarkus.io/guides/building-native-image-guide#creating-a-container

mvn package -Pnative -> success

[io.quarkus.creator.phase.nativeimage.NativeImagePhase] Running Quarkus native-image plugin on OpenJDK 64-Bit GraalVM CE 19.2.0
[io.quarkus.creator.phase.nativeimage.NativeImagePhase] /usr/lib/jvm/graalvm-ce-19.2.0/jre/bin/native-image -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dio.netty.leakDetection.level=DISABLED -J-Dvertx.disableDnsResolver=true -J-Dio.netty.noUnsafe=true -H:ReflectionConfigurationFiles=/shared_data/quarkus_jaxrs/reflection-config.json -H:ResourceConfigurationFiles=/shared_data/quarkus_jaxrs/resources-config.json --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar ph-quarkus-jwt-1.0-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:+PrintAnalysisCallTree -H:-AddAllCharsets -H:EnableURLProtocols=http,https --enable-all-security-services -H:NativeLinkerOption=-no-pie -H:-SpawnIsolates -H:+JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace


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

docker run -v /shared_data/quarkus_jaxrs/target:/project:z --rm --user 0:0 quay.io/quarkus/ubi-quarkus-native-image:19.1.1 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dio.netty.leakDetection.level=DISABLED -J-Dvertx.disableDnsResolver=true -J-Dio.netty.noUnsafe=true -H:ReflectionConfigurationFiles=/shared_data/quarkus_jaxrs/reflection-config.json -H:ResourceConfigurationFiles=/shared_data/quarkus_jaxrs/resources-config.json --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar ph-quarkus-jwt-1.0-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:+PrintAnalysisCallTree -H:-AddAllCharsets -H:EnableURLProtocols=http,https --enable-all-security-services -H:-SpawnIsolates -H:+JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace
Error: Invalid Path entry /shared_data/quarkus_jaxrs/reflection-config.json
Caused by: java.nio.file.NoSuchFileException: /shared_data/quarkus_jaxrs/reflection-config.json
> mvn package -Pnative -Dnative-image.docker-build=true ( running dockerised way) 
  -> docker run -v /shared_data/quarkus_jaxrs/target:/project .....
  -> 
Error: Invalid Path entry /shared_data/quarkus_jaxrs/reflection-config.json
Caused by: java.nio.file.NoSuchFileException: /shared_data/quarkus_jaxrs/reflection-config.json

> mvn package -Pnative ( running from graal vm locally installed )
  -> /usr/lib/jvm/graalvm-ce-19.2.0/jre/bin/native-image

两者都应该生成原始图像可执行文件。

【问题讨论】:

  • 您能分享一些有关您使用的操作系统的详细信息吗?另外,您使用的是什么 docker 版本?
  • 我正在使用操作系统 - “Ubuntu18.04 LTS (Bionic Beaver)” docker 版本 - 19.03.1
  • 这里有类似的版本,效果很好
  • 嗨,我认为正确的属性是 -Dquarkus.native.container-build=true

标签: java quarkus graalvm


【解决方案1】:

试试这个。

将反射配置.json 移至

src/main/resources/reflection-config.json

并像这样更改 pom.xml

      <plugin>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-maven-plugin</artifactId>
        <version>${quarkus.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>native-image</goal>
            </goals>
            <configuration>
              <enableHttpUrlHandler>true</enableHttpUrlHandler>
              <additionalBuildArgs>
                <additionalBuildArg>-H:ReflectionConfigurationFiles=classes/reflection-config.json</additionalBuildArg>
              </additionalBuildArgs>
            </configuration>
          </execution>
        </executions>
      </plugin>

【讨论】:

  • 现在文件位于我项目的根目录下。我使用 -H:ReflectionConfigurationFiles=${project.basedir}/reflection-config.json 我会给出一个按照建议尝试。
  • 按照建议,我移动了文件,并且使用 -Dnative-image.docker-build=true 构建很好。最初我关注quarkus doc 并尝试将资源放在项目根目录中。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多