Каково преимущество 'src/main/java'' конвенция?

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

  • Проект-A
    • мусорное ведро
    • lib
    • src
      • основной
        • Java
          • RootLevelPackageClass.java

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

  • Проект-A
    • мусорное ведро
    • lib
    • src
      • RootLevelPackageClass.java

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

Chris

49
задан Chris 8 June 2010 в 22:52
поделиться

5 ответов

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

  • Project-A
    • bin
    • lib
    • src
      • основной
        • Java
          • RootLevelPackageClass.java
        • ресурсы
      • тест
        • Java
          • TestRootLevelPackageClass.java
        • ресурсы

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

55
ответ дан 7 November 2019 в 11:35
поделиться

Да, это соглашение Maven.

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

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

23
ответ дан 7 November 2019 в 11:35
поделиться

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

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

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

4
ответ дан 7 November 2019 в 11:35
поделиться

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

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

  • [root]
    • src
      • com.org.net
        • Your.class
    • test
      • com.org.net
        • YourTest.class
    • lib
    • bin
    • resources

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

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

13
ответ дан 7 November 2019 в 11:35
поделиться

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

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

9
ответ дан 7 November 2019 в 11:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: