2012-06-12 21 views
1

我有一个jar文件,其清单文件中包含预定义的入口点。它可以成功执行。Main-Class:Manifest - 如何使用参数定义入口点[尚未解决]

hadoop jar hadoop-test-1.0.2.jar -write -nrFiles 1 -fileSize 10 
TestDFSIO.0.0.4 
12/06/11 21:35:09 INFO fs.TestDFSIO: nrFiles = 1 
12/06/11 21:35:09 INFO fs.TestDFSIO: fileSize (MB) = 10 
12/06/11 21:35:09 INFO fs.TestDFSIO: bufferSize = 1000000 
12/06/11 21:35:09 INFO fs.TestDFSIO: creating control file: 10 mega bytes, 1 files 
12/06/11 21:35:09 INFO fs.TestDFSIO: created control files for: 1 files 
12/06/11 21:35:10 INFO mapred.FileInputFormat: Total input paths to process : 1 
12/06/11 21:35:10 INFO mapred.JobClient: Running job: job_201206110904_0029 
12/06/11 21:35:11 INFO mapred.JobClient: map 0% reduce 0% 
12/06/11 21:35:25 INFO mapred.JobClient: map 100% reduce 0% 
12/06/11 21:35:37 INFO mapred.JobClient: map 100% reduce 100% 
... 

现在我关心的是如何在没有选项的情况下执行jar。 我的意思是我只是想调用:

hadoop jar hadoop-test-1.0.2.jar 

我需要以某种方式定义诸如"-write -nrFiles 1 -fileSize 10"的jar文件中的参数。但是如何?

如何在清单文件中定义它?我知道我可以生成一个我自己的类,然后用这些参数启动测试类。但是有没有其他的解决方法?

Thx!

令人惊讶的是:定义了一个用args调用所需类的类。

执行尝试:

hadoop jar hadoop-test-1.0.2.jar 
RunJar jarFile [mainClass] args... 

随着班级为arg的名称,它的工作原理!我舱单

hadoop jar hadoop-test-1.0.2.jar Start 
TestDFSIO.0.0.4 
12/06/12 01:05:11 INFO fs.TestDFSIO: nrFiles = 10 
12/06/12 01:05:11 INFO fs.TestDFSIO: fileSize (MB) = 1000 
12/06/12 01:05:11 INFO fs.TestDFSIO: bufferSize = 1000000 
12/06/12 01:05:11 INFO fs.TestDFSIO: creating control file: 1000 mega bytes, 10 files 
12/06/12 01:05:11 INFO fs.TestDFSIO: created control files for: 10 files 
12/06/12 01:05:11 INFO mapred.FileInputFormat: Total input paths to process : 10 
12/06/12 01:05:12 INFO mapred.JobClient: Running job: job_201206110904_0033 
... 

内容:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.1 
Created-By: 20.1-b02 (Sun Microsystems Inc.) 
Main-Class: Start 

Name: org/apache/hadoop 
Implementation-Title: Hadoop 
Implementation-Version: 1.0.2 
Implementation-Vendor: Apache 

的Start.java的内容:

import org.apache.hadoop.fs.TestDFSIO; 
public class Start { 

     public static void main(String[] args) throws Exception{ 
       String [] myargs = {"-write","-nrFiles","10","-fileSize","1000"}; 

       TestDFSIO.main(myargs); 

     } 
} 

我在做什么错?为什么我无法执行开始使用没有参数的jar文件来执行原始类TestDFIO?谢谢!

回答

1

没有。您可以创建一个新的main方法或从其他地方获取参数,例如,配置文件,环境变量等。

您也可以编写一个包装外壳脚本来完成该部分。

不知道为什么您需要这样做,提供可操作的想法更加困难。

+0

我使用一个工具来执行我的jar文件,它不给任何提供参数的机会。它应该是一个jar文件,可以用jar myjarfile.jar来执行。就是这样,没有更多的复杂性。我只能执行jar文件。听起来很奇怪。唯一的方法是用另一个类用参数调用所提到的类来创建另一个jar? – Bob

+0

@Bob什么工具(a)只允许你运行罐子,(b)没有关于命令行参数的规定?获取新工具。我不明白你的选择是什么,尽管你可以执行它。 –

+0

此解决方案有效,但我同意@DaveNewton,您使用的工具似乎更多的是一个障碍,而不是帮助! – aglassman

1

你不能那样做。相反,您可以尝试创建另一个没有参数的主类,并使用您需要的参数调用原始主类。

+0

我是否达到了jar配置的不同可能性的限制? :-) – Bob

+0

我认为你的解决方案类型被称为包装。 – Bob

+0

:)我只注意到你的问题已经有了这个解决方案。无论如何,我认为这是唯一的解决方案。 – tibtof

相关问题