2012-06-12 42 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

相關問題