我有一个包含一些可执行脚本文件的应用程序。我知道我们要部署应用程序的目标机器有java。因此,我将应用程序打包到java归档文件中,并使用“jar xf jarFileName”在目标机器上进行解压缩。但可执行脚本不再可执行。是的,我们可以运行“chmod _x scriptName”。但是,在没有用户干预的情况下,从jar文件中提取脚本后脚本是否可执行?我已经阅读:this related question但这并不是要保持可执行性。嵌入后可执行shell脚本仍可执行,然后从java档案中提取?
回答
好一个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
。
我正在让用户手动运行chmod。只是希望我忽略了一些可以自动实现的东西。我们只保留该文档。 – markrboyd
如果你想部署在Windows以及像OS X这样的unix上,那么可以免费获得标准实用程序的DOS/Windows版本,例如chmod。您可以将这些文件分发给应用程序(很可能),并设置路径,以便在您的安装脚本中找到您的Windows chmod.exe,当且仅当没有可用的本地版本时才会如在unix系统上那样。您当然必须在不同的系统上进行足够的测试,以确保在某些不常见的情况下这不会失败。
我们提供与.sh版本并行的.bat版本。而Windows只是识别扩展名。所以对于windows用户来说,没有额外的步骤来制作.bats可执行文件。谢谢。 – markrboyd
- 1. Jsch - 执行Shell脚本后退出
- 2. Shell脚本完成后执行命令
- 3. 执行程序关闭后,为什么Runnable仍然在可执行的线程池执行程序中执行?
- 4. 在zip存档中执行shell脚本
- 5. 从shell脚本执行symbolicatecrash
- 6. 从mac执行Shell脚本
- 7. 从shell脚本执行SQL
- 8. 从Java代码执行Shell脚本
- 9. 需要从java执行shell脚本
- 10. 从可执行Java Jar文件创建Shell脚本
- 11. 执行shell脚本
- 12. 执行shell脚本
- 13. 如何从运行在php脚本后执行shell的输出执行跳转?
- 14. 如何执行shell脚本或可执行文件?
- 15. 执行从Java,Shell脚本Shell脚本已经阅读操作
- 16. Shell脚本:在shell脚本中运行“exit”命令后执行命令
- 17. 执行shell脚本后,其他脚本得到了成功执行
- 18. 执行n行shell脚本
- 19. 执行片段事务后,旧片段仍然可见?
- 20. 从linux shell脚本运行linux可执行文件
- 21. 从Shell脚本运行可执行文件
- 22. 执行插入,然后从休眠
- 23. 在serializeFileUpload后执行脚本
- 24. 提取和执行脚本
- 25. 从PHP代码中执行shell脚本
- 26. JQuery IF文档url =“../products.html”然后执行
- 27. 将一个可执行二进制文件嵌入到一个shell脚本中
- 28. 在文件插入文件后恢复执行shell脚本
- 29. 在shell脚本中执行php脚本?
- 30. Shell脚本在上次执行后修改后打印文件?
您可以使用tar档案而不是jar,这将保留文件模式,我不知道没有tar的* nix操作系统。 –
@MarkHarviston ...说,POSIX指定'pax',而不是'tar',所以你在使用后者时依赖于非标准(尽管无处不在)的扩展。 (但公平地说,'pax'支持'ustar'格式的档案)。 –