Структура пакета для Java-проекту?


116

Яка найкраща практика налаштування структур пакетів у веб-додатку Java?

Як би ви встановили свій src, код тестового модуля тощо?

Відповіді:


95

Ви можете дотримуватися стандартного плану проекту Maven . Не потрібно насправді використовувати maven, але це полегшить перехід у майбутньому (якщо це необхідно). Крім того, інші розробники будуть звикати бачити цей макет, оскільки багато проектів з відкритим кодом викладено таким чином,


2
Я також рекомендую використовувати макет Maven, якщо у вас є вибір. Це добре продумана структура, яка пройшла випробування на бою і знайома багатьом розробникам.
Дов Васерман

15
Ви можете використовувати цей oneliner для створення макета каталогу: mkdir -p src / {main / {java, ресурси, фільтри, збірка, конфігурація, webapp}, тест / {java, ресурси, фільтри}, сайт}
Daniel Hepper,

1
Стандартний макет проекту
Мейвена

2
@YoushaAleayoub вам не доведеться одружуватися з цим
Ashvin Sharma

59

Ви можете перевірити кілька існуючих ресурсів:

  1. Правильно упакуйте ваші Java-класи
  2. Весна 2.5 Архітектура
  3. Підручник з Java - Назви пакету
  4. SUN Іменування конвенцій

Для чого це моє особисте керівництво, яке я схильний використовувати, таке:

  1. Почніть із зворотного домену, наприклад, "com.mycompany".
  2. Використовуйте назву продукту, наприклад, "мій продукт". У деяких випадках у мене є загальні пакети, які не належать до певного товару. Вони можуть бути класифіковані відповідно до функціональності цих загальних класів, наприклад, "io", "util", "ui" тощо.
  3. Після цього він стає більш вільним. Зазвичай я групую відповідно до проекту, області функціональності, розгортання тощо. Наприклад, у мене можуть бути "project1", "project2", "ui", "client" тощо.

Кілька інших моментів:

  1. Це досить часто в проектах, над якими я працював, щоб назви пакетів виходили з проектної документації. Зазвичай продукти вже розділені на сфери функціональності або призначення.
  2. Не навантажуйте занадто сильно на натисканні загальної функціональності на вищі пакети відразу. Зачекайте, коли виникне потреба у проектах, продуктах тощо, а потім рефактор.
  3. Дивіться міжпакетні залежності. Вони не всі погані, але це може означати тісний зв'язок між тим, що може бути окремими одиницями. Є інструменти, які допоможуть вам відстежувати це.

2
У випадку зворотного домену ("com.mycompany") пакет "com" зазвичай порожній, за винятком підпаку "mycompany"?
Алекс Паркер

45

Я б запропонував створити структуру вашого пакета за особливостями, а не за рівнем реалізації. Хорошим записом для цього є практики Java: Пакет за функцією, а не за шаром


2
Дякую. Це те, що я шукав, щоб передати свої думки команді
Pranalee

8
А якщо ви хочете переключити бази даних? Потрібно шукати лише 30 різних пакетів. Перейти з SFTP до веб-сервісів? Знову тільки треба шукати в 30 різних місцях. Однозначно не фанат.
SamuelKDavis

1
інший приклад, коли упаковка за шаром має переваги: ​​якщо ви серіалізуєте класи до JSON (наприклад, з gson), якщо ці класи затуманені (наприклад, Proguard) (de) серіалізація не вдасться; вам потрібно налаштувати Proguard не торкатися таких класів - найпростіше просто вказати єдиний пакет з усіма ними
jmuet

6

Зазвичай мені подобається мати таке:

  • бін (Бінарні файли)
  • doc (Документи)
  • inf (інформація)
  • lib (Бібліотеки)
  • res (ресурси)
  • src (Джерело)
  • tst (тест)

Це можна вважати нетрадиційним, але я вважаю, що це дуже приємний спосіб організації речей.


"Це можна вважати нетрадиційним" До речі, вони насправді нетрадиційні та погані ...
mahieddine

2
@mahieddine Чому ви вважаєте їх поганими?
Томас Йоганнесмайер

Ну, не я це заявив, але ось деякі мої думки: ваші тестові класи - вихідний код, тому каталог "tst" (більшість людей не скорочує тест btw) повинен бути підкаталогом src (наприклад, " src "стає" src / main ", а" tst "стає" src / тест "). Також "inf", здається, містить вміст, який може бути в "doc".
Ніко Вавриняк

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

3

Як я зазвичай маю ієрархію папок-

  • Назва проекту
    • src
    • бункер
    • тести
    • губки
    • док

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.