我是Java的新手,我正在尝试构建一个Hadoop MapReduce程序。我添加了/usr/lib/hadoop/hadoop-core.jar
,一切都很好。当我将项目导出为jar file
并尝试运行它时,它会在我运行时为我提供ClassNotFoundException
因为它不在哪里找到hadoop-core.jar
。我该如何解决这个问题?
答案 0 :(得分:2)
一种方法是将所需资源的引用添加到主Jar的清单文件中。引用是相对的,因此最常见的做法是确保主Jars和从属Jars位于同一目录中。
如果部署为applet,则可以在applet元素的archive属性中引用Jar。
如果使用Java Web Start进行部署,则可以在JNLP启动文件中引用Jar。
编辑1:清单假设依赖Jar位于app所在目录的'hadoop'子目录中。位于。
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Main-Class: org.pscode.wigglyworms.WigglyWorms
Class-Path: hadoop/hadoop-core.jar
Implementation-Title: Wiggly Worms
Implementation-Version: 11.03.13
Implementation-Vendor: PSCode - Andrew Thompson
Implementation-Vendor-Id: org.pscode
Created-By: 1.6.0-b105 (Sun Microsystems Inc.)
请注意,清单文件应以单个空行结束(即使使用代码的“预格式化”模式也难以表示)。出于这个原因,我强烈建议您将清单的创建留给知道如何编写它们的工具。我的选择是Ant构建工具。
有关详细信息,请参阅Java教程中“JAR文件中的打包程序”课程的Adding Classes to the JAR File's Classpath部分。
答案 1 :(得分:1)
答案 2 :(得分:1)
jar命令不会在你构建的jar中包含hadoop-core.jar
。因此,在运行时(即执行java
命令时),您需要在类路径上指定hadoop。查看-cp
或-classpath
命令行参数。基本上它看起来像这样:
java -cp myjar.jar;hadoop-core.jar package.Main
答案 3 :(得分:0)
当你运行你构建的jar文件时,它需要有一个CLASSPATH环境变量,它包含/usr/lib/hadoop/hadoop-core.jar的完整路径,它可能看起来像这样
set CLASSPATH=/usr/lib/hadoop/hadoop-core.jar
export CLASSPATH
存在其他技术,但基本思想是您的JVM知道您构建类的位置,但它不知道在哪里查找hadoop-core类。
答案 4 :(得分:0)
最简单的方法是使用File - >出口 - > Runnable jar,提供了几种选择,可以满足您的需求。