2

我创建了一个 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在目录结构中看到,所以不确定为什么找不到它。

还有其他人遇到这个问题吗?

谢谢你的帮助。

4

0 回答 0