为什么在Java中初始化Sybase驱动程序时会加载Oracle驱动程序?

huangapple 未分类评论44阅读模式
标题翻译

Why will Oracle Driver be loaded when initializing driver for sybase in Java?

问题

我遇到了一个非常奇怪的问题。
我有两个使用Maven构建的项目。
一个项目是DAO层,另一个是服务层。
服务层项目依赖于DAO层项目,因此服务层项目的pom文件中引用了DAO层项目。
DAO层依赖于Oracle驱动程序和Sybase驱动程序。
当我从DAO项目运行任何测试类时,两个数据库(Oracle + Sybase)都能正常工作。
但是,当我从服务层项目运行任何测试类时,我总是得到下面的堆栈跟踪。
即使我根本没有访问Oracle数据库,我也会得到这个堆栈跟踪。

我已经将Oracle驱动程序添加到了服务层pom的依赖项中,但没有起作用。
看起来某种方式导致所有驱动程序都被加载(DriverManager.getDrivers()),但后来却找不到Oracle驱动程序。

但是:当我从DAO项目中移除Oracle依赖项(完全没有任何代码更改)后,我可以在服务层项目中运行测试而没有任何问题。

是否有任何人有解决这个问题的想法?

java.lang.NoClassDefFoundError:无法初始化类oracle.jdbc.OracleDriver
在java.base / java.lang.Class.forName0(Native
Method) 在java.base / java.lang.Class.forName(Class.java:415)
在java.sql / java.sql.DriverManager.isDriverAllowed(DriverManager.java:555)
在java.sql / java.sql.DriverManager.isDriverAllowed(DriverManager.java:547)
在java.sql / java.sql.DriverManager.getDrivers(DriverManager.java:449)
在java.sql / java.sql.DriverManager.getDrivers(DriverManager.java:426)
在com.sybase.jdbc4.jdbc.SybDriver.registerWithDriverManager(SybDriver.java:711)
在com.sybase.jdbc4.jdbc.SybDriver.(SybDriver.java:140) 在
com.sybase.jdbc4.jdbc.SybDriver.(SybDriver.java:104) 在
de.miditec.carpark.dao.BasicDAO.createPersistenceUnit(BasicDAO.java:238)

英文翻译

I have a really strange issue.
I have two projects built with maven.
One project is DAO layer, the other is service layer.
The service layer projects depends on the DAO layer project, so the DAO layer projects is referenced in pom of service layer project.
The DAO layer depends on oracle driver and sysbase driver.
Bot databases (oracle + sybase) work as expected when I run any testclasses from the DAO project.
But when I run any testclasses from the service layer project, I always get the stacktrace below.
I get this stacktrace, even I don't even access the oracle database.

I already added the oracle driver as a dependency to the service layer pom, but it didnt help.
It looks as somehow the sybase driver causes allDrivers to be loaded (DriverManager.getDrivers()) but the oracle driver lateron can't be found.

BUT: When I remove the oracle dependency from the DAO project (without any code changes at all), I can run test from service layer projects without problems.

Anyone any idea how to solve this ?

> java.lang.NoClassDefFoundError: Could not initialize class
> oracle.jdbc.OracleDriver at java.base/java.lang.Class.forName0(Native
> Method) at java.base/java.lang.Class.forName(Class.java:415) at
> java.sql/java.sql.DriverManager.isDriverAllowed(DriverManager.java:555)
> at
> java.sql/java.sql.DriverManager.isDriverAllowed(DriverManager.java:547)
> at java.sql/java.sql.DriverManager.getDrivers(DriverManager.java:449)
> at java.sql/java.sql.DriverManager.getDrivers(DriverManager.java:426)
> at
> com.sybase.jdbc4.jdbc.SybDriver.registerWithDriverManager(SybDriver.java:711)
> at com.sybase.jdbc4.jdbc.SybDriver.<init>(SybDriver.java:140) at
> com.sybase.jdbc4.jdbc.SybDriver.<clinit>(SybDriver.java:104) at
> de.miditec.carpark.dao.BasicDAO.createPersistenceUnit(BasicDAO.java:238)

huangapple
  • 本文由 发表于 2020年3月17日 01:03:03
  • 转载请务必保留本文链接:https://java.coder-hub.com/60710178.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定