【问题标题】:One liner for listing contents of file within war file一个用于在 war 文件中列出文件内容的衬垫
【发布时间】:2026-02-16 19:45:01
【问题描述】:

我需要能够读取 jar 文件中的文件内容(比如 MANIFEST)。 目前我通过提取文件的内容然后列出它来做到这一点

${JAVA_HOME}/bin/jar xvf SOME_WAR_FILE.war META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF

是否可以使用单行来做到这一点,而不提取内容?

【问题讨论】:

  • 此文件是否已部署?如果已部署,它的内容应该已经被提取并可以直接读取(我知道这可以通过 JBoss 和 WebLogic 实现)
  • 我需要在启动应用服务器之前执行一些验证,所以我不能等到启动应用服务器。
  • 澄清一下,您的要求是在不物理提取内容的情况下执行此操作?或者你不在乎它是如何完成的,但你想要一个单一的解决方案?
  • 不提取内容
  • 首先,1000 台服务器有点荒谬。其次,如果不是程序化解决方案,那么您想要什么样的解决方案?

标签: java jar


【解决方案1】:

jar 或 war 文件只是一个标准的 zip 压缩存档,因此您可以使用带有 -c 选项的标准解压缩将其定向到标准输出

$ file your.jar
your.jar: Zip archive data, at least v1.0 to extract
$ unzip -c your.jar META-INF/MANIFEST.MF
file contents
file contents

【讨论】:

  • 是的。这将显示文件而不提取它。这有什么问题?
  • 我没有 Linux 机器,但不会在读取时提取指定到 temp 目录的文件?
  • 不,它没有。我只是在观看我的 /tmp 目录时重新运行了该命令(我当然在发布答案之前对其进行了测试)。如果在那里提取了某些内容,则太快无法查看,并且它肯定没有提取整个 .jar ——如果有的话,它只会是请求的一个文件。
【解决方案2】:

这个怎么样?

unzip -p your.jar META-INF/MANIFEST.MF | cat

-p 选项表示:

extract files to pipe, no messages

| cat 并不是必须的。没有它,它将打印到标准输出。

【讨论】:

    【解决方案3】:

    这是你要找的吗?

    unzip -qc SOME_WAR_FILE.war META-INF/MANIFEST.MF
    

    the previous answer here

    【讨论】:

    • 这正是我想要的。我喜欢 -q(安静)选项,因为它只显示文件的内容。
    最近更新 更多