Bourkadi
Bourkadi

Reputation: 746

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

Upvotes: 2

Views: 6322

Answers (2)

Mike Nitchie
Mike Nitchie

Reputation: 1174

Use maven. Even with it, it took me a fairly considerable amount of time to get the dependencies right. The tutorials were all a bit lacking. Below is my pom.xml with the relevant dependencies that I had maven bring in. Perhaps it will help you.

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-core</artifactId>
    <version>4.3.0</version>
</dependency>
<dependency>
    <artifactId>solr-solrj</artifactId>
    <groupId>org.apache.solr</groupId>
    <version>4.3.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>

Upvotes: 2

Mark O&#39;Connor
Mark O&#39;Connor

Reputation: 77961

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.

Upvotes: 0

Related Questions