2013-06-19 14 views
2

我已將兩個單獨的JAR(共享大量代碼)合併到一個JAR中。目前爲止沒有問題,因爲您可以在JAR中使用多個static void main()帶多個main()的JAR - 如何從第一個開始第二個應用程序?

主要的應用程序直接調用:

java -jar myjar.jar arg1 arg2 

其他應用程序需要的其替代main()明確調用:

java -classpath myjar.jar alternative.main arg1 

沒有太大的問題無論是。

不過,現在我得叫內主要的一個從替代應用。

我可以這樣做:

Runtime.getRuntime().exec("java -classpath myjar.jar alternative.main arg1"); 

但是,這在我看來是缺乏一些技巧。有沒有更多的優雅/有效的方式來啓動第二個替代品main()

+2

如果是在一個罐子反正,不能你只需** **調用其他'main'方法?或者你需要單獨的操作系統進程/ JVM嗎? –

+0

1)如果退回到使用'Process'。閱讀(並實現)*所有* [當Runtime.exec()不會](http://www.javaworld.com/jw-12-2000/jw-1229-traps.html)的建議。這可能會解決問題。如果不是,它應該提供更多關於失敗原因的信息。然後忽略它引用'exec'並使用'ProcessBuilder'構建'Process'。還要將'String arg'分解爲'String [] args'來解釋其本身包含空格的參數。 2)除非第一個應用程序,否則這真的是糟糕的設計。是一個'應用程序。套件啓動工具欄「。 –

+0

@AndrewThompson:糟糕的設計是,它應該是一個單一的應用程序開始。不幸的是,有時候你不得不接受低於平均水平的設計,因爲全面的重構不適合預算...... – DevSolar

回答

1

如果兩個主應用程序都可以在同一個JVM中運行並且該調用是同步的,那麼這應該起作用。

String[] args = { "arg1" }; 
alternative.main.main(args); 

如果呼叫不應該是同步的,但可能是同一個JVM中不同的線程,那麼你就可以創建一個新的線程它調用替代main方法。

如果它必須是一個單獨的進程/ JVM,那麼你所做的工作就足夠好了。或者,您可以使用java.lang.ProcessBuilder

1

你嘗試

alternative.main.main(new String[]{arg1}); 
+0

我有,但它失敗了,但事實證明這是一個完全不相關的原因。 ;-) – DevSolar

相關問題