Javaアプリケーション(Web含む)の最初にやるべきことは、ワークスペースにプロジェクトを作成する事です。 プロジェクトは、アプリケーションのディレクトリ階層とファイルなどのアプリケーションの開発資産を管理します。
新規プロジェクトの作成は、「プロジェクト・エクスプローラー」などのエクスプローラ系のビュー内で右クリックし、 [新規]-[プロジェクト]をクリックすることで、新規プロジェクトウィザード画面が表示されます。
Eclipseで新規プロジェクトの種類について説明します。
利用頻度: 〇:良く利用される △:たまに利用される -:ほとんど利用しない
分類 | プロジェクトの種類 | 利用頻度 | 説明 |
---|---|---|---|
一般 | ファセット・プロジェクト | - | ファセット・プロジェクトとは、プロジェクトの機能の対象単位であるファセットを1~複数選択したプロジェクトです。 他のプロジェクトの選択で要件を満たす場合が多いです。 |
プロジェクト | - | プロジェクトの機能は、ディレクトリとファイルの管理程度の機能しかありません。 ファセットを追加設定する必要性が高いので、他のプロジェクトの選択で要件を満たす場合が多いです。 |
|
Eclipseモデリング・ プロジェクト |
EMFプロジェクト | - | Eclipse Modeling Framework(EMF)は、UMLなどのモデリングを可能とする機能を持つプロジェクトです。 作成時にモデルの初期構成のファイル.ecore又は.emofを選択する必要があります。 AmaterasUMLファイルの新規作成で要件を満たさせるケースが高いです。 |
空のEMFプロジェクト | - | 同上です。違いは作成時に.ecore及び.emofを選択していない点です。 | |
Ejb プロジェクト |
EJBプロジェクト | △ | JavaEE EJBパッケージを用いたWebアプリケーションを開発する場合に利用します。 |
Gradle プロジェクト |
Gradleプロジェジェクト | 〇 | JavaプロジェクトにビルドツールのGradleを追加した構成のプロジェクト。 プロジェクト資産のjar化、war化、依存ライブラリの取得などを実行します。 GroovyやScalaなどのJVMを利用する他言語がGradleとの互換性があるので、 利用機会が増えてきています。 |
Java | Javaプロジェジェクト | 〇 | Webアプリケーションを伴わないJavaアプリケーション開発用プロジェクトです。 バッチシステムや簡易にJavaアプリを作る時に利用します。 |
既定Antプロジェジェクト からのJavaプロジェクト |
- | antビルドツールが全盛期だった2004年前後の開発資産をJavaプロジェクトします。 | |
JavaEE |
アプリケーション・ クライアント・ プロジェクト |
- | JavaEEのEJBにアクセスするクライアントアプリケーション作成する場合に利用します。 |
エンタープライズ・ アプリエーション・ プロジェクト |
△ | 開発現場でJavaEE(EJB)を利用したWebアプリケーション開発の時に利用します。 | |
コネクタ・プロジェクト | - | JCA(J2EE connector architecture)を利用したJavaEE基盤で EIS(Enterprise Information Systems/企業情報システム)間の結合を JCAを利用して構築するためのプロジェクト |
|
ユーティリティ・ プロジェクト |
- | JavaEEにおける共通モジュール(ユーティリティのようなパッケージ)を作成する場合に利用します。 Javaプロジェクトがあるので、このユーティリティ・プロジェクトの利用価値は低い | |
JavaScript | JavaScript プロジェクト |
- | JavaScriptのデバック実行であれば、ブラウザ機能を利用した方が良い |
JAXB | JAXB プロジェクト |
- | Java Architecture for XML Binding(JAXB)は、Javaのクラスを XMLで表現可能にする仕様です。 オブジェクトをXMLにシリアライズしたり、XMLからオブジェクトにデシアライズする機能です。 単一のJAXBプロジェクトを明示する必要性がない。Javaプロジェクトで十分 |
JPA | JPA プロジェクト |
△ | JPA(Java Persistence API)とは、オブジェクトとデータベースの結果を マッピングするためのO/Rマッピング機能でJ2EE7などのアーキテクチャでWebアプリケーショ開発時に利用されます。 |
Maven | Mavenプロジェクト | 〇 | Apache Software Foundation で開発されているプロジェクト管理ツール「Maven」です。 Mavenは、依存している外部パッケージの管理やビルドプロセスを提供します。 2017年4月時点では、かなりの多くのプロジェクトがMavenを利用しています。 モジュールとの違いは、Mavenプロジェクト自体がアプリケーションの本体です。 |
Mavenモジュール | 〇 | Mavenモジュールは、Javaアプリケーションのライブラリ構成を各アプリケーションに 提供しやすいようにしたパッケージ化されたjarファイルを意味します。 | |
SVNからMavenプロジェクト をチェックアウト |
△ | バージョン管理ツールのSubversionからMavenプロジェクトをチェックアウトします。 2017年時点では、Subversionよりgitの普及率が高いので利用頻度は低いでしょう。 |
|
SVN | SVNからプロジェクト | - | バージョン管理ツールSubversionからチェックアウトして、 プロジェクトを新規に作成します。 バージョン管理ツールとの連携は、他のプロジェクトの作成後もできます。 |
SWTBot | SWTBotテスト・ プラグイン |
- | SWTBotは、SWT、Eclipse、GEFベースのアプリケーションを テストするためのオープンソースのJavaベースのUI /機能テストツールです。 Ecliseをベースに開発ツールを作成する人達がテストするためのプラグインです。 |
Web | Webフラグメント・ プロジェクト |
△ | ServletAPI3.0からweb.xmlをモジュール化した「web-fragment.xml」をjar単位で分割することで、 web.xmlの機能分割を行います。複数のServletなどを定義するWebアプリケーションには利用価値があります。 動的Webプロジェクトでも十分大規模システムでも管理できます。 |
静的Webプロジェクト | 〇 | Html、CSS、JavaScript、画像など静的なWebコンテンツを作成する時に利用します。 ホームページの作成や管理にはこのプロジェクトを選択します。 |
|
動的Webプロジェクト | 〇 | JavaEE(JspAPI,ServletAPI)などを利用した動的なWebコンテンツを作成する時に利用します。 開発現場の多くのプロジェクトがこのプロジェクトを選択されていると思います。 私は、このプロジェクトのディレクトリの初期構成が、多くの初級エンジニアに対して、 Webアプリケーションサーバ、依存したライブラリの管理、WebサーバとWebアプリケーションサーバへの Webリソースの切り分けなどに対する知識を薄弱にしています。 |
このようにpleiadesの初期設定では、23種類新規プロジェクトに対するメニューがあります。
一覧の利用頻度が〇の付与された6種類に対する理解だけで開発現場で十分通用します。
Eclipseの上記プロジェクトの初期構成であるディレクトリ階層は、Javaの学習には十分要件を満たします。 しかしながら、中規模以上のWebシステム及びJavaアプリケーションの開発には配慮が足りないディレクトリ構成です。 Eclipseのプラグインを何年か前に開発した人達が、「こんな感じだろう」と安易に決めたディレクトリ構成が 維持され続けられています。
私は、Webシステムのバージョン管理システムのレポジトリからチェックアウトして、 Webアプリケーションのディレクトリ階層でそのプロジェクトの技術的な戦力が大体判断できます。 ディレクトリ階層がEclipseのデフォルト階層をしていた瞬間に、上級~中級エンジニアが1人も居ないと判断します。 逆に良く鮮麗されたディレクトリ構成を見た場合には、共通チームや各開発チームに上級エンジニアが居ると判断しています。
オープンソースのフレームワークに付帯するサンプルWebアプリケーションのディレクトリ構成で Eclipseの初期構築と一致しているものは無いでしょう。 ディレクトリ階層を学ぶには、Springに付帯しているサンプルアプリなどの階層を参考した方が良いスタイルになります。
本書では、私の経験で作成するディレクトリ階層を案として以後提示します。