springboot graalvm 打包踏坑记录。

本想使用Graalvm打包一个本地应用。

遇到问题挺多,

参考进行环境配置:

https://blog.csdn.net/q412086027/article/details/113878426

本次做个记录:

graalvm-ce-java11-21.0.0.2

下载这个,没想到电信网络下载几个小时,用手机WiFi下载却及时下下来了。

安装MSVS遇到的问题:
找不到Windows kit/10,只有8.1;

后续根据网上查找资源,是因为安装vs时选择的部署C盘,所以D:\Windows Kits\10\Lib\10.0.19041.0找不到,最终在D盘根目录下找到了。

D:\Windows Kits\10\Lib\10.0.19041.0
 

官方文档:学习graalVM知识。

https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/

配置Pom.xml文件:

修改springBoot版本:

<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>

添加依赖:

<dependency>
            <groupId>org.springframework.experimental</groupId>
            <artifactId>spring-native</artifactId>
            <version>0.9.1</version>
        </dependency>

添加profile:

<profiles>
        <profile>
            <id>native-image</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.graalvm.nativeimage</groupId>
                        <artifactId>native-image-maven-plugin</artifactId>
                        <version>21.0.0</version>
                        <configuration>
                            <!-- The native image build needs to know the entry point to your 
                                application -->
                            <mainClass>com.xxx.xxx.xxxApplication</mainClass>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>native-image</goal>
                                </goals>
                                <phase>package</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

需要注销:

spring-aot-maven-plugin,主要是报错。无法往下继续走了。

执行打包命令:顽固错误:

Error: Classes that should be initialized at run time got initialized during image building:
 org.springframework.util.unit.DataSize was unintentionally initialized at build time. To see why org.springframework.util.unit.DataSize got initialized use --trace-class-initialization=org.springframework.util.unit.DataSize

Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
Error: Image build request failed with exit status 1

根据上述提示信息:在pom.xml文件中找到参数位置,加入buildArgs参数:

<plugin>
				<groupId>org.graalvm.nativeimage</groupId>
				<artifactId>native-image-maven-plugin</artifactId>
				<version>21.0.0.2</version>
				<configuration>
					<skip>false</skip>
					<imageName>${project.artifactId}</imageName>
					<buildArgs>
						--no-fallback
						--initialize-at-build-time=org.springframework.util.unit.DataSize
						--initialize-at-build-time=org.slf4j.MDC
						--initialize-at-build-time=ch.qos.logback.classic.Level
						--initialize-at-build-time=ch.qos.logback.classic.Logger
						--initialize-at-build-time=ch.qos.logback.core.util.StatusPrinter
						--initialize-at-build-time=ch.qos.logback.core.status.StatusBase
						--initialize-at-build-time=ch.qos.logback.core.status.InfoStatus
						--initialize-at-build-time=ch.qos.logback.core.spi.AppenderAttachableImpl
						--initialize-at-build-time=org.slf4j.LoggerFactory
						--initialize-at-build-time=ch.qos.logback.core.util.Loader
						--initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
						--initialize-at-build-time=ch.qos.logback.classic.spi.ThrowableProxy
						--initialize-at-build-time=ch.qos.logback.core.CoreConstants
						--report-unsupported-elements-at-runtime
						--allow-incomplete-classpath
						-H:+ReportExceptionStackTraces
					</buildArgs>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>native-image</goal>
						</goals>
						<phase>package</phase>
					</execution>
				</executions>
			</plugin>

通过调试添加一下参数:--no-fallback
                        --initialize-at-build-time=org.springframework.util.unit.DataSize
                        --initialize-at-build-time=org.slf4j.MDC
                        --initialize-at-build-time=ch.qos.logback.classic.Level
                        --initialize-at-build-time=ch.qos.logback.classic.Logger
                        --initialize-at-build-time=ch.qos.logback.core.util.StatusPrinter
                        --initialize-at-build-time=ch.qos.logback.core.status.StatusBase
                        --initialize-at-build-time=ch.qos.logback.core.status.InfoStatus
                        --initialize-at-build-time=ch.qos.logback.core.spi.AppenderAttachableImpl
                        --initialize-at-build-time=org.slf4j.LoggerFactory
                        --initialize-at-build-time=ch.qos.logback.core.util.Loader
                        --initialize-at-build-time=org.slf4j.impl.StaticLoggerBinder
                        --initialize-at-build-time=ch.qos.logback.classic.spi.ThrowableProxy
                        --initialize-at-build-time=ch.qos.logback.core.CoreConstants
                        --report-unsupported-elements-at-runtime
                        --allow-incomplete-classpath
                        -H:+ReportExceptionStackTraces

在工程中调整JDK为

graalvm-ce-java11-21.0.0.2

注:环境中同时下载了

graalvm-ce-java11-21.0.0.2和graalvm-ee-java11-21.0.0.2,并在graalvm-ee-java11-21.0.0.2环境中安装了native-image。

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值