2013-04-13 20 views
2

我有一個包含一些可執行腳本文件的應用程序。我知道我們要部署應用程序的目標機器有java。因此,我將應用程序打包到java歸檔文件中,並使用「jar xf jarFileName」在目標機器上進行解壓縮。但可執行腳本不再可執行。是的,我們可以運行「chmod _x scriptName」。但是,在沒有用戶干預的情況下,從jar文件中提取腳本後腳本是否可執行?我已經閱讀:this related question但這並不是要保持可執行性。嵌入後可執行shell腳本仍可執行,然後從java檔案中提取?

+1

您可以使用tar檔案而不是jar,這將保留文件模式,我不知道沒有tar的* nix操作系統。 –

+1

@MarkHarviston ...說,POSIX指定'pax',而不是'tar',所以你在使用後者時依賴於非標準(儘管無處不在)的擴展。 (但公平地說,'pax'支持'ustar'格式的檔案)。 –

回答

0

好一個JAR文件實際上是ZIP文件,所以這個問題涵蓋了大部分的你問:Maintain file permissions when extracting from a zip file using JDK 5 api

的問題是,事情像執行位操作系統特定的,有在問題的各種使他們在不同的操作系統上工作。 「執行」位也不例外。一個典型的(外部)ZIP文件提取器應該能夠應付這種情況(以相關信息在ZIP文件中爲先!)。但是,當你以編程方式提取ZIP/JAR文件時,這樣做會涉及到拔出「額外數據」字節數組......我想。我不知道jar命令不...雖然你可以看看什麼樣的源代碼,如果你是遊戲...

如果知道該文件/腳本要解壓縮應該是可執行的,我主張簡單地修改提取過程以在提取後適當地設置執行位。在Java 7中,您可以使用新的NIO文件屬性API來完成這件事。或從外部運行chmod。您也可以嘗試使用unzip實用程序進行解壓縮,而不是使用jar ...儘管假設平臺已安裝unzip

+0

我正在讓用戶手動運行chmod。只是希望我忽略了一些可以自動實現的東西。我們只保留該文檔。 – markrboyd

0

如果你想部署在Windows以及像OS X這樣的unix上,那麼可以免費獲得標準實用程序的DOS/Windows版本,例如chmod。您可以將這些文件分發給應用程序(很可能),並設置路徑,以便在您的安裝腳本中找到您的Windows chmod.exe,當且僅當沒有可用的本地版本時纔會如在unix系統上那樣。您當然必須在不同的系統上進行足夠的測試,以確保在某些不常見的情況下這不會失敗。

+0

我們提供與.sh版本並行的.bat版本。而Windows只是識別擴展名。所以對於windows用戶來說,沒有額外的步驟來製作.bats可執行文件。謝謝。 – markrboyd