直接在IDEA运行Jar包没问题,但用java -jar 的命令就报错是为什么?

直接在IDEA运行Jar包没问题,但用java -jar 的命令就报错是为什么?
对应代码:

    @Bean
    public RedissonClient getRedissonClient() {
        // 1.创建配置对象
        Config config = new Config();
        // 添加单机Redisson配置
        config.useSingleServer()
                // 设置数据库
                .setDatabase(database)
                // 设置redis的地址
                .setAddress("redis://" + host + ":" + port)
        // 设置redis的密码(redis有密码才设置)
                       .setPassword(password);

        // 2.创建Redisson实例
        RedissonClient redisson = Redisson.create(config);
        return redisson;
    }

报错原因如下,是在创建Redisson客户端的时候报错:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getRedissonClient' defined in class path resource [com/ailu/server/config/RedissonConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'getRedissonClient' threw exception; nested exception is java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.math.BigInteger java.math.BigDecimal.intVal accessible: module java.base does not "opens java.math" to unnamed module @13969fbe
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.24.jar!/:5.3.24]
        ... 81 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'getRedissonClient' threw exception; nested exception is java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.math.BigInteger java.math.BigDecimal.intVal accessible: module java.base does not "opens java.math" to unnamed module @13969fbe
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.24.jar!/:5.3.24]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.24.jar!/:5.3.24]
        ... 95 common frames omitted
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.math.BigInteger java.math.BigDecimal.intVal accessible: module java.base does not "opens java.math" to unnamed module @13969fbe
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[na:na]
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[na:na]
        at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:180) ~[na:na]
        at java.base/java.lang.reflect.Field.setAccessible(Field.java:174) ~[na:na]
        at org.nustaq.serialization.FSTClazzInfo.createFieldInfo(FSTClazzInfo.java:512) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTClazzInfo.createFields(FSTClazzInfo.java:368) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTClazzInfo.<init>(FSTClazzInfo.java:129) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTClazzInfoRegistry.getCLInfo(FSTClazzInfoRegistry.java:129) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTClazzNameRegistry.addClassMapping(FSTClazzNameRegistry.java:98) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTClazzNameRegistry.registerClassNoLookup(FSTClazzNameRegistry.java:85) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTClazzNameRegistry.registerClass(FSTClazzNameRegistry.java:81) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTConfiguration.addDefaultClazzes(FSTConfiguration.java:814) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTConfiguration.initDefaultFstConfigurationInternal(FSTConfiguration.java:477) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTConfiguration.createDefaultConfiguration(FSTConfiguration.java:472) ~[fst-2.57.jar!/:na]
        at org.nustaq.serialization.FSTConfiguration.createDefaultConfiguration(FSTConfiguration.java:464) ~[fst-2.57.jar!/:na]
        at org.redisson.codec.FstCodec.<init>(FstCodec.java:182) ~[redisson-3.12.0.jar!/:3.12.0]
        at org.redisson.config.Config.<init>(Config.java:102) ~[redisson-3.12.0.jar!/:3.12.0]
        at org.redisson.Redisson.<init>(Redisson.java:118) ~[redisson-3.12.0.jar!/:3.12.0]
        at org.redisson.Redisson.create(Redisson.java:160) ~[redisson-3.12.0.jar!/:3.12.0]
        at com.ailu.server.config.RedissonConfig.getRedissonClient(RedissonConfig.java:40) ~[classes!/:0.0.1-SNAPSHOT]
        at com.ailu.server.config.RedissonConfig$$EnhancerBySpringCGLIB$$a6471664.CGLIB$getRedissonClient$9(<generated>) ~[classes!/:0.0.1-SNAPSHOT]
        at com.ailu.server.config.RedissonConfig$$EnhancerBySpringCGLIB$$a6471664$$FastClassBySpringCGLIB$$d2d3462a.invoke(<generated>) ~[classes!/:0.0.1-SNAPSHOT]
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.24.jar!/:5.3.24]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.24.jar!/:5.3.24]
        at com.ailu.server.config.RedissonConfig$$EnhancerBySpringCGLIB$$a6471664.getRedissonClient(<generated>) ~[classes!/:0.0.1-SNAPSHOT]
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.24.jar!/:5.3.24]
        ... 96 common frames omitted

网上说是JDK9以上多模块的原因,但我是JDK8啊

阅读 1.1k
avatarAI BotBETA

尽管您提到您正在使用JDK 8,但错误消息中显示的 java.base does not "opens java.math" to unnamed module 通常与JDK 9及以上版本中的模块系统(JPMS)相关。不过,这个错误也可能由以下几个原因引起,即使在JDK 8中也可能发生:

  1. 依赖库不兼容:您项目中使用的某些库可能不完全兼容JDK 8,特别是如果它们内部使用了反射来访问java.math.BigDecimal.intVal这样的私有字段,并且这些库可能是在JDK 9或更高版本上开发的。
  2. IDE配置与命令行配置不一致:IDEA(如IntelliJ IDEA)可能在运行时使用了与命令行不同的类加载器或配置,这可能导致IDE中正常运行但命令行中失败的差异。
  3. 类路径问题:命令行执行时可能未正确设置类路径(classpath),导致某些必需的类或资源无法加载。
  4. 插件或扩展:IDEA可能安装了特定的插件或扩展,这些插件在IDE内部运行时提供了额外的支持或修复,但在命令行环境中不存在。

解决步骤

  1. 检查依赖库

    • 确保所有依赖库都与JDK 8兼容。
    • 特别注意那些可能与反射或JDK内部API交互的库,如序列化库(如FST或Kryo)。
  2. 清理和重建项目

    • 在IDEA中执行清理和重建项目。
    • 确保命令行使用的JAR文件是最新的,并且是从与IDEA相同的构建配置中生成的。
  3. 检查命令行参数

    • 确保在命令行中使用的java -jar命令具有正确的类路径和所有必需的参数。
    • 如果您的JAR文件依赖于其他JAR文件,请确保这些JAR文件在命令行中可用。
  4. 更新或降级库

    • 如果问题是由某个特定库引起的,尝试更新到最新版本或降级到一个稳定的旧版本。
  5. 查看日志和异常堆栈

    • 仔细分析异常堆栈,看是否可以找到更具体的线索。
    • 检查是否有其他日志输出可能有助于诊断问题。
  6. 简化问题

    • 尝试创建一个简单的测试案例,只包含引起问题的部分,看看是否可以在命令行中重现该问题。
  7. 考虑使用不同的JDK版本

    • 尽管您正在使用JDK 8,但尝试使用JDK 9或更高版本(如果有可用的兼容库和代码更改)可能会揭示问题的根本原因。
  8. 搜索和社区支持

    • 在Stack Overflow、GitHub、Reddit等社区中搜索类似的问题和解决方案。
    • 如果问题依然存在,考虑在适当的社区中提问或提交问题报告。
2 个回答

就是你的依赖库有问题,或者运行环境配置毛病。我看AI比我说的还清楚,估计这也是没什么大佬来回答这个问题的原因吧。祝你顺利!

破案了,之前电脑安装Oracle JDK18默认替换掉了环境变量配置的Jdk8,导致运行环境和项目环境不一致

推荐问题
宣传栏