Search code examples
javaoracle-databasejdbcjava-9

Oracle JDBC Driver with Java 9 java.lang.NoClassDefFoundError: Could not initialize class oracle.jdbc.OracleDriver


I'm trying to get a Java application working with Java 9+. When running in the 1.9 jre, I get the following stack trace:

2018-06-06 11:22:54.304 ERROR - main - Replicator - (stderr) java.lang.NoClassDefFoundError: Could not initialize class oracle.jdbc.OracleDriver
2018-06-06 11:22:54.305 ERROR - main - Replicator - (stderr) 

2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr)    at java.base/java.lang.Class.forName0(Native Method)
2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr) 

2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr)    at java.base/java.lang.Class.forName(Unknown Source)
2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr) 

2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr)    at java.sql/java.sql.DriverManager.isDriverAllowed(Unknown Source)
2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr) 

2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr)    at java.sql/java.sql.DriverManager.isDriverAllowed(Unknown Source)
2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr) 

2018-06-06 11:22:54.306 ERROR - main - Replicator - (stderr)    at java.sql/java.sql.DriverManager.getDrivers(Unknown Source)
2018-06-06 11:22:54.307 ERROR - main - Replicator - (stderr) 

2018-06-06 11:22:54.307 ERROR - main - Replicator - (stderr)    at java.sql/java.sql.DriverManager.getDrivers(Unknown Source)
2018-06-06 11:22:54.307 ERROR - main - Replicator - (stderr) 

2018-06-06 11:22:54.307 ERROR - main - Replicator - (stderr)    at org.apache.commons.dbcp2.BasicDataSource.<clinit>(BasicDataSource.java:77)

I have confirmed that the classpath is accurate because 1. this runs fine in Java 8, and 2. all other .jars are properly loaded when running in 9. Has anyone had any luck running Oracle jdbc drivers on Java 9+?


Solution

  • So the problem ended up showing itself once I turned on trace logging for DriverManager. An old jconn driver for Sybase was conflicting with Java 9/10 and causing the DriverManager to error out. Seeing as it is now a deprecated driver it makes sense.