尽管阅读了所有相关帖子并按照我的想法理解了问题,但我对此已经用尽了。当我在tomcat中运行我的应用程序时,它使用我编写的自定义代码解密数据库密码作为初始化的一部分。此解密实用程序传回DataSourceFactory。
它抛出了这个错误:
引起:java.lang.UnsupportedClassVersionError:org / apache / tomcat / jdbc / pool / DataSourceFactory:不支持的major.minor版本51.0
我使用JDK 1.6.0.31.1将解密实用程序构建为jar,并且此jar中所有已编译类文件中的字节6和7的十六进制值为0x31 = 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 verison字节中确实有Ox51,表示它是用Java7构建的。我删除了这个并重建但没有任何区别,这并不奇怪,因为这肯定只是一个运行时问题。
我正在使用相同版本的java 1.6.0.31运行tomcat。
仍然不知何故Tomcat似乎试图在运行时加载一个更新的DataSourceFactory版本,尽管它不在lib文件夹中 - 我打印出该文件夹中的每个类,并且在其他jar中没有隐藏的额外类或者这样的事情。
知道我可能会尝试找到它从哪里加载? 提前致谢
答案 0 :(得分:0)
Groan,在Intellij的某个地方有一个tomcat-jdbc-8.0.8,它被IDE中运行的tomcat接收。