如何避免在连接时与 Eclipse 中的多个 JDBC 驱动程序发生 JAR 冲突



我的代码调用了两个不同的有点晦涩的JDBC连接。 这些JARS与杰斯罗和黑斑羚有关,但我认为这个问题无关紧要。 如果我单独为 Jethro 添加外部 JAR,它可以工作。 黑斑羚也一样。 但是,如果我同时添加 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)

这个问题得到了修复。 从本质上讲,我没有黑斑羚的所有依赖 JAR。 我以为这无关紧要,因为我打电话给叶忒罗。 这确实很重要。

添加以下罐子确实使其工作。 为Maven得分一分。 如果我使用 Maven,这就不会发生。 以下是为后代着想的依赖 JARS:

  • libfb303
  • 自由节俭
  • log4j
  • TCLIServiceClient

最新更新