我创建了一个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."
);
}
据我所知,在SQL Workbench / J下运行时,org.codehaus.commons.compiler.properties
资源只是找不到,但是由于某种原因它可以在我的代码中使用。
如果我解压缩JAR文件,我会在目录结构中看到org.codehaus.commons.compiler.properties
,所以不确定为什么找不到它。
还有其他人遇到这个问题吗?
感谢您的帮助。