2013-07-06 40 views
2

我想用下面的命令如何從類內部運行jar文件?

java Main -host arg1 arg2 

但我已經遇到了一些troble爲我做了分開包裝項目運行程序。所以我得到一個jar文件,不能從上面的關鍵字運行main。我必須從命令行調用jar文件。

java -jar Main.jar arg1 arg2 

但是我不希望那樣做,因爲它違背了我的規範。

你能幫助我嗎?

規格

只有文本的應用程序是所有需要的。它必須是網絡並運行,可以是主機(服務器)或命令行使用命令的客戶端 :

java BankApp -host PORT 
java BankApp -client MACHINE PORT 

以分別開始作爲主機或客戶機。例如,如果你知道主機是在端口8888上運行的阿羅哈你 將連接用:

java BankApp -client aloha 8888 

什麼,我需要做的運行如下。

java -jar C:\Users\UniversityofBristol\Desktop\BankApp\BankApp\dist BankApp.jar arg1 arg2 

公共將爲BankApp類{

public static void main(String[] args) throws IOException, ClassNotFoundException { 


    String current = new java.io.File(".").getCanonicalPath(); 
    current = "java -jar " + current + "\\dist"; 
    current = "\"" + current + "\""; 
    current = current + " BankApp.jar"; 
    System.out.println("Current dir:" + current); 

    // Run a java app in a separate system process 
    Process proc = Runtime.getRuntime().exec(current); 
    // Then retreive the process output 
    InputStream in = proc.getInputStream(); 
    InputStream err = proc.getErrorStream(); 

} 

}

+1

,如果我知道你的規範,我可以幫助! –

+0

嗨,我剛剛上傳規格! –

+0

@AdityaSaxena - 看看在[的ProcessBuilder(http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html)的Javadoc對如何啓動一個很好的例子流程。請注意,可執行文件和參數都在單獨的字符串中! –

回答

0

只要把你的罐子在classpath。你可以打破規範一點點,說:

java -cp bankapp.jar BankApp arg1 arg2 

或設置$ CLASSPATH環境變量(這是醜陋的,我從來沒有真正做到這一點以外的劇本,但它的工作原理):

export CLASSPATH=path/to/your/jar 
java BankApp arg1 arg2 

擾流板

+0

謝謝!但我不得不添加任何有關論據。我嘗試創建一個虛擬的BankApp類,並嘗試從它調用jarfile。 –

+0

-cp bankapp.jar是不允許的。我已經看到了。它必須是Java BankApp -host arg1 arg2 ... –

+0

然後使用第二種方法(定義CLASSPATH變量)。你的規格是否真的*嚴格,你不能添加Java虛擬機選項? –

1

如果要在單獨的進程中運行.jar,請參閱this answer

否則,我認爲你可以將其添加到您的項目(在任何IDE您使用在項目屬性的樣子),並把它作爲任何其他庫。