当前位置: 首页 > 知识库问答 >
问题:

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

赏彭薄
2024-09-29

直接在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啊

共有3个答案

小牛23280
2024-09-29

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

梁盛
2024-09-29

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

云长恨
2024-09-29

尽管您提到您正在使用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等社区中搜索类似的问题和解决方案。
    • 如果问题依然存在,考虑在适当的社区中提问或提交问题报告。
 类似资料:
  • 项目中手动引入第三方jar包,要打包到我们自己项目的jar包里面。本地测试没有问题,但是部署运行时报错找不到三方jar包 我进行过以下尝试: 利用路径进行jar包的定位并打包 通过 可以将如图所示的jar打进去,但是我主要使用的jar包却没有打进去 结果java -jar时依旧报错 脑壳痛,求大神解答

  • 本文向大家介绍Java命令行下Jar包打包小结,包括了Java命令行下Jar包打包小结的使用技巧和注意事项,需要的朋友参考一下 jar包打包实现 jar包打包可以使用jar指令实现打包,在命令行中输入jar可以查看jar指令的内容 从最后显示的两个示例看出存在两种打包的方法,两者的区别就是是否使用自己定义的MANIFEST清单文件。第一个示例没有使用MANIFEST文件进行打包,所以最终生成的ja

  • 我无法从cmd windows 10执行java jar文件。我使用Intellji生成了一个jar文件。 当我运行命令Java-jar时,我得到了这个错误 错误:无法访问jarfile 我试着用管理权限运行cmd,但同样的错误。类路径设置正确。jar文件位于正确的目录中。 是什么导致了这个问题?谢谢

  • 我用的hxyFrame框架,在idea能启动起来,但是在diea打包后,用java-jar 启动jar包报错。这是什么原因?

  • 问题内容: 我正在部署用Java编写的接受命令行参数的命令行工具。我将其打包为JAR文件,因为使用单个文件很方便。 问题是要运行它,您必须先调用它,这很烦人。 我目前拥有的方法是启动一个简单的bash脚本,但这并不理想。 无论如何(在Linux,Ubuntu Server中)是否可以制作一个JAR文件来单独调用Java VM?我一直在寻找Shebang,但找不到它(这是合理的,因为它是编译后的代码

  • 由于云之家提供的jar, 在maven上找不到,我只能在idea上直接导入。本地上能够运行,但想打包发布到服务器上。idea就提示"程序包com.yunzhijia.cloudflow不存在"。这种情况请问得怎么解决??