如何在Java中管理依赖项

时间:2011-03-14 03:16:51

标签: java reference hadoop

我是Java的新手,我正在尝试构建一个Hadoop MapReduce程序。我添加了/usr/lib/hadoop/hadoop-core.jar,一切都很好。当我将项目导出为jar file并尝试运行它时,它会在我运行时为我提供ClassNotFoundException因为它不在哪里找到hadoop-core.jar。我该如何解决这个问题?

5 个答案:

答案 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)

这应该有助于The java application launcher

答案 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,提供了几种选择,可以满足您的需求。