Java gradle、giraph和hadoop的NoClassDefFoundError
所以,我一直在四处寻找,我没有找到一个好的答案来回答我的问题,这让我发疯,所以我想我应该在这里问一下,希望我能得到帮助。我正在尝试使用gradle在Giraph项目中进行自动化测试。我对格拉德尔完全是个初学者。为了开始,我将SimpleShortTestPathComputing类的测试代码复制到我的项目中,以确保能够启动并运行测试。然而,当我进行Java gradle、giraph和hadoop的NoClassDefFoundError,java,hadoop,gradle,noclassdeffounderror,giraph,Java,Hadoop,Gradle,Noclassdeffounderror,Giraph,所以,我一直在四处寻找,我没有找到一个好的答案来回答我的问题,这让我发疯,所以我想我应该在这里问一下,希望我能得到帮助。我正在尝试使用gradle在Giraph项目中进行自动化测试。我对格拉德尔完全是个初学者。为了开始,我将SimpleShortTestPathComputing类的测试代码复制到我的项目中,以确保能够启动并运行测试。然而,当我进行梯度测试时,我得到以下错误: $ gradle test --info <skipping some output here...> S
梯度测试时,我得到以下错误:
$ gradle test --info
<skipping some output here...>
Successfully started process 'Gradle Test Executor 1'
Gradle Test Executor 1 started executing tests.
WCCTest > testToyData FAILED
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:142)
at WCCTest.testToyData(WCCTest.java:180)
Caused by:
java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
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:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 2 more
Gradle Test Executor 1 finished executing tests.
WCCTest > testOnShorterPathFound FAILED
java.lang.NoClassDefFoundError: org.apache.hadoop.conf.Configuration
at sun.reflect.GeneratedSerializationConstructorAccessor33.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
at org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:59)
at org.mockito.internal.creation.jmock.ClassImposterizer.createProxy(ClassImposterizer.java:128)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:63)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56)
at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:51)
at org.mockito.Mockito.mock(Mockito.java:1243)
at org.mockito.Mockito.mock(Mockito.java:1120)
at org.apache.giraph.utils.MockUtils$MockedEnvironment.<init>(MockUtils.java:68)
at org.apache.giraph.utils.MockUtils.prepareVertexAndComputation(MockUtils.java:132)
at WCCTest.testOnShorterPathFound(WCCTest.java:64)
WCCTest > testToyDataJson FAILED
java.lang.NoClassDefFoundError: Could not initialize class org.apache.giraph.conf.GiraphConfiguration
at WCCTest.testToyDataJson(WCCTest.java:127)
WCCTest > testOnNoShorterPathFound FAILED
java.lang.NoClassDefFoundError: org.apache.hadoop.conf.Configuration
at sun.reflect.GeneratedSerializationConstructorAccessor33.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
at org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:59)
at org.mockito.internal.creation.jmock.ClassImposterizer.createProxy(ClassImposterizer.java:128)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:63)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56)
at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:51)
at org.mockito.Mockito.mock(Mockito.java:1243)
at org.mockito.Mockito.mock(Mockito.java:1120)
at org.apache.giraph.utils.MockUtils$MockedEnvironment.<init>(MockUtils.java:68)
at org.apache.giraph.utils.MockUtils.prepareVertexAndComputation(MockUtils.java:132)
at WCCTest.testOnNoShorterPathFound(WCCTest.java:95)
4 tests completed, 4 failed
<more output...>
:test FAILED
:test (Thread[main,5,main]) completed. Took 1.663 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///...build/reports/tests/index.html
BUILD FAILED
它编译起来没有问题,我作为依赖项包含的jar文件包括它表示为NoClassDefFoundError的类(根据jar tf
)。知道我做错了什么吗?提前感谢。尝试将以下内容添加到您的build.gradle中
println("HADOOP_HOME=$HADOOP_HOME")
compile files("$HADOOP_HOME/hadoop-core-0.20.203.0.jar")
println("System.env.HADOOP_HOME=$System.env.HADOOP_HOME")
compile files("$System.env.HADOOP_HOME/hadoop-core-0.20.203.0.jar")
事实证明,我只需将$HADOOP_HOME/lib目录中的一些jar添加到依赖项中,就可以了。一旦我为org/apache/commons/logging/LogFactory添加了依赖项,它就清除了hadoop配置类的错误,之后我只需添加其他必需的JAR。嘿,谢谢你的帮助。实际上:$jar tf hadoop-core-0.20.203.0.jar | grep Configur
输出:org/apache/hadoop/conf/Configurable.class org/apache/hadoop/conf/Configuration$1.class org/apache/hadoop/conf/Configuration$integerages$Range.class org/apache/hadoop/conf/Configuration.class
再加上一些其他的东西。另外,当我使用这个编译组时,我还遇到了一些其他错误:java.lang.ClassNotFoundException:org.apache.commons.configuration.configuration
javax.security.auth.login.LoginException:java.lang.NoClassDefFoundError
etc不确定这里是否应该在原始帖子中添加完整的新输出,你能详细介绍一下使用$HADOOP_HOME吗?你的意思是把它放进编译文件($HADOOP\u HOME)
里面吗?如果我这样做,它似乎根本不包含任何内容,而且我必须包含核心jar。我真的很感谢你的帮助。对不起,我以前的回答不正确。我已经更新了我的答案。你能试试吗?请注意:在HADOOP_HOME未定义的前两行中使用双引号not single oneWell(我只是将其放在示例代码中以隐藏文件系统中的实际路径)。第二行可以工作,但这只是给了我已经有了相同的东西,所以我得到了相同的错误
println("HADOOP_HOME=$HADOOP_HOME")
compile files("$HADOOP_HOME/hadoop-core-0.20.203.0.jar")
println("System.env.HADOOP_HOME=$System.env.HADOOP_HOME")
compile files("$System.env.HADOOP_HOME/hadoop-core-0.20.203.0.jar")