繁体   English   中英

Spring 启动 NativeImage 编译失败:“找不到目标方法:私有 org.springframework.boot.Banner”

[英]Spring Boot NativeImage compilation fails on: "Could not find target method: private org.springframework.boot.Banner"

我在编译 Spring 启动应用程序时遇到问题。

TL;DR: Error: Could not find target method: private org.springframework.boot.Banner org.springframework.nativex.substitutions.boot.Target_SpringApplicationBannerPrinter.getImageBanner(org.springframework.core.env.Environment)

我在用着:

  • graalvm-ce-java17-linux-amd64-22.3.1
  • Spring 启动 3.0.2
  • Buildpack gcr.io/paketo-buildpacks/bellsoft-liberica:9.10.3

pom.xml插件配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <buildpacks>
                            <buildpack>gcr.io/paketo-buildpacks/bellsoft-liberica:9.10.3</buildpack>
                            <buildpack>gcr.io/paketo-buildpacks/java-native-image</buildpack>
                        </buildpacks>
                    </image>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

.gitlab-ci.yml

stages:
  - build

build:
  stage: build
  image:
    name: maven:3-eclipse-temurin-17-focal
  before_script:
    - set -e
    - apt-get update
    - apt-get -y install wget build-essential zlibc zlib1g zlib1g-dev upx-ucl 
    - wget -q https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.1/graalvm-ce-java17-linux-amd64-22.3.1.tar.gz
    - tar xzf graalvm-ce-java17-linux-amd64-22.3.1.tar.gz
    - mkdir -p /usr/lib/jvm
    - mv graalvm-ce-java17-22.3.1 /usr/lib/jvm/graalvm
    - export PATH=/usr/lib/jvm/graalvm/bin/:$PATH
    - export JAVA_HOME=/usr/lib/jvm/graalvm
    - gu install native-image
    - java --version
    - native-image --version
  script:
    - ./compile.sh
  artifacts:
    expire_in: 1 days
    paths:
     - ${CI_PROJECT_DIR}/target/app-0.0.1-SNAPSHOT.jar
     - ${CI_PROJECT_DIR}/target/app

compile.sh

#!/bin/bash

set -e
mvn -Pnative spring-boot:build-image

rm -rf target/native
mkdir -p target/native
cd target/native
jar -xvf ../app-0.0.1-SNAPSHOT.jar
touch META-INF/native-image/argfile

native-image -H:Name=app \
@META-INF/native-image/argfile \
-H:+ReportExceptionStackTraces \
-H:TraceClassInitialization=true \
-H:IncludeResources=".*" \
--initialize-at-build-time=\
com.fasterxml.jackson.annotation.JsonProperty\
,org.slf4j.impl.StaticLoggerBinder\
,org.slf4j.LoggerFactory\
,org.slf4j.simple.SimpleLogger\
,ch.qos.logback.classic.Logger\
,ch.qos.logback.core.spi.AppenderAttachableImpl\
,ch.qos.logback.core.status.StatusBase\
,ch.qos.logback.classic.Level\
,ch.qos.logback.core.status.InfoStatus\
,ch.qos.logback.classic.PatternLayout\
,ch.qos.logback.core.CoreConstants\
,ch.qos.logback.core.pattern.parser.Parser \
-cp .:BOOT-INF/classes:`find BOOT-INF/lib | tr '\n' ':'`

mv app ../

从 JAR 运行时应用程序工作正常。但编译崩溃:

Error: Could not find target method: private org.springframework.boot.Banner org.springframework.nativex.substitutions.boot.Target_SpringApplicationBannerPrinter.getImageBanner(org.springframework.core.env.Environment)

完整 output:

