Search code examples
mavensolrsolrj

SolrJ with Maven


I am a newbie in Solr and maven and i want to make a small application that index all my database tables via SolrJ .
For that i looked up at this tutorial where they are using MAVEN .
I installed the librairies and jars (except maven) but i had this exception:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpRequestInterceptor

I looked into the tutorial and i saw that for resolving this problem we need to add this to my maven configuration:

org.slf4j slf4j-simple 1.5.6

Is there anyway to do that without maven? Thank you


Solution

  • Maven is the suggested build technology for the Solrj, because it automates the management of 3rd party dependencies. Without dependency management it's a royal pain to decipher these relationships (Jar hell).

    What I could suggest is to use ivy, which has a command-line mode.

    First download the ivy jar

    To retrieve the following Maven module and all it's dependencies:

        <dependency>
               <artifactId>solr-solrj</artifactId>
               <groupId>org.apache.solr</groupId>
               <version>1.4.0</version>
               <type>jar</type>
               <scope>compile</scope>
        </dependency>
    

    Then run it as follows:

     java -jar ivy.jar \
          -dependency org.apache.solr solr-solrj 1.4.0 \
          -retrieve "lib/[artifact]-[revision](-[classifier]).[ext]" \
          -confs default
    

    Retrieves into the lib directory:

    lib/commons-httpclient-3.1.jar
    lib/wstx-asl-3.2.7.jar
    lib/slf4j-api-1.5.5.jar
    lib/commons-codec-1.3.jar
    lib/stax-api-1.0.1.jar
    lib/geronimo-stax-api_1.0_spec-1.0.1.jar
    lib/commons-logging-1.0.4.jar
    lib/solr-solrj-1.4.0.jar
    lib/commons-io-1.4.jar
    lib/commons-fileupload-1.2.1.jar
    

    Update

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpRequestInterceptor
    

    This is due to a missing httpcore.jar file. I found this out by browsing Maven Central:

    The recommendation on using the "slf4j-simple" is to provide a logging implementation in case your application doesn't have one.

    Finally... This demonstrates what I've tried to say. In the absence of a dependency management tool (ivy, groovy, Maven) you're on your own in deciphering the 3rd party jar dependencies.