Javaプロジェクトのパッケージ構造?


115

Java Webアプリケーションでパッケージ構造を設定するためのベストプラクティスは何ですか?

src、単体テストコードなどをどのように設定しますか?

回答:


94

Mavenの標準プロジェクトレイアウトに従うことができます。実際にmavenを使用する必要はありませんが、将来的には(必要に応じて)移行が容易になります。さらに、多くのオープンソースプロジェクトがこのようにレイアウトされているため、他の開発者はそのレイアウトを見ることになります。


2
選択肢がある場合は、Mavenのレイアウトを使用することもお勧めします。これは十分に検討された十分に検討された構造であり、多くの開発者によく知られています。
Dov Wasserman、

14
次のワンライナーを使用して、ディレクトリレイアウトを作成できます:mkdir -p src / {main / {java、resources、filters、assembly、config、webapp}、test / {java、resources、filters}、site}
Daniel Hepper

1
Mavenの標準プロジェクトレイアウトは醜い...:/
Yousha Aleayoub

2
@YoushaAleayoub結婚する必要はありません
シャルマ

59

チェックする可能性のある既存のリソースがいくつかあります。

  1. Javaクラスを適切にパッケージ化する
  2. Spring 2.5アーキテクチャ
  3. Javaチュートリアル-パッケージの命名
  4. SUNの命名規則

価値があることについて、私が使用する傾向がある私の個人的なガイドラインは次のとおりです。

  1. 「com.mycompany」などの逆ドメインから始めます。
  2. 「myproduct」などの製品名を使用します。場合によっては、特定の製品に属さない一般的なパッケージを使用する傾向があります。これらは、「io」、「util」、「ui」など、これらの一般的なクラスの機能に従って分類されます。
  3. この後、より自由な形式になります。通常、プロジェクト、機能の領域、展開などに基づいてグループ化します。たとえば、「project1」、「project2」、「ui」、「client」などがある場合があります。

他のいくつかのポイント:

  1. 私が取り組んだプロジェクトでは、パッケージ名が設計ドキュメントから流れるのはよくあることです。通常、製品はすでに機能または目的の領域に分かれています。
  2. 共通の機能をすぐに上位のパッケージにプッシュすることについてあまり強調しないでください。プロジェクトや製品などで必要になるのを待ってから、リファクタリングします。
  3. パッケージ間の依存関係を監視します。すべてが悪いわけではありませんが、個別のユニットである可能性のあるものの間の密結合を示している可能性があります。これを追跡するのに役立つツールがあります。

2
逆ドメインの場合(「com.mycompany」)、「com」パッケージは「mycompany」サブパッケージを除いて通常は空ですか?
Alex Parker

45

実装レイヤーではなく、機能ごとにパッケージ構造を作成することをお勧めします。これについての良い記事は、Javaプラクティスです:レイヤーではなく機能ごとのパッケージ


2
ありがとう。これは私がチームに私の考えを伝えるために探していたものです
Pranalee

8
また、データベースを切り替えたい場合はどうでしょうか?30の異なるパッケージを調べるだけで済みます。SFTPからWebサービスに移行しますか?繰り返しますが、30の異なる場所を見るだけで済みます。間違いなくファンではありません。
SamuelKDavis 2014年

1
レイヤーごとのパッケージ化に利点がある別の例:クラスをJSONに(たとえば、gsonを使用して)シリアル化する場合、それらのクラスが難読化される(たとえば、Proguardによって)場合、(逆)シリアル化は失敗します。そのようなクラスに触れないようにProguardを構成する必要があります-すべてのクラスで単一のパッケージを指定するのが最も簡単です
jmuet

6

私は通常、次のものが欲しいです。

  • bin(バイナリ)
  • doc(ドキュメント)
  • inf(情報)
  • lib(ライブラリ)
  • res(リソース)
  • src(ソース)
  • tst(テスト)

これらは型にはまらないと考えられるかもしれませんが、物事を整理するための非常に良い方法だと思います。


「これらは型破りであると考えられるかもしれません」ちなみに、彼らは実際には型破りで悪いです...
mahieddine

2
@mahieddineなぜあなたはそれらを悪いと思いますか?
トーマスヨハネス

まあそれを言ったのは私ではありませんでしたが、ここに私の考えのいくつかがあります:テストクラスはソースコードなので、ディレクトリ「tst」(ほとんどの人はtest btwを省略しない)はsrcのサブディレクトリ(たとえば「 src」は「src / main」になり、「tst」は「src / test」になります)。また、「inf」には「doc」に含まれる可能性のあるコンテンツが含まれているようです。
ニコWawrzyniak

6
The way I usually organise is
- src
        - main
                - java
                - groovy
                - resources
        - test
                - java
                - groovy
- lib
- build
        - test 
                - reports
                - classes
- doc

3

私が通常フォルダの階層を持っている方法-

  • プロジェクト名
    • src
    • 置き場
    • テスト
    • libs
    • docs

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.