NoClassDefFoundError for IngestPlugin in Elasticsearch

I created a library for sentiment analysis in Java. The whole source code is here.

I wanted to add this implementation as a part of an ingestion pipeline using Ingestion plugin in Elasticsearch. For that I designed a plugin which is still development stage and the source is available here.

The plugin installs correctly but when I send the following request to ES:

{
  "pipeline": {
    "description": "Apply VADER sentiment analysis on text.",
    "processors": [
      {
        "vader_analyzer": {
          "field": "input",
          "positive_polarity": "positive_polarity",
          "negative_polarity": "negative_polarity",
          "neutral_polarity": "neutral_polarity",
          "compound_polarity": "compound_polarity"
        }
      }
    ],
    "version": 1
  },
  "docs": [
    {
      "_source": {
        "input": "The plot was good, but the characters are uncompelling and the dialog is not great."
      }
    }
  ]
}

I get the following error:

java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
        at com.vader.sentiment.analyzer.SentimentAnalyzer.boostByExclamation(SentimentAnalyzer.java:335) ~[?:?]
        at com.vader.sentiment.analyzer.SentimentAnalyzer.boostByPunctuation(SentimentAnalyzer.java:331) ~[?:?]
        at com.vader.sentiment.analyzer.SentimentAnalyzer.polarityScores(SentimentAnalyzer.java:265) ~[?:?]
        at com.vader.sentiment.analyzer.SentimentAnalyzer.getSentiment(SentimentAnalyzer.java:235) ~[?:?]
        at com.vader.sentiment.analyzer.SentimentAnalyzer.analyse(SentimentAnalyzer.java:54) ~[?:?]
        at org.elasticsearch.plugin.ingest.vader.processor.VaderProcessor.execute(VaderProcessor.java:93) ~[?:?]
        at org.elasticsearch.action.ingest.TrackingResultProcessor.execute(TrackingResultProcessor.java:47) ~[elasticsearch-5.2.1.jar:5.2.1]
        at org.elasticsearch.ingest.CompoundProcessor.execute(CompoundProcessor.java:100) ~[elasticsearch-5.2.1.jar:5.2.1]
        at org.elasticsearch.action.ingest.SimulateExecutionService.executeDocument(SimulateExecutionService.java:49) ~[elasticsearch-5.2.1.jar:5.2.1]
        at org.elasticsearch.action.ingest.SimulateExecutionService$1.doRun(SimulateExecutionService.java:70) ~[elasticsearch-5.2.1.jar:5.2.1]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:596) ~[elasticsearch-5.2.1.jar:5.2.1]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-5.2.1.jar:5.2.1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_121]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_121]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_121]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_121]
        at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:814) ~[?:1.8.0_121]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_121]
        ... 15 more

POM file for Sentiment Analysis Library.

POM file for Ingest Plugin.

I am not sure how to solve this issue?

Your zip file does not contain common-lang jar. Probably because of the runtime scope you put in pom.xml

Thanks for the reply.
Your suggestion worked!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.