创建嵌入式节点时的ElasticSearch异常

Gle*_*eeb 5 java lucene maven elasticsearch

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

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

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>1.4.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

这反过来又带来了它所需的所有依赖,包括lucene.

此代码中发生异常:

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

例外情况如下:

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]
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

phi*_*rns 3

除了你提到的两个例外之外,对我来说也是一样的。(唯一的区别是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>
Run Code Online (Sandbox Code Playgroud)

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

很抱歉,我现在无法说出为什么这是必要的,但至少它有帮助。