我创建了一个 Maven 项目,其中包含对 Calcite JDBC 驱动程序的依赖项,以及 Calcite CSV 适配器的源代码。
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-core</artifactId>
<version>1.20.0</version>
</dependency>
当我从 JUnit 测试运行时,我可以使用 SQL 查询一些 CSV 文件。很酷!
但我无法让 JAR 在 SQL Workbench/J 中工作。日志文件有这个:
Caused by: java.lang.IllegalStateException: Unable to instantiate java compiler
at org.apache.calcite.rel.metadata.JaninoRelMetadataProvider.compile(JaninoRelMetadataProvider.java:434)
Caused by: java.lang.ClassNotFoundException: No implementation of org.codehaus.commons.compiler is on the class path. Typically, you'd have 'janino.jar', or 'commons-compiler-jdk.jar', or both on the classpath.
at org.codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory(CompilerFactoryFactory.java:65)
SQL Workbench/J 连接成功,我可以在 UI 中看到 CSV“表”列表。但是当我尝试查询它们时,我得到了上述错误。
我找到了一个有类似问题的人的链接,但没有看到解决方案。
https://community.jaspersoft.com/questions/1035211/apache-calcite-jdbc-driver-jaspersoft
此外,这是似乎引发错误的代码:
public final
class CompilerFactoryFactory {
...
public static ICompilerFactory
getDefaultCompilerFactory() throws Exception {
if (CompilerFactoryFactory.defaultCompilerFactory != null) {
return CompilerFactoryFactory.defaultCompilerFactory;
}
Properties properties = new Properties();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(
"org.codehaus.commons.compiler.properties"
);
if (is == null) {
throw new ClassNotFoundException(
"No implementation of org.codehaus.commons.compiler is on the class path. Typically, you'd have "
+ "'janino.jar', or 'commons-compiler-jdk.jar', or both on the classpath."
);
}
据我所知,org.codehaus.commons.compiler.properties
在 SQL Workbench/J 下运行时找不到该资源,但由于某种原因,它可以在我的代码中运行。
如果我解压缩 JAR 文件,我会org.codehaus.commons.compiler.properties
在目录结构中看到,所以不确定为什么找不到它。
还有其他人遇到这个问题吗?
谢谢你的帮助。