Reputation: 63
My code is calling two different somewhat obscure JDBC connections. These JARS are related to Jethro and Impala, but I do not think it matters for this question. If I add the external JAR for Jethro alone it works. Same for Impala. However, if I add both the Jethro and Impala external jars I seem to get a collision. I want to be able to call either JDBC library in the same program space. The following exception occurs:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/protocol/TProtocol
at com.cloudera.impala.impala.core.ImpalaJDBCDriver.<clinit>(ImpalaJDBCDriver.java:24)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.cloudera.impala.dsi.core.impl.DSIDriverFactory.createDriver(DSIDriverFactory.java:52)
at com.cloudera.impala.jdbc.common.AbstractDriver.doInitialize(AbstractDriver.java:471)
at com.cloudera.impala.jdbc.common.AbstractDriver.connect(AbstractDriver.java:207)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at TestConnect.main(TestConnect.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.thrift.protocol.TProtocol
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
Upvotes: 1
Views: 398
Reputation: 63
This got fixed. Essentially I did not have all the dependent JAR's for Impala. I thought that would not matter as I was calling Jethro. It did matter.
Adding the following jars did make it work. Score one for Maven. If I used Maven this would not have happened. Here are the dependent JARS's for posterity sake:
Upvotes: 3