2016-08-16 126 views
2

我有一个应用程序正常工作,直到我引入了下列Maven依赖项。添加Maven依赖项导致java.lang.ClassNotFoundException

<dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.3</version> 
    </dependency> 

    <dependency> 
     <groupId>net.sf.supercsv</groupId> 
     <artifactId>super-csv</artifactId> 
     <version>2.4.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.googlecode.json-simple</groupId> 
     <artifactId>json-simple</artifactId> 
     <version>1.1.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.codehaus.janino</groupId> 
     <artifactId>commons-compiler-jdk</artifactId> 
     <version>3.0.0</version> 
    </dependency> 

介绍了以下相关后,广口瓶得到正确建立,没有编译器异常,但运行应用程序时,它有以下例外失败:

异常1:

Exception in thread "2/streamJsonParser:StreamingJsonParser" java.lang.NoClassDefFoundError: org/apache/log4j/spi/ThrowableInformation 
at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:165) 
at org.apache.log4j.Category.forcedLog(Category.java:391) 
at org.apache.log4j.Category.log(Category.java:856) 
at org.slf4j.impl.Log4jLoggerAdapter.error(Log4jLoggerAdapter.java:540) 
at com.datatorrent.stram.engine.StreamingContainer$2.run(StreamingContainer.java:1431) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.spi.ThrowableInformation 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 5 more 

例外2:

Exception in thread "[email protected]" java.lang.NoClassDefFoundError: com/google/common/collect/LinkedListMultimap$3 
at com.google.common.collect.LinkedListMultimap.values(LinkedListMultimap.java:846) 
at org.apache.hadoop.hdfs.PeerCache.clear(PeerCache.java:271) 
at org.apache.hadoop.hdfs.PeerCache$1.run(PeerCache.java:128) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.LinkedListMultimap$3 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 

例外3:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/helpers/NullEnumeration 
at org.apache.log4j.Category.getAllAppenders(Category.java:413) 
at org.apache.log4j.Category.closeNestedAppenders(Category.java:226) 
at org.apache.log4j.Hierarchy.shutdown(Hierarchy.java:467) 
at org.apache.log4j.LogManager.shutdown(LogManager.java:267) 
at com.datatorrent.stram.engine.StreamingContainer.main(StreamingContainer.java:332) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.helpers.NullEnumeration 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 5 morexception in thread "Thread-3" java.lang.NoClassDefFoundError: org/apache/hadoop/util/ShutdownHookManager$2 
at org.apache.hadoop.util.ShutdownHookManager.getShutdownHooksInOrder(ShutdownHookManager.java:124) 
at org.apache.hadoop.util.ShutdownHookManager$1.run(ShutdownHookManager.java:52) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.util.ShutdownHookManager$2 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 2 more 

请让我知道需要做什么。我尝试添加一些,但没有奏效。请建议。

回答

0

在你的POM包含以下相关

<!-- https://mvnrepository.com/artifact/log4j/apache-log4j-extras --> 
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>apache-log4j-extras</artifactId> 
    <version>1.1</version> 
</dependency> 

<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> 
<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>19.0</version> 
</dependency> 

这些失踪,因为你得到的例外。

以下是STS中POM编辑器依赖性选项卡的屏幕截图。最新的日食也应该有它。

enter image description here

您还可以使用下面的命令来检查依赖关系。

mvn dependency:tree 
+0

我曾尝试在现在和现在添加这些依赖关系,但它是相同的问题。我猜这个问题是因为重复的依赖关系,而不是缺少依赖关系。 – thevillageguy

+0

你能帮我理解一下,我添加的上述依赖关系是否增加了任何与log4j或番石榴有关的重复依赖关系? – thevillageguy

+0

Jars与'artifactId-version'名称一起打包,因此您包含在相同artifactId和版本中的任何依赖项只会包含一次。但是,你应该检查你是否已经有了不同版本的log4j,如果你确实已经有'log4j-extra'版本更改为你自己的log4j版本。 – 11thdimension

0

你有没有尝试这个办法:

mvn clean install -U 

-U请行家给力依赖的更新。

+0

我现在试过但仍然是同样的问题。 – thevillageguy

+0

我想如果是因为重复的类加载不确定,但是要排除什么。 – thevillageguy

0

我接受了上面的答案,因为用户向我解释了一种识别重复依赖项的方法。

这实际上是来自POM和运行时环境的重复hadoop依赖关系的问题。