実はIDEAのディレクトリ構成が一番おかしい(その1)

最近ちょっと凝ってるディレクトリ構成ネタの各種IDE版。NetBeansEclipse(WTP),JDeveloper,IDEA,そしてMaven,それぞれのデフォでプロジェクトを作ったときのディレクトリ構成と,自分以外のIDEが作成したプロジェクトをマウントできるかどうかを試してみた。
#プロジェクトはWARファイルを作れるプロジェクトに限定。


まずは,プロジェクトのディレクトリ構成について。
それも(ほぼ)作成直後の構成で,下線はプロジェクト管理用,太字は各種ソース置き場,斜体は出力先を示す。太字部分は間違いなくSCMにぶち込んでいいけど,下線はビミョー。斜体はSCMにぶち込んではいけない。

NetBeans5.5の場合

「Webアプリケーション」プロジェクトの「Java BluePrintスタイル」の場合。

project/
 |- build.xml
 |- nbproject/
 |- build/ ... コンパイル先(WAR展開イメージ)
 |- dist/  ... WARファイルの作成先
 |- src/   ... プロダクトコード置き場
 |   |- conf/ ... 各種リソース(とりあえず MANIFEST.MF がある)
 |   |- java/ ... Javaソース置き場
 |- test/  ... テストコード置き場
 |- web/ ... Webリソース置き場
     |- META-INF/
     |- WEB-INF/
         |- web.xml

Jakartaスタイル」の場合は,こっち。

project/
 |- build.xml
 |- nbproject/
 |- build/ ... コンパイル先(WAR展開イメージ)
 |- dist/  ... WARファイルの作成先
 |- conf/ ... 各種リソース(とりあえず MANIFEST.MF がある)
 |- java/ ... Javaソース置き場
 |- test/  ... テストコード置き場
 |- web/ ... Webリソース置き場
     |- META-INF/
     |- WEB-INF/
         |- web.xml
  • プロジェクトは,好きな場所に作成できる。
  • 出力先(build/, dist/)は変更できない(そうゆう画面がない)。
    • nbproject/配下の設定ファイルを直接直せば変更できるみたい。
  • ソースディレクトリは複数設定できる。
    • 名前も場所も任意に変更できる。
    • でも出力先はプロダクション用とテスト用の2種類しか持てないみたい。
  • はじめからテストコード置き場ができてる。
  • Webリソース置き場の場所も名前も好きに変更できる。
    • ただし,常にWEB-INF/web.xmlがWebリソース置き場の真下にあることが条件。
  • build.xmlNetBeansが使うビルドスクリプト
    • NetBeansはビルドにAntを利用しているので,そうなってる。
    • すでにbuild.xmlがあれば,他の名前で作成するけど,ちょこちょこ変更できるかどうかは知らない。
Eclipse3.2 + WTP1.5の場合

「Dynamic Web Project」を選んだ時の構成。

project/
 |- .project
 |- .classpath
 |- .settings/
 |- build/      ... ソースのコンパイル先
 |- src/        ... Javaソース置き場
 |- WebContent/ ... Webリソース置き場
     |- META-INF/
     |- WEB-INF/
         |- web.xml

WARファイルは,
$WORKSPACE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/webapps
に書き出されるみたいだ。

  • プロジェクトはワークスペース配下に作成するのが一応のルール。
    • 実際の所,ワークスペース以外にもプロジェクトはおけるみたいなんだけど,イマイチ動作が不安定になる。
    • WTPのサーバ設定などは,ワークスペース直下の「Servers/」に作られるっぽい。
  • 出力先(build/)は,あとで変更できる。
  • Javaソース置き場は複数持てる。
    • 名前も場所も任意に変更できる。
    • 出力先もソース置き場ごとに設定できる。
  • テストコード置き場」って概念は無いと思うんだけど,あってる?
  • Webリソース置き場の場所も名前も好きに変更できる。
    • NetBeans同様,常にWEB-INF/web.xmlがWebリソース置き場の真下にあることが条件。
JDeveloper 10gの場合

「Webプロジェクト」を選んだときの構成。

project/
 |- project.jpr
 |- deploy/     ... デプロイに関する設定情報
 |   |- webapp.deploy
 |- src/        ... Javaのソース置き場
 |- public_html/  ... Webリソース置き場
     |- WEB-INF/
         |- web.xml
         |- classes/  ... ソースのコンパイル先
         |   |- .jsps ... JSPやタグファイルのプリコンパイル先
         |   |- .tags
         |- lib/
         |- temp/
  • プロジェクトは,Eclipseワークスペースみたいなアプリケーションという場に作るのがお約束
    • 実際の所,アプリケーション以外にもプロジェクトはおけるみたいなんだけど,イマイチ動作が不安定になる。
  • 出力先がWebリソース置き場と兼用なのがイケてない。
    • 悪いことに出力先の変更方法は見つけられなかった。
  • Javaソース置き場は複数持てる。
    • 名前も場所も任意に変更できる。
  • テストコード置き場」ってのを持てないみたい。
    • 試しにJUnitのテストケース作ってみたら,プロダクトコード置き場に「test」ってサブパッケージ掘って,そこに作られた。
    • って,そりゃ無いだろぅ...
  • Webリソース置き場の場所も名前も好きに変更できる。
    • NetBeans同様,常にWEB-INF/web.xmlがWebリソース置き場の真下にあることが条件。
  • WARファイルがどこに作成されるのかは,わからずじまいだった。
IntelliJ IDEA6の場合

「Web Module」を選んだ時の構成。

project/
 |- project.iml
 |- project.ipr
 |- project.iws
 |- classes/  ... ソースのコンパイル先
 |- exploded/  ... WAR展開形式の出力先
 |- project.war  ... WARファイル
 |- META-INF/
 |- resources  ... Webリソース置き場
 |- src/    ... Javaソース置き場
 |- WEB-INF/  ... Webリソース置き場(web.xml専用)
     |- web.xml
  • プロジェクトは,好きな場所に作成できる。
  • 出力先(classes/, exploded/)は,名前も場所もいつでも変更できる。
  • ソースディレクトリは複数設定できる。
    • 名前も場所も任意に変更できる。
    • でも出力先はプロダクション用とテスト用の2種類しか持てないみたい。
  • はじめにテストコード置き場は作られないが,「テストコード置き場」という概念はある。
  • Webリソース置き場の場所も名前も好きに変更できる。
    • web.xmlの場所は,コレと別に直接指定するので,Webリソース置き場がWEB-INFを含んでなくても平気。
  • WARファイルの名前も出力先も任意に変更できる。
Maven2の場合

archetypeArtifactIdに「maven-archetype-webapp」を選んだ時の構成。

project/
 |- pom.xml
 |- target/
 |   |- classes/     ... ソースのコンパイル先
 |   |- project/     ... WAR展開形式の出力先
 |   |- project.war  ... WARファイル
 |- src/
     |- main/
     |   |- java/           ... Javaソース置き場
     |   |- resources/
     |   |- webapp/         ... Webリソース置き場
     |       |- WEB-INF/
     |           |- web.xml
     |- test/
         |- java/           ... テストコード置き場
         |- resources/
  • プロジェクトは,好きな場所に作成できる。
  • ソースディレクトリは1つしか持てなかったような気が...
    • maven-archetype-webapp」の場合,Javaソース置き場をPOMに指定しないとダメ。
    • テストコード置き場もしかり。
  • POMいじれはディレクトリ構成を変更できるんだと思うんだけど,それってMavenの思想に反するような気が...