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

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

  • Проект-A
    • бен
    • Lib
    • ЦСИ
      • основной
        • Java
          • RootLevelPackageClass.java

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

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

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

Chris

Ответы [ 5 ]

54 голосов
/ 09 июня 2010

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

  • Project-A
    • bin
    • lib
    • src
      • main
        • java
          • RootLevelPackageClass.java
        • ресурсы
      • test
        • java
          • TestRootLevelPackageClass.java
        • ресурсы

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

23 голосов
/ 09 июня 2010

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

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

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

13 голосов
/ 09 июня 2010

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

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

  • [root]
    • src
      • com.org.net
        • Ваш.класс
    • тест
      • com.org.net
        • YourTest.class
    • lib
    • bin
    • ресурсы

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

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

9 голосов
/ 09 июня 2010

Это соглашение Maven.

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

4 голосов
/ 09 июня 2010

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

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

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

...