[INFO]     [creator]     Paketo Buildpack for Native Image 5.8.0
[INFO]     [creator]       https://github.com/paketo-buildpacks/native-image
[INFO]     [creator]       Build Configuration:
[INFO]     [creator]         $BP_BINARY_COMPRESSION_METHOD                Compression mechanism used to reduce binary size. Options: `none` (default), `upx` or `gzexe`
[INFO]     [creator]         $BP_NATIVE_IMAGE                       true  enable native image build
[INFO]     [creator]         $BP_NATIVE_IMAGE_BUILD_ARGUMENTS             arguments to pass to the native-image command
[INFO]     [creator]         $BP_NATIVE_IMAGE_BUILD_ARGUMENTS_FILE        a file with arguments to pass to the native-image command
[INFO]     [creator]         $BP_NATIVE_IMAGE_BUILT_ARTIFACT              the built application artifact explicitly, required if building from a JAR
[INFO]     [creator]       Native Image: Contributing to layer
[INFO]     [creator]         Executing native-image -H:+StaticExecutableWithDynamicLibC -H:Name=/layers/paketo-buildpacks_native-image/native-image/cloud.mwapp.app.appApplication -cp /workspace:/workspace/BOOT-INF/classes:/workspace/BOOT-INF/lib/logback-classic-1.4.5.jar:/workspace/BOOT-INF/lib/logback-core-1.4.5.jar:/workspace/BOOT-INF/lib/log4j-to-slf4j-2.19.0.jar:/workspace/BOOT-INF/lib/log4j-api-2.19.0.jar:/workspace/BOOT-INF/lib/jul-to-slf4j-2.0.6.jar:/workspace/BOOT-INF/lib/jakarta.annotation-api-2.1.1.jar:/workspace/BOOT-INF/lib/snakeyaml-1.33.jar:/workspace/BOOT-INF/lib/jackson-databind-2.14.1.jar:/workspace/BOOT-INF/lib/jackson-annotations-2.14.1.jar:/workspace/BOOT-INF/lib/jackson-core-2.14.1.jar:/workspace/BOOT-INF/lib/jackson-datatype-jdk8-2.14.1.jar:/workspace/BOOT-INF/lib/jackson-datatype-jsr310-2.14.1.jar:/workspace/BOOT-INF/lib/jackson-module-parameter-names-2.14.1.jar:/workspace/BOOT-INF/lib/tomcat-embed-core-10.1.5.jar:/workspace/BOOT-INF/lib/tomcat-embed-el-10.1.5.jar:/workspace/BOOT-INF/lib/tomcat-embed-websocket-10.1.5.jar:/workspace/BOOT-INF/lib/spring-web-6.0.4.jar:/workspace/BOOT-INF/lib/spring-beans-6.0.4.jar:/workspace/BOOT-INF/lib/micrometer-observation-1.10.3.jar:/workspace/BOOT-INF/lib/micrometer-commons-1.10.3.jar:/workspace/BOOT-INF/lib/spring-webmvc-6.0.4.jar:/workspace/BOOT-INF/lib/spring-aop-6.0.4.jar:/workspace/BOOT-INF/lib/spring-context-6.0.4.jar:/workspace/BOOT-INF/lib/spring-expression-6.0.4.jar:/workspace/BOOT-INF/lib/slf4j-api-2.0.6.jar:/workspace/BOOT-INF/lib/jakarta.xml.bind-api-4.0.0.jar:/workspace/BOOT-INF/lib/jakarta.activation-api-2.1.1.jar:/workspace/BOOT-INF/lib/spring-core-6.0.4.jar:/workspace/BOOT-INF/lib/spring-jcl-6.0.4.jar:/workspace/BOOT-INF/lib/spring-boot-3.0.2.jar:/workspace/BOOT-INF/lib/spring-boot-autoconfigure-3.0.2.jar:/workspace/BOOT-INF/lib/springdoc-openapi-starter-webmvc-ui-2.0.2.jar:/workspace/BOOT-INF/lib/springdoc-openapi-starter-webmvc-api-2.0.2.jar:/workspace/BOOT-INF/lib/springdoc-openapi-starter-common-2.0.2.jar:/workspace/BOOT-INF/lib/swagger-core-jakarta-2.2.7.jar:/workspace/BOOT-INF/lib/swagger-annotations-jakarta-2.2.7.jar:/workspace/BOOT-INF/lib/swagger-models-jakarta-2.2.7.jar:/workspace/BOOT-INF/lib/swagger-ui-4.15.5.jar:/workspace/BOOT-INF/lib/webjars-locator-core-0.52.jar:/workspace/BOOT-INF/lib/classgraph-4.8.149.jar:/workspace/BOOT-INF/lib/springdoc-openapi-native-1.6.14.jar:/workspace/BOOT-INF/lib/springdoc-openapi-common-1.6.14.jar:/workspace/BOOT-INF/lib/swagger-core-2.2.7.jar:/workspace/BOOT-INF/lib/commons-lang3-3.12.0.jar:/workspace/BOOT-INF/lib/jackson-dataformat-yaml-2.14.1.jar:/workspace/BOOT-INF/lib/swagger-annotations-2.2.7.jar:/workspace/BOOT-INF/lib/swagger-models-2.2.7.jar:/workspace/BOOT-INF/lib/jakarta.validation-api-3.0.2.jar:/workspace/BOOT-INF/lib/spring-native-0.12.1.jar:/workspace/BOOT-INF/lib/spring-boot-jarmode-layertools-3.0.2.jar cloud.mwapp.app.appApplication
[INFO]     [creator]     ================================================================================
[INFO]     [creator]     GraalVM Native Image: Generating '/layers/paketo-buildpacks_native-image/native-image/cloud.mwapp.app.appApplication' (static executable)...
[INFO]     [creator]     ================================================================================
[INFO]     [creator]     
[INFO]     [creator]     [1/7] Initializing...                                            (0.0s @ 0.27GB)
[INFO]     [creator]     Error: Could not find target method: private org.springframework.boot.Banner org.springframework.nativex.substitutions.boot.Target_SpringApplicationBannerPrinter.getImageBanner(org.springframework.core.env.Environment)
[INFO]     [creator]     Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
[INFO]     [creator]     --------------------------------------------------------------------------------
[INFO]     [creator]          0.8s (5.5% of total time) in 8 GCs | Peak RSS: 0.62GB | CPU load: 1.91
[INFO]     [creator]     ================================================================================
[INFO]     [creator]     Failed generating '/layers/paketo-buildpacks_native-image/native-image/cloud.mwapp.app.appApplication' after 12.8s.
[INFO]     [creator]     Error: Image build request failed with exit status 1
[INFO]     [creator]     unable to invoke layer creator
[INFO]     [creator]     unable to contribute native-image layer
[INFO]     [creator]     error running build
[INFO]     [creator]     exit status 1
[INFO]     [creator]     ERROR: failed to build: exit status 1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:23 min
[INFO] Finished at: 2023-01-30T12:40:18Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.0.2:build-image (default-cli) on project app: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:3.0.2:build-image failed: Builder lifecycle 'creator' failed with status code 51 -> [Help 1]

我坚持这一点,无法弄清楚。 有人可以告诉我吗?

org.springframework.nativex.substitutions.boot.Target_SpringApplicationBannerPrinter class 来自Spring Native 实验项目 Spring Native 仅兼容 Spring Boot 2.7,不应与 Spring Boot 3.0 一起使用。 Spring Framework 6.0 和 Spring Boot 3.0 内置了GraalVM 本机可执行功能

从您的应用程序中删除 Spring 本机依赖项并按照 Spring Boot 3 文档进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM