2013-04-16 65 views
1

所以希望標題能夠涵蓋jist,我知道在這種類型的東西周圍有多個帖子,我特別遇到的問題是如何爲jar設置classpath目前正在運行其中包含該類。在當前jar中創建java進程來執行類

即我使用Maven程序集插件打包了我的jar,其中包含爆炸的所有依賴關係。所以我只是試圖創建一個子進程來執行我的jar中存在的一個依賴類,從我的jar中。如果可能的話?

由於下面這裏的post爲溶液:

URL baseUrl = getClass().getProtectionDomain().getCodeSource().getLocation(); 
       String myPath = (new File(baseUrl.toURI())).getCanonicalPath(); 

ProcessBuilder pb = new ProcessBuilder("javaw", "-cp", myPath, 
"jp.vmi.selenium.selenese.Main", config.getSuite().getAbsolutePath()); 

pb.redirectErrorStream(true); 

try 
{ 
    Process proc = pb.start(); 

    InputStream is = proc.getInputStream(); 
    BufferedInputStream bis = new BufferedInputStream(is); 

    int c; 

    while ((c = bis.read()) != -1) 
    { 
     System.out.write(c); 
    } 

    int exit = proc.waitFor(); 

在正確的方向的任何指針將不勝感激。

感謝,

+0

有什麼令人信服的理由說明,爲什麼你必須在新過程中運行你的類?否則,只需調用jp.vmi.selenium.selenese.Main類的靜態main()方法就會非常簡單! –

+0

我知道這一點。我想把它作爲一個新的過程來運行。 – buymypies

回答

1

OK,如果你絕對必須,你可以試試這個片段來找到你的 「當前」 JAR:

try 
    { 
     URL baseUrl = JavaApplication2.class.getProtectionDomain().getCodeSource().getLocation(); 
     String myPath = (new File(baseUrl.toURI())).getCanonicalPath(); 
     System.out.println("Path is " + myPath); 
    } 
    catch (IOException ex) 
    { 
     // Deal with exception 
    } 
    catch (URISyntaxException ex) 
    { 
     // Deal with exception 
    } 

而不是在你的應用程序/ JAR 「JavaApplication2」 使用任何類。 (或只是getClass(),也應該在非靜態環境中工作)

+0

ta,工作過。 – buymypies