【发布时间】:2012-02-01 11:44:21
【问题描述】:
我正在尝试使用 Maven 构建 Hadoop 作业。当我不使用 Maven 并直接将 Hadoop Jar 依赖导入到 eclipse 中时,这项工作效果很好。
我还能够使用 Maven 构建一个简单的 jar(hello world 类型),而无需依赖 Hadoop。
但是当我添加 Hadoop 依赖项并运行 jar 时,我得到了这个错误:
dataException in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
at org.graphhadoop.CreateAdjacency.Adjacency(CreateAdjacency.java:74)
at org.graphhadoop.Driver.main(Driver.java:12)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 2 more
pom 文件更改如下:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.20.203.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.graphhadoop.Driver</mainClass>
</manifest>
</archive>
<manifestEntries>
<Class-Path>../target/classes</Class-Path>
</manifestEntries>
</configuration>
</plugin>
</plugins>
</build>
我哪里错了?
编辑:
目前,我在本地运行 Jar - 不是在 Hadoop 上,而是在本地数据上。
java -jar jarname.jar
【问题讨论】:
-
除非你正在制作一个包含所有依赖项的 jar,否则你需要在执行类路径上拥有依赖项。
-
例如this SO answer,虽然还有很多其他参考。
-
感谢戴夫!这个问题已经解决了,我已经发布了答案
标签: maven hadoop dependencies