1

我是 JAVA 新手,无法弄清楚我创建的项目有什么问题。

我在 Eclipse 中创建了一个 JAVA 项目并导出了一个 jar(不可运行的 jar)。我在导出时未选中 .project 和 .classpath 文件选项。现在我正在尝试运行该 jar 并获得 NoClassDefFoundError:

我正在粘贴命令和以下错误:

C:\Users\Anjali>"C:\Program Files\Java\jre7\bin\java.exe" -classpath D:\Web\Hbas
eGateway\bin;C:\Users\Anjali\Downloads\Hbase\hbase-0.94.5-security.jar;C:\Users\
Anjali\Downloads\Hbase\lib\hadoop-core-1.0.4.jar;C:\Users\Anjali\Downloads\Hbase
\py4j0.7.jar -jar D:\Web\HbaseGateway\bin\HBaseGateway.jar
Exception in thread "main" java.lang.NoClassDefFoundError: py4j/GatewayServer
        at hbase.gateway.HBaseGatewayEntryPoint.main(HBaseGatewayEntryPoint.java
:22)
Caused by: java.lang.ClassNotFoundException: py4j.GatewayServer
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

现在,有趣的是我可以使用以下命令运行主类。在下面的命令中,我删除了 -jar 开关并将主类传递给 java.exe。

C:\Users\Anjali>"C:\Program Files\Java\jre7\bin\java.exe" -classpath D:\Web\Hbas
eGateway\bin;C:\Users\Anjali\Downloads\Hbase\hbase-0.94.5-security.jar;C:\Users\
Anjali\Downloads\Hbase\lib\hadoop-core-1.0.4.jar;C:\Users\Anjali\Downloads\Hbase
\py4j0.7.jar hbase.gateway.HBaseGatewayEntryPoint
Gateway Server Started

为什么NoClassDefFoundError会被抛出?我在这里错过了什么吗?

4

2 回答 2

4

要使-jar选项起作用,您必须在清单中添加Main-class键。请参阅 java 命令文档http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/java.html

-jar 选项

执行封装在 JAR 文件中的程序。第一个参数是 JAR 文件的名称,而不是启动类名称。为了使此选项起作用,JAR 文件的清单必须包含格式为Main-Class: classname的行。在这里,classname 标识具有用作应用程序起点的 public static void main(String[] args) 方法的类。

于 2013-04-13T12:26:16.260 回答
0

当您使用该-jar选项时,也会从MANIFEST.mf文件中读取类路径。从该-jar选项的文档中:

使用此选项时,JAR 文件是所有用户类的来源,其他用户类路径设置将被忽略。

这意味着您必须Class-Path在清单文件的一部分中添加所有依赖项。

于 2013-04-13T13:42:41.050 回答