2013-04-13 21 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