找不到org.codehaus.commons.compiler.properties资源

时间:2019-07-12 14:08:18

标签: apache-calcite janino

我创建了一个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,所以不确定为什么找不到它。

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

感谢您的帮助。

0 个答案:

没有答案