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

时间:2018-01-22 16:45:39

标签: java eclipse jdbc jethro

我的代码调用了两个不同的模糊JDBC连接。这些JARS与Jethro和Impala有关,但我认为这个问题并不重要。如果我单独为Jethro添加外部JAR,它就可以工作。 Impala也是如此。但是,如果我同时添加Jethro和Impala外部罐子,我似乎会发生碰撞。我希望能够在同一个程序空间中调用JDBC库。发生以下异常:

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)

1 个答案:

答案 0 :(得分:3)

这是固定的。基本上我没有Impala的所有依赖JAR。我认为这不重要因为我打电话给Jethro。这很重要。

添加以下罐子确实有效。为Maven得一分。如果我使用Maven,那就不会发生。以下是依赖JARS的后代:

  • libfb303
  • libthrift
  • log4j
  • TCLIServiceClient