当前使用版本(必填,否则不予处理)

Springboot 版本:3.0.6 Graalvm 版本:graalvm-ce-java17-22.3.1 Mybatis 版本:3.5.13 MyBatisPlus 版本:3.5.3.1 MyBatisPlusJoin 版本:1.4.2.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

当把项目使用GraalVM编译后运行的时候报错。

重现步骤(如果有就写完整)

报错信息

java.lang.ExceptionInInitializerError: null
    at org.mybatis.spring.mapper.MapperScannerConfigurer.postProcessBeanDefinitionRegistry(MapperScannerConfigurer.java:363) ~[web.exe:na]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344) ~[na:na]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:145) ~[na:na]
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:747) ~[web.exe:6.0.8]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:565) ~[web.exe:6.0.8]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[web.exe:3.0.6]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[web.exe:3.0.6]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[web.exe:3.0.6]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[web.exe:3.0.6]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[web.exe:3.0.6]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[web.exe:3.0.6]
    at com.adil.bms.web.BmsApplication.main(BmsApplication.java:19) ~[web.exe:na]
Caused by: org.apache.ibatis.logging.LogException: Error creating logger for logger org.mybatis.spring.mapper.ClassPathMapperScanner.  Cause: java.lang.NullPointerException
    at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:54) ~[na:na]
    at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:47) ~[na:na]
    at org.mybatis.logging.LoggerFactory.getLogger(LoggerFactory.java:32) ~[na:na]
    at org.mybatis.spring.mapper.ClassPathMapperScanner.<clinit>(ClassPathMapperScanner.java:61) ~[na:na]
    ... 12 common frames omitted
Caused by: java.lang.NullPointerException: null
    at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:52) ~[na:na]
    ... 15 common frames omitted

Comment From: qmdx

暂不支持

Comment From: Bahramudin

@qmdx 谢谢回复!这个有支持的希望吗?如果可以的话,我们大概可以等多久?我们非常期待MyBatis及MyBatisPlus带有这个功能。谢谢!

Comment From: wssy001

可以先用mybatis-springboot-starterAOT相关配置可以参考这个项目Native Image 打包时个人建议开启 Tracing Agent ,避免不必要的报错

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>3.0.1</version>
</dependency>

@qmdx mybatis正式开始支持 Spring 3.x AOT 编译了,Mybatis Plus是不打算支持AOT 编译还是?

Comment From: Bahramudin

@wssy001 我就是用这个版本的,而且做了和那个参考项目一模一样的配置,还是一样的问题。很郁闷。。。

Comment From: huayanYu

可以先用mybatis-springboot-starterAOT相关配置可以参考这个项目Native Image 打包时个人建议开启 Tracing Agent ,避免不必要的报错

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.1</version> </dependency>

@qmdx mybatis正式开始支持 Spring 3.x AOT 编译了,Mybatis Plus是不打算支持AOT 编译还是?

会的话直接参与PR吧.

Comment From: wssy001

@wssy001 我就是用这个版本的,而且做了和那个参考项目一模一样的配置,还是一样的问题。很郁闷。。。

能否把项目 脱敏后 发到GitHub 并给我一个链接? 最好贴出具体的操作流程 @Bahramudin

Comment From: shihaoH

@wssy001 我就是用这个版本的,而且做了和那个参考项目一模一样的配置,还是一样的问题。很郁闷。。。

能否把项目 脱敏后 发到GitHub 并给我一个链接? 最好贴出具体的操作流程 @Bahramudin

@wssy001 谢谢老哥,用了你这个做法编译时没报错了,不过运行编译出的可执行文件时报错

Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
        at org.springframework.util.Assert.notNull(Assert.java:204)
        at org.mybatis.spring.support.SqlSessionDaoSupport.checkDaoConfig(SqlSessionDaoSupport.java:125)
        at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:73)
        at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
        ... 69 common frames omitted

项目在 nimblesupport-native-build 分支下

Comment From: wssy001

@shihaoH 如果完全放弃mybatis plus转向mybatis,请参考mybatis的官方wiki
如果想使用mybatis plusBaseMapperIService,可以参考我的回复

Comment From: wssy001

@huayanYu 我已经定位MP AOT编译失败的原因了,就是mybatis-plus-boot-starter:3.5.3.1 中依赖的mybatis版本过低导致的,只需将mybatis相关依赖升级至最新版,配合mybatis-spring-boot-starter的官方wiki就能顺利进行编译,希望MP团队能升级mybatis版本

Comment From: nieqiurong

5527 统一至此处讨论

Comment From: 865986682

当前使用版本(必填,否则不予处理)

Springboot 版本:3.0.6 Graalvm 版本:graalvm-ce-java17-22.3.1 Mybatis 版本:3.5.13 MyBatisPlus 版本:3.5.3.1 MyBatisPlusJoin 版本:1.4.2.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

当把项目使用GraalVM编译后运行的时候报错。

重现步骤(如果有就写完整)

报错信息

java.lang.ExceptionInInitializerError: null at org.mybatis.spring.mapper.MapperScannerConfigurer.postProcessBeanDefinitionRegistry(MapperScannerConfigurer.java:363) ~[web.exe:na] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344) ~[na:na] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:145) ~[na:na] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:747) ~[web.exe:6.0.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:565) ~[web.exe:6.0.8] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[web.exe:3.0.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[web.exe:3.0.6] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[web.exe:3.0.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[web.exe:3.0.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[web.exe:3.0.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[web.exe:3.0.6] at com.adil.bms.web.BmsApplication.main(BmsApplication.java:19) ~[web.exe:na] Caused by: org.apache.ibatis.logging.LogException: Error creating logger for logger org.mybatis.spring.mapper.ClassPathMapperScanner. Cause: java.lang.NullPointerException at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:54) ~[na:na] at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:47) ~[na:na] at org.mybatis.logging.LoggerFactory.getLogger(LoggerFactory.java:32) ~[na:na] at org.mybatis.spring.mapper.ClassPathMapperScanner.<clinit>(ClassPathMapperScanner.java:61) ~[na:na] ... 12 common frames omitted Caused by: java.lang.NullPointerException: null at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:52) ~[na:na] ... 15 common frames omitted

@Bahramudin 你好,这个问题解决了吗?

Comment From: Bahramudin

@865986682 还真没有解决,不知道怎么办?

Comment From: 865986682

@865986682 还真没有解决,不知道怎么办?

已经解决了,看这个 #5912 @Bahramudin