Java war文件中的可执行文件

Java war文件中的可执行文件,java,jakarta-ee,web-applications,war,Java,Jakarta Ee,Web Applications,War,我们想作为应用程序战争的一部分提供一些助手脚本(shell脚本)。不幸的是,我们的构建系统(maven)似乎放弃了对所有文件的权限,脚本最终没有设置可执行位 甚至有可能做到这一点吗?.war格式是否支持可执行文件?如果是:如何让maven保留权限/在流程中的某个地方修复权限?在WAR之外提供可执行文件。从WAR内部调用它们。问题更可能是这些位在底层zip格式中不受支持 如果使用脚本名显式执行/bin/sh,则不需要设置执行位 还要注意的是,您的程序知道脚本的位置,可以在启动之前调用“chmod+

我们想作为应用程序战争的一部分提供一些助手脚本(shell脚本)。不幸的是,我们的构建系统(maven)似乎放弃了对所有文件的权限,脚本最终没有设置可执行位


甚至有可能做到这一点吗?.war格式是否支持可执行文件?如果是:如何让maven保留权限/在流程中的某个地方修复权限?

在WAR之外提供可执行文件。从WAR内部调用它们。

问题更可能是这些位在底层zip格式中不受支持

如果使用脚本名显式执行/bin/sh,则不需要设置执行位


还要注意的是,您的程序知道脚本的位置,可以在启动之前调用“chmod+xscript.sh”。

AFAIK,没有办法在war/jar中设置文件权限(但是,在使用Maven Assembly插件创建项目的二进制分发存档时,这是可能的,但这是另一种情况)

因此,我想:

  • 交付(作为二进制发行版)并在webapp外运行这些脚本~或~
  • 从类路径读取文件,将它们写入
    java.io.tmpdir
    目录,设置执行位,然后从那里执行它们~或~
  • 使用@Thorbjørn解决方案(没有尝试过,但我想它会起作用);我只是想知道这些脚本是从哪里执行的

您还可以直接从Java代码中检查和设置可执行标志。请参见

我可以问一下这些助手脚本将如何使用(以及由谁使用)?由应用程序本身:),我知道,这不是“JE22”方式,但我们必须使用scp和ftp将一些结果文件传输到不同的主机。用一个简单的shell脚本(将结果文件作为参数获取)来实现这一点是不需要动脑筋的。我们不想用纯java来实现这一点。在字里行间读取,战争爆发了,因此脚本是可以调用的实际文件。否则,可以在Unix下的stdin上提供脚本。这是一个解决方案,但会带来其他问题(我首先想到的是维护)。我不确定这是否是最佳实践。替代解决方案:在WAR中提供可执行文件,每次运行时,都以编程方式将可执行文件提取到同一目录并在那里调用。我尝试过此解决方案,但无法使其工作。由于某种原因,类加载器找不到我的脚本资源。我会再花一个小时左右的时间来研究它,如果它失败了,这将是一个提出新问题的机会:)@DirtyHenry我想你应该把它作为一个单独的问题发布,因为这个基本功能不适合你。在你知道答案之前很难解决这个问题。完成::)我意识到了这一点,并在另一个项目中完成了它,但仍然来到这里寻找解决方案,只是为了记住我之前所做的。:)