elastic / elasticsearch

Free and Open Source, Distributed, RESTful Search Engine
https://www.elastic.co/products/elasticsearch
Other
69.55k stars 24.62k forks source link

Can't use Java client due to NoClassDefFoundError: org/apache/log4j/Priority #19415

Closed fakeh closed 8 years ago

fakeh commented 8 years ago

I had to add these dependencies to resolve:


        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.5.11</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>

Elasticsearch version: 5.0.0-alpha4

JVM version: java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

OS version: OSX 10.11.5

Description of the problem including expected versus actual behavior: Can't use Java client, due to NoDefFound from ESLogger.

Steps to reproduce:

  1. Create Maven project
  2. Depend on
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.0.0-alpha4</version>
        </dependency>
  1. Try to make a client:
    private Client client = TransportClient.builder().build().addTransportAddress(
            new InetSocketTransportAddress(new InetSocketAddress("localhost", 9300)));

Provide logs (if relevant):

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Priority
    at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:42)
    at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:46)
    at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:123)
    at org.elasticsearch.common.settings.Setting.<clinit>(Setting.java:110)
    at org.elasticsearch.common.logging.ESLoggerFactory.<clinit>(ESLoggerFactory.java:33)
    at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:119)
    at org.elasticsearch.transport.netty.NettyInternalESLoggerFactory.newInstance(NettyInternalESLoggerFactory.java:33)
    at org.elasticsearch.common.netty.NettyUtils$1.newInstance(NettyUtils.java:91)
    at org.jboss.netty.logging.InternalLoggerFactory.getInstance(InternalLoggerFactory.java:67)
    at org.jboss.netty.logging.InternalLoggerFactory.getInstance(InternalLoggerFactory.java:60)
    at org.jboss.netty.util.ThreadRenamingRunnable.<clinit>(ThreadRenamingRunnable.java:32)
    at org.elasticsearch.common.netty.NettyUtils.<clinit>(NettyUtils.java:95)
    at org.elasticsearch.transport.netty.NettyTransport.<clinit>(NettyTransport.java:145)
    at org.elasticsearch.client.transport.TransportClient$Builder.newPluginService(TransportClient.java:108)
    at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java:120)
    at edge.model.TestElastic.<clinit>(TestElastic.java:10)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 16 more
sschwell commented 7 years ago

So at the moment, the best solution is @ctron 's cluge (thanks @ctron !!) ? Or am I missing something in this too long thread?

miscenko commented 6 years ago

@ctron , thanks a lot!

jakubneubauer commented 6 years ago

Whilst the guys here spent LOT of time meta-discussing usage of the right words in the discussion, @ctron made it! You are the absolute winner, bro!