java.lang.NoClassDefFoundError: bsh/TargetError

本文解决了一个关于Spring框架中SessionFactory创建失败的问题,错误原因是由于找不到bsh.TargetError类导致的NoClassDefFoundError异常。通过添加正确的bsh-xxx.jar文件到项目依赖中解决了这个问题。
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file [F:\jBPM-WorkSpace\jBPM-ssh\WebRoot\WEB-INF\applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: bsh/TargetError

Caused by: java.lang.NoClassDefFoundError: bsh/TargetError

at java.lang.Class.getDeclaredMethods0(Native Method)

at java.lang.Class.privateGetDeclaredMethods(Unknown Source)

at java.lang.Class.getDeclaredMethods(Unknown Source)

at org.hibernate.property.BasicPropertyAccessor.getterMethod(BasicPropertyAccessor.java:317)

at org.hibernate.property.BasicPropertyAccessor.getGetterOrNull(BasicPropertyAccessor.java:297)

at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:280)

at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:275)

at org.hibernate.util.ReflectHelper.getter(ReflectHelper.java:86)

at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:77)

at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)

at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2138)

at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2115)

at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2005)

at org.hibernate.cfg.HbmBinder.bindSubclass(HbmBinder.java:830)

at org.hibernate.cfg.HbmBinder.handleSubclass(HbmBinder.java:2184)

at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:161)

at org.hibernate.cfg.Configuration.add(Configuration.java:386)

at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:427)

at org.hibernate.cfg.Configuration.addResource(Configuration.java:482)

at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465)

at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1325)

at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:634)

at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1198)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1167)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)

at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)

at org.springframework.context.support.FileSystemXmlApplicationContext.(FileSystemXmlApplicationContext.java:124)

at org.springframework.context.support.FileSystemXmlApplicationContext.(FileSystemXmlApplicationContext.java:68)

at org.test.Datatest.main(Datatest.java:21)

Caused by: java.lang.ClassNotFoundException: bsh.TargetError

at java.net.URLClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

... 38 more



网上下在一个bsh-xxx.jar,添加,OK!
### 问题分析 `java.lang.NoClassDefFoundError: javafx/util/Pair` 表示在运行时找不到 `javafx.util.Pair` 类。此类通常在 JavaFX 模块中提供,但在某些 JDK 发行版(如 OpenJDK)中默认不包含 JavaFX,或者在 Java 11 及以上版本中,JavaFX 已从标准 JDK 中移除,需要手动引入 [^3]。 ### 解决方案 #### 1. 使用替代类库(推荐) `javafx.util.Pair` 是一个简单的键值对容器,可以通过引入第三方库或使用自定义类来替代。 - **使用 Hutool 的 `Pair` 类**: 在 `pom.xml` 中添加 Hutool 依赖: ```xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.12</version> </dependency> ``` 替换原有代码中的 `javafx.util.Pair`: ```java // 原有代码 import javafx.util.Pair; // 替换为 import cn.hutool.core.lang.Pair; ``` Hutool 提供了类似功能,并且兼容性更好,适合生产环境使用 [^4]。 #### 2. 手动引入 JavaFX 模块(适用于需要完整 JavaFX 功能的场景) 如果项目确实需要使用 JavaFX 的其他功能,可以手动下载 JavaFX SDK 并在启动时指定模块路径。 - 下载地址:[JavaFX - Gluon](https://gluonhq.com/products/javafx/) - 启动命令示例: ```bash java --module-path ./javafx-sdk-19/lib --add-modules javafx.controls,javafx.fxml -jar your_app.jar ``` 此方式适用于 Java 11 及以上版本 [^3]。 #### 3. 检查 JDK 发行版差异 - **OpenJDK 与 OracleJDK 差异**:某些版本的 OracleJDK 包含 JavaFX,而 OpenJDK 不包含。如果本地使用的是 OracleJDK,而服务器使用 OpenJDK,则可能导致运行时类缺失 [^2]。 - **建议**:统一本地和服务器的 JDK 版本和发行商,避免因环境差异导致类加载失败。 #### 4. 自定义 Pair 类 如果项目中仅使用了 `Pair` 的基本功能,也可以自定义一个简单的 `Pair` 类来替代: ```java public class Pair<K, V> { private final K key; private final V value; public Pair(K key, V value) { this.key = key; this.value = value; } public K getKey() { return key; } public V getValue() { return value; } } ``` 此方法适用于轻量级使用场景,避免引入额外依赖 [^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值