可执行的shell脚本在嵌入java归档文件后,是否仍然可以执行?

可执行的shell脚本在嵌入java归档文件后,是否仍然可以执行?,java,shell,jar,Java,Shell,Jar,我有一个包含一些可执行脚本文件的应用程序。我知道我们将要在其上部署应用程序的目标机器有java。因此,我将应用程序打包到java归档中,并在目标机器上使用“jar xf jarFileName”进行解压缩。但可执行脚本不再是可执行的。是的,我们可以运行“chmod\u x scriptName”。但是,从jar文件中提取脚本后,脚本是否可以在没有用户干预的情况下执行?我已经读过了:但这并不是为了保持可执行性 JAR文件实际上是一个ZIP文件,所以这个问题涵盖了您要问的大部分问题: 问题是执行位之

我有一个包含一些可执行脚本文件的应用程序。我知道我们将要在其上部署应用程序的目标机器有java。因此,我将应用程序打包到java归档中,并在目标机器上使用“jar xf jarFileName”进行解压缩。但可执行脚本不再是可执行的。是的,我们可以运行“chmod\u x scriptName”。但是,从jar文件中提取脚本后,脚本是否可以在没有用户干预的情况下执行?我已经读过了:但这并不是为了保持可执行性

JAR文件实际上是一个ZIP文件,所以这个问题涵盖了您要问的大部分问题:

问题是执行位之类的东西是特定于操作系统的,在使它们跨不同的操作系统工作时存在各种各样的问题。“执行”位也不例外。一个典型的(外部)ZIP文件提取器应该能够处理这个问题(相关信息首先在ZIP文件中的模!)。但是,当您以编程方式提取ZIP/JAR文件时,执行此操作将涉及取消“额外数据”字节数组的粘贴。。。我想。我不知道
jar
命令做什么。。。虽然你可以看看源代码,如果你是游戏


如果您知道要提取的文件/脚本应该是可执行的,我建议您只需修改提取过程,以便在提取后适当地设置执行位。在Java7中,您可以通过新的NIO文件属性API来实现这一点。或者从外部运行
chmod
。您还可以尝试使用
unzip
实用程序而不是
jar
进行解压缩。。。尽管这假设平台已经安装了
unzip

如果您想在Windows以及Unix(如OS X)上部署,可以免费使用标准实用程序(如chmod)的DOS/Windows版本。很可能,您可以将这些文件与应用程序一起分发,并设置路径,以便安装脚本可以找到您的Windows chmod.exe,如果且仅当没有可用的本机版本时(如unix系统上)。当然,您必须在不同的系统上进行足够的测试,以确保这不会在某些不寻常的情况下失败。

您可以使用tar存档而不是jar,这将保留文件模式,我不知道没有tar的*nix操作系统。@MarkHarviston…也就是说,POSIX指定的是
pax
,而不是
tar
,因此,在使用后者时,您依赖于非标准(尽管无处不在)扩展。(不过,公平地说,
pax
支持
ustar
-格式存档)。我让用户手动运行chmod。只是希望我忽略了一些可以让它自动的东西。我们只需要保留文档,我们提供与.sh版本并行的.bat版本。windows只识别扩展。因此,对于windows用户来说,没有额外的步骤使.bats可执行。谢谢