2015-02-08 68 views
0

我想知道是否有創建一個包含一些命令行參數的jar包的方法,通常在命令行中傳遞的參數當您嘗試啓動jar時這些參數然後傳遞給主函數)。基本上,而不是我的應用程序啓動使用預配置的命令行參數打包jar

java -jar myapp.jar "arg1" "arg2", I want to start my app with 
java -jar myapp.jar 

並有「arg1」和「arg2」傳遞給主函數。

背後的原因是我想將其部署到不同的環境中,我希望我的jar根據其部署環境包含不同的參數。

也許還有另一種方法來實現類似的結果?

乾杯。

PS:尋找一個maven解決方案。

編輯:我會添加一個完整的例子來說明這多一點明確:

比方說,我有2個環境:「生產」和「測試」。我想以相同的方式運行jar,而不管我在什麼環境下部署它。所以我總是想用它來運行:

java -jar myapp.jar 

但是!爲了讓我的2環境運行正常,我需要生產環境jar以參數「prod」啓動它的主要方法,我需要測試環境jar以參數「test」啓動它的主要方法。

回答

0

如果我正確理解你的問題,在你的main()你可以定義一個簡單的邏輯來處理你沒有指定任何輸入參數的情況;邏輯可以根據正確的平臺/ env檢索所需的值。

舉個例子:

public class Test01 
{ 
    public static void main(String... aaa) 
    { 
     // Check input 
     if(aaa.length == 0) { 
      /* Insert logic to retrieve the value you want, depending on the platform/environment. 
      * A trivial example could be: */ 
      aaa = new String[2]; 
      aaa[0] = "First value"; 
      aaa[1] = "Second value"; 
     } 

     // Processing, e.g. print the 2 input values 
     System.out.println(aaa[0] + ", " + aaa[1]); 
    } 
} 

僅供參考,我創建了可運行jar使用Eclipse,並通過兩種

java -jar Test01.jar 

java -jar Test01.jar arg1 arg2 

希望這有助於啓動應用程序!

0

一個解決方案是改變main(String [] args)從env var獲取值,如果它們不存在於傳遞的參數中。

String user; 
String password; 
if(args.length < 2) 
{ 
    user = System.getenv("appUser"); 
    password = System.getenv("appPassword"); 
} else { 
    user = args[0]; 
    password = args[1]; 
} 

您還可以創建另一個類,其中包含一個主函數,它將調用真實的函數。

public class CallerMyApp{ 

public void main(String[] args) { 

    String[] realArgs = {System.getenv("appUser"), System.getenv("appPassword")}; 
    MyApp.main(realArgs); 
} 

} 

然後執行它像

java -cp myapp.jar CallerMyApp