1.

Eclipse WAR エクスポート「モジュール名が無効です」原因と対処

編集
この記事の要点
  • Eclipse の WAR エクスポート時に「モジュール名が無効です」が表示される
  • 原因: プロジェクトが Web プロジェクトとして認識されていない
  • 対処: プロジェクト・ファセットで「動的 Web モジュール」を有効化
  • 関連: web.xml がないか、ファセットバージョンと Tomcat バージョンの不一致
  • Maven プロジェクトの場合は pom.xmlwar も必要

エラー内容

Eclipse のプロジェクトを WAR ファイルとしてエクスポートしようとしたときに、以下のダイアログが表示されてエクスポートできません:

モジュール名が無効です。
Web module is not found.

発生条件

  • プロジェクト右クリック → エクスポート → Web → WAR file 選択時
  • 「Web project」のドロップダウンに対象プロジェクトが表示されない
  • または表示はされているが「Module name is invalid」エラーになる

原因

プロジェクトが Eclipse 上で Web プロジェクト(動的 Web モジュール)として認識されていないのが原因です。新規プロジェクトを「Java プロジェクト」として作ったり、Maven のテンプレートが不適切だったりすると、Web ファセットが付いていない状態になります。

対処1: プロジェクト・ファセットで Dynamic Web Module を有効化

  1. パッケージ・エクスプローラーでプロジェクトを右クリック → プロパティ (Properties)
  2. 左ペインから プロジェクト・ファセット (Project Facets) を選択
  3. 動的 Web モジュール (Dynamic Web Module) にチェック
  4. バージョンを Tomcat に合わせて選択
    • Tomcat 9 → 4.0 (Servlet 4.0 / Java EE 8)
    • Tomcat 10 → 5.0 (Jakarta Servlet 5.0)
    • Tomcat 11 → 6.0
  5. Java ファセットのバージョンも JDK と一致させる
  6. 下部の"Further configuration available..."リンクが表示されるならクリック → ContextRoot とコンテンツディレクトリ (WebContent or src/main/webapp) を確認
  7. 適用して閉じる

対処2: web.xml の作成

Servlet 3.0 以降は web.xml なしでも動作しますが、Eclipse の WAR エクスポートでは WEB-INF/web.xml が必須のことがあります:




    MyApp

配置場所: WebContent/WEB-INF/web.xml または Maven プロジェクトなら src/main/webapp/WEB-INF/web.xml

対処3: Maven プロジェクトなら packaging を war に

Maven プロジェクトの場合、pom.xml に以下を明示します:


    4.0.0
    com.example
    myapp
    1.0.0
    war   

    
        
            jakarta.servlet
            jakarta.servlet-api
            6.0.0
            provided
        
    

変更後、プロジェクト右クリック → Maven → プロジェクトの更新を実行。

対処4: プロジェクトを別ワークスペースで作り直し

上記でも改善しない場合、Eclipse 側のメタデータが破損している可能性があります:

  1. 既存プロジェクトのソース(srcWebContentpom.xml)をバックアップ
  2. 新規ワークスペースを作成
  3. 新規 → 動的 Web プロジェクトまたは Maven プロジェクト(war パッケージング)で作成
  4. バックアップしたソースを上書きコピー
  5. WAR エクスポートを再試行

関連エラー

  • 「項目module nameの値がモジュール名に無効です」 — ファセットの context-root が空。プロジェクト・ファセットの「Further configuration」を確認
  • 「The selected ... cannot be exported in this manner」 — Web プロジェクトではない普通の Java プロジェクト → ファセット追加
  • 「Dynamic Web Module cannot be uninstalled」 — Java バージョンが対応していない → Java ファセットも合わせて変更

確認

正しく WAR エクスポートできれば、プロジェクトのルートに以下のような構造の WAR ファイルが生成されます:

myapp.war
├── META-INF/
│   └── MANIFEST.MF
├── WEB-INF/
│   ├── web.xml
│   ├── classes/        ← コンパイル済みクラス
│   │   └── com/example/MyServlet.class
│   └── lib/            ← 依存 jar(provided でないもの)
├── index.jsp
└── (静的リソース)

Tomcat の webapps/ にコピーすると自動展開されます。展開先のフォルダ名 = コンテキストパス(http://localhost:8080/myapp/)。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. モジュール名が無効です。(WAR エクスポート)
  2. 現在のブランチはプル用に構成されていません 構成にキー remote.origin.url の値がありません
  3. サーバーに追加または除去できるリソースがありません。
  4. invalid LOC header (bad signature)