【发布时间】:2014-09-17 09:11:55
【问题描述】:
尽管阅读了所有相关帖子并按照我的想法理解了问题,但我对此没有任何想法。当我在 tomcat 中运行我的应用程序时,它会在初始化过程中使用我编写的自定义代码解密数据库密码。此解密实用程序传回 DataSourceFactory。
它会抛出这个错误:
原因:java.lang.UnsupportedClassVersionError: org/apache/tomcat/jdbc/pool/DataSourceFactory : Unsupported major.minor version 51.0
我已使用 JDK 1.6.0.31.1 将解密实用程序构建为 jar,并且此 jar 中所有已编译类文件中字节 6 和 7 的十六进制值是 Ox31 = 49 十进制,这表示 J2SE5 兼容。
此外,我的 tomcat lib 文件夹中唯一的 tomcat-jdbc 是 tomcat-jdbc-7.0.37.jar。打开这个并再次检查 DataSourceFactory 类中的 major.minor 字节位置显示相同的 Ox31。
我注意到该实用程序的依赖关系树中出现了一个 tomcat-jdbc-8.0.8.jar(我正在使用 maven 构建)。 8.0.8 中的 DataSourceFactory 在 major.minor 版本字节中确实有 Ox51,表示它是用 Java7 构建的。我删除了它并重建了它,但它没有任何区别,这并不奇怪,因为这肯定只是一个运行时问题。
我正在使用相同版本的 java 1.6.0.31 运行 tomcat。
尽管它不在 lib 文件夹中,但 Tomcat 似乎仍在尝试在运行时加载更新版本的 DataSourceFactory - 我已经打印出该文件夹中的每个类,并且在其他一些 jar 中没有隐藏的额外类或类似的东西。
知道我可能会尝试找到它从哪里加载吗? 提前致谢
【问题讨论】:
标签: tomcat jdbc classloader