2012-03-01 37 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

相关问题