javac不创建主类引用

yv5phkfx  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(331)

我正在尝试打包一些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时,使用适当的组件标记将一次性完成该操作。

s4n0splo

s4n0splo1#

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

jar cmf manifest-file jar-file content-files

使用合适的清单文件(可以包含普通清单条目行)。

9fkzdhlc

9fkzdhlc2#

在hadoop中,不需要有一个可运行的jar来执行。hadoop提供了一个运行jar的实用程序。您可以使用以下命令来执行一个jar,它是不可运行的(main类在./meta-inf/manifest.mf中丢失)

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

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

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

相关问题