2012-05-21 134 views
0

我寫了一個快速的Java包裝器,它可以關閉NMAP可執行文件並等待它完成。我正在使用Eclipse。我想在我的Java jar文件中包含NMAP源代碼/可執行文件 ,以便我擁有一個自包含的軟件包。Java + jar文件

在Eclipse中,我添加了NMAP文件夾層次結構。在Eclipse中,我可以看到Java正確地啓動了NMAP工具,並在退出之前等待實用程序結束。
到目前爲止,這麼好。然後我用eclipse導出一個JAR文件。我可以看到NMAP文件夾層次結構。但是,當我嘗試運行JAR文件時,無法找到nmap.exe。可以用jar文件調用外部可執行文件嗎?如果不是,我的選擇是什麼 ?如果是這樣,爲什麼它不能在jar文件中找到它可以在Eclipse中找到它?

謝謝。

回答

1

您需要將.exe及其必需的支持文件提取到磁盤上,然後才能以普通文件的形式訪問它們(我相信這是通過標準方法執行的)。您可以查看如何使用jar中的某個類文件使用getResourceAsStream()將資源從jar複製到文件的示例。

提取完畢,您可以執行是你現在正在做的(你可能需要確保執行權等根據您的操作系統)

1

「執行本地程序」工具不知道如何調用EXE - 其他文件(如ZIP或JAR)內的文件。

如果你想這樣做,你必須將文件提取到文件系統位置並在那裏調用它。由於Linux發行版的多樣性(PowerPC?其他庫版本等),您應該請求用戶安裝它並調用它,而不是自帶。

1

據我所知,你不能執行嵌入到jar文件中的可執行文件。

一個解決方案是將可執行文件嵌入到jar文件中。然後使用getClass().getResourceAsStream("/path/to/executable")來檢索字節並將它們輸出到臨時文件(File.createTempFile())。在UN * X系統上,在嘗試執行之前,您必須先執行chmod u+x file。最終,您可以刪除臨時文件或創建一次文件並每次重複使用,並致電deleteOnExit()

當然,這個解決方案意味着你有可在所有平臺上工作的可執行文件。

您的解決方案可能在eclipse中工作,因爲您的「可執行」文件不在jar中。

0

由於Nmap不適用於商業軟件,您可能還必須小心如何分發此文件。

Java有一個開源庫來調用Nmap,但它假定Nmap安裝在您運行代碼的操作系統上。該API是Nmap4j,它位於sourceforge.net上。