Scala错误:java.sql.SQLException:未找到适合jdbc的驱动程序:方解石:
我使用maven汇编插件创建了一个Scala应用程序的jar。现在,当我使用java-jar path\to\jar\myapp.jar执行jar时,它抛出以下错误:Scala错误:java.sql.SQLException:未找到适合jdbc的驱动程序:方解石:,scala,jdbc,apache-calcite,Scala,Jdbc,Apache Calcite,我使用maven汇编插件创建了一个Scala应用程序的jar。现在,当我使用java-jar path\to\jar\myapp.jar执行jar时,它抛出以下错误: Exception in thread "main" Exception in thread "Timer-0" java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:calcite: at org.
Exception in thread "main" Exception in thread "Timer-0" java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:calcite:
at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:159)
at org.apache.calcite.tools.Frameworks.withPlanner(Frameworks.java:114)
Caused by: java.sql.SQLException: No suitable driver found for jdbc:calcite:
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:153)
... 17 more
java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:calcite:
at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:159)
at org.apache.calcite.tools.Frameworks.withPlanner(Frameworks.java:114)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver found for jdbc:calcite:
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.apache.calcite.tools.Frameworks.withPrepare(Frameworks.java:153)
... 8 more
当我通过IDE IntelliJ运行应用程序时,它工作正常
谁能告诉我为什么会这样
EDIT1:我打开了jar文件,看到方解石核心jar出现在org/apache/calcite jar中
编辑2:我试着改变方解石核心的版本。我之前使用的是1.15.0,现在使用的是1.18.0,但错误仍然存在 Apache Flink中似乎有一个bug-尽管我还没有找到方解石核心驱动程序问题的解决方案,但我还是设法找到了另一种执行jar的方法 我在pom.xml中添加了以下两个插件。maven依赖插件将所有相关的依赖jar复制到一个lib文件夹中,maven jar插件生成一个可执行jar文件
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
注意:添加com.example.MainClass将使manifest.mf知道主类是什么 你能打开你的jar文件吗?应该可以使用任何可以提取zip文件的应用程序打开它,并检查里面是否有目录org/apache/calcite?calcite核心jar在我的类路径中。根据你的说法,它是如何出现在类路径上的?错误表明不是,因为您使用的是java-jar-path\to\jar\myapp.jar,所以应用程序将只使用META-INF/manifest.mf中定义的类路径,而不使用任何定义类路径的外部方法。例如,在环境变量CLASSPATH中使用它将不起作用,因为-jar选项不使用它。你是对的。在类路径中是否有它并不重要。但是我打开了jar文件并检查了org/apache/calcite目录。它就在那里。让我困惑的是,当我在IDE上运行它时,它工作了,方解石核心被检测到了,但当我使用Maven打包并运行它时,它就不工作了。