我正在尝试打包一些java代码,这些代码引用了HadoopAPI for java。我正在我的电脑上写代码,并将其移动到centos虚拟机,然后编译它。
出于某种原因,当我运行javac命令然后取消jar产品文件时 ./META-INF/MANIFEST.MF
文件没有定义主类的行,例如“main class:folder1.folder2.file”。我相信这就是为什么我得到一个“在尝试运行hadoop.jar时没有主清单属性”的原因。
为了逐步完成这个过程,我使用netbeans编写了代码并导入hadoopapi.jar文件。保存之后,我将hadoop.java(这是唯一一个包含hadoopapi以外的代码的文件)文件上传到 /usr/dan
目录。
从 /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
然后得到错误。
我需要上传到vm的唯一重要文件是.java文件吗?我有hadoopapi jar文件 /usr/hadoop-0.20.2/hadoop-0.20.2-core.jar
?
一旦我执行javac命令,api就包含在.class文件中,我不再需要它了 /usr/hadoop-0.20.2/hadoop-0.20.2-core.jar
,对吗?或者该文件是否需要保留在相对于.jar文件的特定路径中?
清单文件中没有定义main方法的可能原因是什么?
非常感谢你的帮助,我整个周末都在绞尽脑汁。
编辑:
默认情况下,清单包含几乎为空的内容,如前所述here:httphttp://docs.oracle.com/javase/tutorial/deployment/jar/defman.html。我可以使用 m
旗帜。我是根据http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html. 在我看来,这是在jar文件创建之后必须完成的事情,但只是添加 m
当最初对文件进行jaring时,使用适当的组件标记将一次性完成该操作。
2条答案
按热度按时间s4n0splo1#
如果你通过
jar
命令并需要其他清单条目(例如Main-Class
),您需要使用m
选项使用合适的清单文件(可以包含普通清单条目行)。
9fkzdhlc2#
在hadoop中,不需要有一个可运行的jar来执行。hadoop提供了一个运行jar的实用程序。您可以使用以下命令来执行一个jar,它是不可运行的(main类在./meta-inf/manifest.mf中丢失)
如果没有任何包,请使用以下命令