2012-03-01 33 views
5

我有一個正在運行的Java進程(守護進程)。這個過程像服務一樣使用。通過該服務,我可以從受信任的服務器下載簽名的壓縮檔案。在解壓縮ZIP文件後,我想在「解壓縮」文件夾中執行二進制文件。在UNIX上使用Java部署和執行一些東西

問題是這個二進制文件是不可執行的(在它的文件模式下沒有'x')......我知道可以用Java來設置它,但我想要一個通用的方法。

你有什麼想法如何以一種很好的方式進行部署?

(是的,它需要的Java)

基本上,我想以後我解壓ZIP檔案恢復Unix文件模式位。有沒有可以做到這一點的Java庫?

+0

你是什麼意思的一個不錯的方法?如果您可以控制文件進入檔案,那麼只需確保二進制文件在打包之前有適當的模式。 – Perception 2012-03-01 18:50:13

+0

@Perception:並非所有的zip壓縮程序都支持存儲Unix文件模式位。並不是所有的zip解壓縮程序都支持恢復它... – thkala 2012-03-01 18:53:54

+0

@thkala這就是我需要的。有沒有可以做到這一點的Java庫? – alexvetter 2012-03-01 18:56:18

回答

3

您可以輕鬆地從您的Java應用程序callchmod命令中添加缺少的x位。在Unix上,chmod是可執行文件(x)的標準。你可以做straight from Java

但是,如果您希望可執行位保持解壓縮狀態,您應該不要使用Java解壓縮庫。嘗試使用Unix unzip命令來解壓縮您的壓縮文件 - 它支持存儲和恢復Unix文件模式位很長一段時間。如果你的Unix供應商沒有它,你可以從the source得到它。

+1

對不起,你沒有幫助。我可以直接從Java設置可執行標誌。我不知道所有的二進制文件,所以我不能設置標誌。最好的事情將是「解壓縮」檔案和旗幟已經設置。 – alexvetter 2012-03-01 18:53:12

+0

'unzip -X'保留GID/UID。問題是,jarsigner(我用於簽名的工具)不保存標誌。所以它不會與開箱即用。我想要添加一個包含所有可執行文件的metainfofile。 '找 。 -executable -type f'可以幫助解決這個問題。 – alexvetter 2012-03-02 13:56:54

+0

@alexvetter:當應用程序收到存檔時,可執行位已丟失: -/ – thkala 2012-03-02 14:04:23

0

如果您使用tar打包文件然後進行壓縮,它會保留您的權限,因爲它們在打包之前是一樣的。開箱時使用--preserve-permissions

相關問題