В чем преимущество соглашения '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
- тестовое задание
- com.org.net
- YourTest.class
- com.org.net
- Lib
- бункер
- Ресурсы
- ЦСИ
вместо. На самом деле Maven делает очень большую ошибку: он хочет добавить двоичный контент в репозиторий исходного кода, который предназначен только для текстового контента! Все двоичное содержимое должно управляться вне репозитория исходного кода, включая изображения в веб-приложениях и тому подобное.
Но хорошо, давайте предположим, что вы решили жить в несколько вонючей экосистеме Maven; тогда вы должны, конечно, строго следовать конвенциям Maven.
Это конвенция Maven.
Maven основан на Конвенции о конфигурации парадигмы. Это означает: если вы не следуете этому соглашению, вы должны указать, где находятся источники. Вот главное преимущество ИМХО.
Да, это соглашение Maven, но даже если вы не используете Maven, у него есть преимущества:
- новичкам в проекте будет легче освоиться, так как это "стандарт"
- это соглашение является гибким и имеет место для не-Java-кода и других вещей, которых у вас нет на данный момент. Это одна из причин его популярности, и вы можете обнаружить, что он развивается лучше, чем схема, которую вы придумали самостоятельно.
- если вы хотите перейти в Maven в какой-то момент, это будет легко
Хотя я бы не стал утверждать, что вам следует переключаться только на переключение, при запуске нового проекта на самом деле нет причин не использовать его - если только вы философски не согласны с тем, как он разбивает код.