簡體   English   中英

從代碼中調用jar中的Java類

[英]Invoke java class in jar from code

我有一個由maven創建的jar,其中包含所有依賴項。 我有另一個Java代碼想要將該jar用作庫。 我的Java代碼和jar中的類屬於兩個不同的包。

下面顯示了我如何在jar中運行主類:

java -Dlog4j.configurationFile=src/test/resources/log4j2.xml 
     -cp pathtojars com.mainclass "parameters to mainclass" "inputfile"

我如何在Java代碼執行完成后調用jar中的主類(等同於上述命令),並將其STDOUT作為變量獲取?

您可以使用ProcessBuilder來執行此類操作,但是是否應該從另一個Java程序調用Java程序是另一個問題:

Process process = new ProcessBuilder("java", "-Dlog4j.configurationFile=src/test/resources/log4j2.xml", "-cp", "pathtojars com.mainclass", "\"parameters to mainclass\"", "\"inputfile\"").start();
OutputStream os = process.getOutputStream();

另外,如果您只想讀取控制台輸出,則可以執行以下操作

ProcessBuilder procBuilder = new ProcessBuilder("java", "-Dlog4j.configurationFile=src/test/resources/log4j2.xml", "-cp", "pathtojars com.mainclass", "\"parameters to mainclass\"", "\"inputfile\"");
String OUTPUT_FILE = "C:/temp/testFile.txt";
File outFile = new File(OUTPUT_FILE);
procBuilder.redirectOutput(outFile);
Process process = procBuilder.start();
outFile = new File(OUTPUT_FILE);
String content = FileUtils.readFileToString(outFile, "UTF-8");
System.out.println(content);

或者,您也可以編寫類似於以下ProcessBuilder的內容:在不阻塞主線程的情況下轉發已啟動進程的stdout和stderr

正如dici指出的那樣,您首先需要獲取流程的OutPutStream並以所需的方式對其進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM