В чем преимущество соглашения 'src/main/java''?

Я заметил, что многие проекты имеют следующую структуру:

  • Проект-A
    • бункер
    • Lib
    • ЦСИ
      • главный
        • Джава
          • RootLevelPackageClass.java

В настоящее время я использую следующее соглашение (так как мои проекты на 100% Java):

  • Проект-A
    • бункер
    • Lib
    • ЦСИ
      • RootLevelPackageClass.java

В настоящее время я не использую Maven, но мне интересно, является ли это соглашение Maven или нет, или есть ли другая причина. Может кто-нибудь объяснить, почему первая версия так популярна в наши дни, и если я должен принять это новое соглашение или нет?

Крис

5 ответов

Решение

Основным преимуществом является наличие test каталог как подкаталог src с той же структурой каталогов, что и в main:

  • Проект-A
    • бункер
    • Lib
    • ЦСИ
      • главный
        • Джава
          • RootLevelPackageClass.java
        • Ресурсы
      • тестовое задание
        • Джава
          • TestRootLevelPackageClass.java
        • Ресурсы

Все пакеты частных методов RootLevelPackageClass будет виден, т.е. тестируется из TestRootLevelPackageClass, Поскольку код тестирования также является исходным, его место должно быть под src каталог.

Да, это конвенция Maven.

Даже если ваш проект на 100% Java (как это обычно бывает с Maven), у вас часто есть файлы ресурсов (которые идут в src/main/resources в соответствии с конвенцией Maven), или веб-приложение, или... все это легко вписывается в систему Maven.

Если вы довольны своей текущей системой сборки (какой бы она ни была), нет никаких причин переходить на Maven. В противном случае, или если вы начинаете новый проект, вы можете оценить свои возможности, включая Maven.

Другие уже говорили вам, что это конвенция Maven, вместо этого я отвечу на ваш вопрос:

Абсолютно нет. Конечно, полезно разделять фрагменты кода на отдельные корневые папки, но обычно вы можете добиться того же с

  • [Корень]
    • ЦСИ
      • com.org.net
        • Твой класс
    • тестовое задание
      • com.org.net
        • YourTest.class
    • Lib
    • бункер
    • Ресурсы

вместо. На самом деле Maven делает очень большую ошибку: он хочет добавить двоичный контент в репозиторий исходного кода, который предназначен только для текстового контента! Все двоичное содержимое должно управляться вне репозитория исходного кода, включая изображения в веб-приложениях и тому подобное.

Но хорошо, давайте предположим, что вы решили жить в несколько вонючей экосистеме Maven; тогда вы должны, конечно, строго следовать конвенциям Maven.

Это конвенция Maven.

Maven основан на Конвенции о конфигурации парадигмы. Это означает: если вы не следуете этому соглашению, вы должны указать, где находятся источники. Вот главное преимущество ИМХО.

Да, это соглашение Maven, но даже если вы не используете Maven, у него есть преимущества:

  1. новичкам в проекте будет легче освоиться, так как это "стандарт"
  2. это соглашение является гибким и имеет место для не-Java-кода и других вещей, которых у вас нет на данный момент. Это одна из причин его популярности, и вы можете обнаружить, что он развивается лучше, чем схема, которую вы придумали самостоятельно.
  3. если вы хотите перейти в Maven в какой-то момент, это будет легко

Хотя я бы не стал утверждать, что вам следует переключаться только на переключение, при запуске нового проекта на самом деле нет причин не использовать его - если только вы философски не согласны с тем, как он разбивает код.

Другие вопросы по тегам