嵌入然后从java存档中提取后,可执行shell脚本仍然可执行吗?

时间:2013-04-13 02:52:24

标签: java shell jar

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果要在Windows上以及OS X等unix上进行部署,可以免费使用DOS / Windows版本的标准实用程序(如chmod)。您可以在应用程序中分发那些,最有可能,并设置路径,以便安装脚本找到您的Windows chmod.exe,当且仅当没有可用的本机版本时,就像在unix系统上一样。你当然必须在不同的系统上进行足够的测试,以确保在一些不常见的环境中不会失败。