【问题标题】:Executables in a war file战争文件中的可执行文件
【发布时间】:2010-07-06 17:04:10
【问题描述】:

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

甚至有可能做到这一点吗? .war 格式是否支持可执行文件?如果是:如何告诉 maven 保留权限/在过程中的某个位置修复它们?

【问题讨论】:

  • 请问这些帮助脚本将如何使用(以及由谁使用)?
  • 应用程序本身 :),我知道,这不是 'JE22' 方式,但我们必须使用 scp 和 ftp 将一些结果文件传输到不同的主机。使用简单的 shell 脚本(将结果文件作为参数)执行此操作是不费吹灰之力的。我们不想用plain-java来做这个。

标签: java jakarta-ee web-applications war


【解决方案1】:

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

执行位不需要设置,如果显式执行 /bin/sh 与脚本名称。

还请注意,您的程序(知道脚本的位置)可以在启动前调用“chmod +x script.sh”。

【讨论】:

  • 我已经意识到这一点并在另一个项目中完成了它,但仍然来这里寻找解决方案,只是为了记住我之前做了什么。 :)
【解决方案2】:

AFAIK,无法在 war/jar 中设置文件权限(但是,当使用 Maven 程序集插件创建项目的二进制分发存档时,这是可能的,但这是另一个故事)。

所以,我会:

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

【讨论】:

  • 字里行间,战争爆发了,因此脚本是可以调用的实际文件。否则可以在 Unix 下的标准输入上提供脚本。
【解决方案3】:

您也可以直接从您的 Java 代码检查和设置可执行标志。见http://docs.oracle.com/javase/6/docs/api/java/io/File.html#setExecutable%28boolean,%20boolean%29

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 这是一个解决方案,但它带来了其他问题(维护是我想到的第一个问题)。我不确定这应该是最佳做法。
    • 替代解决方案:在 WAR 中提供可执行文件,并在每次运行时以编程方式将可执行文件提取到同一目录并在那里调用它。
    • 我已经尝试过这个解决方案,但无法让它发挥作用。由于某种原因,类加载器找不到我的脚本资源。我会再花一个小时左右的时间来解决它,如果它失败了,这将是一个提出新问题的机会:)
    • @DirtyHenry 我认为您应该将其作为一个单独的问题发布,因为该基本功能不适合您。在你知道答案之前很难解决这个问题。
    猜你喜欢
    • 2016-01-18
    • 2018-11-03
    • 2018-03-20
    • 2017-09-18
    • 2011-10-18
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多