Javac不会创建主类参考

时间:2014-04-20 22:58:58

标签: java hadoop netbeans jar

我正在尝试打包一些java代码,这些代码引用了Java的Hadoop API。我正在我的PC上编写代码并将其移至CentOS VM然后进行编译。

出于某种原因,当我运行javac命令然后解压缩产品文件时,我的./META-INF/MANIFEST.MF文件没有定义主类的行,例如“Main-Class:folder1.folder2.file” 。我相信这就是为什么我在尝试运行Hadoop.jar时“没有主要的清单属性”。

只需逐步完成整个过程,我就可以使用netbeans编写代码并导入Hadoop API .jar文件。保存后,我将Hadoop.java(这是除Hadoop API之外的唯一代码文件)文件上传到/usr/dan目录中的VM。

/usr/dan我运行javac -classpath /usr/hadoop-0.20.2/hadoop-0.20.2-core.jar -d ./Hadoop ./Hadoop.java,没有显示任何错误。

然后我使用jar cvf ./Hadoop.jar -c ./Hadoop/创建jar文件。没有显示任何错误。

然后我尝试使用java -jar Hadoop.jar运行jar文件并获取错误。

我需要将唯一重要的文件上传到VM .java文件吗?我在/usr/hadoop-0.20.2/hadoop-0.20.2-core.jar中有Hadoop API jar文件?

执行javac命令后,API包含在.class文件中,我不再需要/usr/hadoop-0.20.2/hadoop-0.20.2-core.jar,对吗?或者此文件是否需要保留在相对于.jar文件的某个路径中?

清单文件中没有定义Main方法的可能原因是什么?

非常感谢任何帮助,我整个周末一直在绞尽脑汁。

编辑:

默认情况下,清单几乎为空,如下所述:http://docs.oracle.com/javase/tutorial/deployment/jar/defman.html。我可以使用m标志轻松地向清单文件添加条目。我的用法基于http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html。在我看来,这是在创建jar文件之后必须完成的事情,但是在最初震动文件时只需添加m标志和相应的组件就可以一次性完成。

2 个答案:

答案 0 :(得分:1)

如果您通过jar命令创建jar并想要其他清单条目(例如Main-Class),则需要使用m选项

jar cmf manifest-file jar-file content-files

使用合适的清单文件(可以包含简单的清单输入行)。

答案 1 :(得分:0)

在hadoop中,没有必要执行Runnable Jar。 Hadoop提出了一个运行Jars的实用程序。您可以使用以下命令执行Jar,它不是Runnable(./META-INF/MANIFEST.MF中缺少Main类)

hadoop jar Hadoop.jar <PackageName>.<MainClassName> /input /output

如果您没有任何包,请使用以下命令

hadoop jar Hadoop.jar <MainClassName> /input /output