2010-07-18 34 views
3

我有一個現有的jar文件,我運行。它是Selenium RC服務器。我希望能夠更改JVM httpProxy.host/port/etc系統值。一方面,我可以修改源代碼並添加此功能。需要一些時間。是否有另一種可能的方式來做到這一點?就像我有自己的JAR(它可以設置這些JVM屬性)在同一個JVM實例內調用selenium-rc(這樣就可以修改它的JVM變量的值)?Java:通過運行時修改系統屬性

回答

5

您可以定義在命令行上的系統性能,採用

-DpropertyName=propertyValue 

所以,你可以寫

java -jar selenium-rc.jar -Dhttp.proxyHost=YourProxyHost -Dhttp.proxyPort=YourProxyPort 

Java - the java application launcher

編輯:

你可以寫一個包裝器是一個應用程序啓動器。在類中使用反射來模擬調用main方法很容易。然後您可以在啓動最終應用程序之前通過System.setProperty設置系統屬性。例如,

public class AppWrapper 
{ 
/* args[0] - class to launch */  
    public static void main(String[] args) throws Exception 
    { // error checking omitted for brevity 
     Class app = Class.forName(args[0]); 
     Method main = app.getDeclaredMethod("main", new Class[] { (new String[1]).getClass()}); 
     String[] appArgs = new String[args.length-1]; 
     System.arraycopy(args, 1, appArgs, 0, appArgs.length); 
     System.setProperty("http.proxyHost", "someHost"); 
     main.invoke(null, appArgs); 
    } 
} 
+0

我知道,但我想在運行時執行此操作...而不是在啓動期間執行此操作。謝謝,雖然..... – Zombies 2010-07-18 23:52:44

+0

好吧,這個問題不太清楚你想要達到什麼。 downvote似乎苛刻。 – mdma 2010-07-18 23:57:15

+0

我把那個倒票倒過來:) – Zombies 2010-07-19 01:27:19

2

使用System.setProperty()方法。

+0

我知道......我想這樣做而不必修改selenium-rc。 – Zombies 2010-07-18 22:47:18

+1

你有沒有在你的代碼中試過這個?你不需要修改Selenium RC。 鑑於您現有的客戶端代碼(運行Selenium RC)運行在同一個JVM中,設置系統屬性將真正起作用。 – yclian 2010-07-19 00:48:05

+0

OH!?我不知道客戶端也運行在同一個JVM中......但是這可能會干擾客戶端,客戶端是否不會嘗試通過遠程(以及非常慢的)代理連接之前(嘗試)連接回到硒-rc? – Zombies 2010-07-19 01:29:50