简体   繁体   English

如何在连接时避免在Eclipse中使用多个JDBC驱动程序进行JAR碰撞?

[英]How do I avoid JAR Collision with multiple JDBC drivers in Eclipse on connect?

My code is calling two different somewhat obscure JDBC connections. 我的代码调用两个不同的有点模糊的JDBC连接。 These JARS are related to Jethro and Impala, but I do not think it matters for this question. 这些JARS与Jethro和Impala有关,但我认为这个问题并不重要。 If I add the external JAR for Jethro alone it works. 如果我单独为Jethro添加外部JAR,它就可以工作。 Same for Impala. Impala也是如此。 However, if I add both the Jethro and Impala external jars I seem to get a collision. 但是,如果我同时添加Jethro和Impala外部罐子,我似乎会发生碰撞。 I want to be able to call either JDBC library in the same program space. 我希望能够在同一个程序空间中调用JDBC库。 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)

This got fixed. 这是固定的。 Essentially I did not have all the dependent JAR's for Impala. 基本上我没有Impala的所有依赖JAR。 I thought that would not matter as I was calling Jethro. 我认为这不重要因为我打电话给Jethro。 It did matter. 它确实很重要。

Adding the following jars did make it work. 添加以下罐子确实有效。 Score one for Maven. 为Maven得一分。 If I used Maven this would not have happened. 如果我使用Maven,那就不会发生。 Here are the dependent JARS's for posterity sake: 以下是依赖JARS的后代:

  • libfb303 libfb303
  • libthrift libthrift
  • log4j log4j的
  • TCLIServiceClient TCLIServiceClient

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM