【问题标题】:ElasticSearch exception when creating embedded node创建嵌入式节点时出现 ElasticSearch 异常
【发布时间】:2015-06-22 19:20:59
【问题描述】:

我正在尝试为集成测试创建一个嵌入式节点,但由于某种原因,我在创建缺少某些类的节点本身时遇到了一些异常,

我正在使用 maven,我唯一的与 ES 相关的导入就是这个

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>1.4.1</version>
    </dependency>

这反过来带来了它需要的所有依赖项,包括 lucene。

异常发生在这段代码中:

    @Bean(destroyMethod="close")
    public Client transportClient() {
        Node node = NodeBuilder.nodeBuilder().node(); //class not found
        Client client = node.client();
        return client;
    }

异常如下:

1:

java.lang.ClassNotFoundException: groovy.lang.GroovyClassLoader
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) ~[na:1.8.0_25]
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.8.0_25]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_25]
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) ~[na:1.8.0_25]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_25]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.8.0_25]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_25]

2:

java.lang.ClassNotFoundException: org.apache.lucene.expressions.Expression
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) ~[na:1.8.0_25]
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.8.0_25]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_25]
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) ~[na:1.8.0_25]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_25]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.8.0_25]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_25]
at org.elasticsearch.script.ScriptModule.configure(ScriptModule.java:98) ~[elasticsearch-1.4.1.jar:na]
at org.elasticsearch.common.inject.AbstractModule.configure(AbstractModule.java:60) [elasticsearch-1.4.1.jar:na]
at org.elasticsearch.common.inject.spi.Elements$RecordingBinder.install(Elements.java:204) [elasticsearch-1.4.1.jar:na]
at org.elasticsearch.common.inject.spi.Elements.getElements(Elements.java:85) [elasticsearch-1.4.1.jar:na]

【问题讨论】:

  • 你导入static org.elasticsearch.node.NodeBuilder.*;了吗?
  • 这不是编译错误,而是运行时错误。是的,我已经导入了 Eclipse 想要编译的内容
  • 我也遇到了同样的问题

标签: java maven elasticsearch lucene


【解决方案1】:

查看您正在使用的任何版本的 elasticsearch 的 pom 文件,并找到 groovy-all 和 lucene-expressions 的依赖项。它们被声明为可选依赖项,因此您需要手动将它们添加到您的项目 pom 文件中,以便使用使用它们的 elasticsearch 功能。

例如在 elasticserach 1.4.2 pom file 我发现:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.3.2</version>
    <scope>compile</scope>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-expressions</artifactId>
    <version>4.10.2</version>
    <scope>compile</scope>
    <optional>true</optional>
</dependency>

所以,因为它们是可选的,所以我需要将以下内容添加到我的项目 pom 文件中:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.3.2</version>
</dependency>
<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-expressions</artifactId>
    <version>4.10.2</version>
</dependency>

【讨论】:

    【解决方案2】:

    除了你提到的两个例外,对我来说都是一样的。 (唯一的区别是 Elasticsearch 的版本号,在我的项目中是 1.3.2。)

    为了摆脱异常,我尝试通过将以下依赖项显式添加到我的 pom.xml 来导入指定的类:

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.3.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-expressions</artifactId>
            <version>4.10.2</version>
        </dependency>
    

    (对于 Elasticsearch 1.3.1,我必须选择 lucene-expressions 4.9。)

    很抱歉,我现在不知道为什么需要这样做,但至少它有帮助。

    【讨论】:

    • 添加 lucene-expression 依赖项对我有用。就我而言,我使用的是弹性搜索 1.7.1,对应的 lucene 版本是 4.10.4。 groovy 的警告信息仍然存在。你知道应该使用哪个 groovy 版本来匹配 elastic search 1.7.1 吗?
    猜你喜欢
    • 2014-07-07
    • 2017-10-30
    • 2019-12-22
    • 2019-01-30
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多