18.

【Java】warファイルの中身を確認する方法

編集
この記事の要点
  • WAR ファイルは ZIP 形式なので unzipjar tf で中身確認
  • unzip -l app.war で一覧表示(展開せず)
  • jar tf app.war でも同等
  • 展開: jar xf app.war または unzip app.war -d dir/
  • GUI なら 7-zip / WinRAR で開ける

 

WAR ファイルとは

WAR (Web Application Archive) は Java Web アプリケーションを 1 ファイルにまとめた配信形式。実体は ZIP 形式なので、ZIP 操作と同じ方法で中身を確認できます。

標準的な構造:

myapp.war
├── META-INF/
│   └── MANIFEST.MF
├── WEB-INF/
│   ├── web.xml             ← デプロイメント記述子
│   ├── classes/            ← コンパイル済み .class
│   │   └── com/example/...
│   └── lib/                ← 依存 jar
│       ├── spring-core-x.x.x.jar
│       └── ...
├── index.html
├── css/
├── js/
└── images/

方法 1: unzip コマンド

# 一覧表示(展開せず)
$ unzip -l app.war
Archive:  app.war
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2026-05-15 12:00   META-INF/
       70  2026-05-15 12:00   META-INF/MANIFEST.MF
        0  2026-05-15 12:00   WEB-INF/
     2048  2026-05-15 12:00   WEB-INF/web.xml
        0  2026-05-15 12:00   WEB-INF/classes/
   215040  2026-05-15 12:00   WEB-INF/lib/spring-core-5.3.20.jar
       ...

# 詳細情報付き
$ unzip -v app.war

# 特定ファイルだけ確認(標準出力)
$ unzip -p app.war WEB-INF/web.xml

# 全展開
$ unzip app.war -d extracted/
$ ls extracted/

# 特定ファイルのみ展開
$ unzip app.war WEB-INF/web.xml -d extracted/

方法 2: jar コマンド

# 一覧 (jar Table)
$ jar tf app.war
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/web.xml
WEB-INF/classes/
WEB-INF/lib/spring-core-5.3.20.jar
...

# 詳細表示
$ jar tvf app.war

# 全展開
$ mkdir extracted && cd extracted
$ jar xf ../app.war

# 特定ファイル展開
$ jar xf app.war WEB-INF/web.xml

# 内容確認 (一度展開する必要)
$ jar xf app.war WEB-INF/web.xml
$ cat WEB-INF/web.xml

方法 3: Windows コマンド

# PowerShell
PS> Expand-Archive app.war -DestinationPath extracted

# または GUI で右クリック → 「すべて展開」
# 拡張子を .zip にリネームすればエクスプローラから直接開ける

# 7-Zip CLI
> 7z l app.war           # 一覧
> 7z x app.war           # 展開

方法 4: GUI ツール

  • 7-Zip: 無料、Win/Linux/Mac、WAR を ZIP として開ける
  • WinRAR: Windows 定番
  • The Unarchiver: Mac
  • Eclipse / IntelliJ: WAR を直接プロジェクトとして開ける

中身の主要要素

web.xml(デプロイメント記述子)





    MyApp

    
    
        HelloServlet
        com.example.HelloServlet
    
    
        HelloServlet
        /hello
    

    
    ...

    
    
        404
        /error/404.jsp
    


# 確認
$ unzip -p app.war WEB-INF/web.xml | head -30

MANIFEST.MF

# META-INF/MANIFEST.MF
Manifest-Version: 1.0
Build-Jdk: 17.0.8
Built-By: jenkins
Implementation-Title: myapp
Implementation-Version: 1.0.0

$ unzip -p app.war META-INF/MANIFEST.MF

含まれる jar 一覧

# 依存ライブラリ一覧
$ unzip -l app.war | grep ".jar"
   215040  ...   WEB-INF/lib/spring-core-5.3.20.jar
   123456  ...   WEB-INF/lib/spring-mvc-5.3.20.jar
    ...

# jar の中身も見る
$ unzip -p app.war WEB-INF/lib/spring-core-5.3.20.jar | jar tf -

クラス一覧

# .class ファイル一覧
$ unzip -l app.war | grep ".class"
     2048   WEB-INF/classes/com/example/HelloServlet.class
     1536   WEB-INF/classes/com/example/UserController.class
     ...

# クラスを展開して逆コンパイル
$ unzip app.war WEB-INF/classes/com/example/HelloServlet.class -d extracted/
$ javap -c extracted/WEB-INF/classes/com/example/HelloServlet.class

WAR と JAR / EAR の違い

形式用途主な内容
WARWeb アプリ (Tomcat 等)WEB-INF/, JSP, HTML, 静的ファイル
JARJava ライブラリ / 実行可能 jar.class, MANIFEST.MF
EARエンタープライズアプリWAR + EJB JAR の集合 (主に WildFly / WebLogic)

すべてZIP 形式unzip / jar でどれも開ける。

Spring Boot の場合(exec jar)

Spring Boot は WAR より jar 形式が一般的。実行可能 jar も ZIP 構造:

# Spring Boot jar の中身
$ jar tf myapp.jar
BOOT-INF/                    ← Spring Boot 独自構造
BOOT-INF/classes/
BOOT-INF/classes/com/example/Application.class
BOOT-INF/lib/
BOOT-INF/lib/spring-boot-3.1.0.jar
META-INF/MANIFEST.MF
org/                         ← Spring Boot Loader
org/springframework/boot/loader/launch/JarLauncher.class
...

# 設定ファイル確認
$ unzip -p myapp.jar BOOT-INF/classes/application.properties

展開せずファイル内容を grep

# 全 .class ファイルから特定文字列検索 (時間がかかる)
$ unzip -p app.war | grep -a "特定文字列"

# WEB-INF/classes 内の .properties から検索
$ for f in $(unzip -Z1 app.war | grep ".properties"); do
    echo "--- $f ---"
    unzip -p app.war "$f"
done

# unzip + grep + awk
$ unzip -p app.war WEB-INF/web.xml | grep "servlet-class"

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. プラットホーム
  2. 環境構築
  3. 文法
  4. API
  5. Servlet(サーブレット)
  6. JSP
  7. Applet(アプレット)
  8. デザインパターン
  9. フレームワーク
  10. ライブラリ
  11. Androidアプリケーション
  12. Project Jigsaw
  13. エラー一覧
  14. 日付の加算、減算
  15. 文字列の数字チェック
  16. 改行コードの削除
  17. 先頭と末端の文字の削除
  18. warファイルの中身を確認する方法
  19. nullもしくは空文字の判定
  20. beanの中身を確認する方法
  21. org.apache.log4j.Logger のログ出力で printStackTrace() のエラー内容を出力する方法
  22. Javaのバージョン確認方法