2012-08-12 103 views
0

我在NetBeans中開發兩個Java應用程序,我需要在第一個應用程序中運行第二個應用程序。我這樣做是使用下面的代碼:自動處理依賴關係

ProcessBuilder pb = new ProcessBuilder("java", "Second App Main Class Name"); 
pb.start(); 

的問題是,第二個應用程序有我加入Netbeans中引用依賴一個龐大的數字。但是當我使用上面的代碼運行它時,Java顯然找不到它們。

由於我的項目使用了很多庫,我能否以某種方式自動處理所有Classpath

回答

1

嗯,這裏的問題是,你真的沒有在你的第二個Java應用程序的環境中配置的類路徑,所以即使你可以調用主類本身你說,)沒有發現其他依賴關係。我也猜測,即使你使用類似Maven或Ant的東西,如果你正在使用不同的類路徑構建兩個獨立的Java應用程序(但是你知道另一個類路徑,那麼你可以做這樣的事情,以便告訴的ProcessBuilder如何找到正確的JAR和類文件你的第二個應用程序:

public int exec(Class<?> clazz) throws IOException, 
              InterruptedException { 
    String javaHome = System.getProperty("java.home"); 
    String javaBin = javaHome + 
      File.separator + "bin" + 
      File.separator + "java"; 

    /* This is where you want to set up your Classpath for the second app */ 
    String classpath = System.getProperty("java.class.path"); 
    String className = clazz.getCanonicalName(); 

    ProcessBuilder builder = new ProcessBuilder(
      javaBin, "-cp", classpath, className); 

    Process process = builder.start(); 
    process.waitFor(); 
    return process.exitValue(); 
} 

但我懷疑你爲什麼從NetBeans中啓動應用程序 - assumedly則需要最終通過命令行啓動這兩個應用程序。如果您不能從命令行啓動應用程序,那麼您將無法從Java啓動它們.StorageBuilder只是用作系統中其他程序的命令行啓動程序。

0

我會直接運行第二個應用程序的main方法,而不是產生新的進程。處理外部進程有點複雜,尤其是從控制檯讀取時。

+0

謝謝,這就是我通常做的,但目前我需要測試Intraprocess連接和這些類型的東西,我堅持嚴重:( – MBZ 2012-08-12 12:11:52

0

您可以使用像Maven或Ant這樣的構建工具,並根據您的工具將項目導入爲Maven或Ant項目。 Maven很好地處理傳遞依賴。檢查這個鏈接的Maven文檔:http://maven.apache.org/