Структура проекта Spring Maven pom.xml - PullRequest
0 голосов
/ 11 сентября 2018

Я бы хотел получить помощь в настройке многомодульного проекта Maven с использованием Spring Boot.

Поправьте меня, если я ошибаюсь, но я читал, что Spring-Boot читает главное приложение запуска (Аннотировано с @SpringBootApplication и запускается с SpringApplication.run) и находит необходимые классы посредством отражения.Это означает, что он сначала обращается к начальному классу, а затем переходит к поиску контроллеров, моделей, репозиториев.Если да, как мне установить зависимость в pom.xml каждого модуля, если у меня была такая структура проекта:

app
--src
--pom.xml

core
--pom.xml

--models
----/pom.xml

--controllers
----/pom.xml

--repositories
----/pom.xml

pom.xml

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Ознакомьтесь с полным руководством по созданию многомодульного проекта при весенней загрузке.

https://spring.io/guides/gs/multi-module/

0 голосов
/ 11 сентября 2018

У меня есть проект GitHub, где я настроил многомодульный проект maven:

https://github.com/cristianprofile/spring-boot-mvc-complete-example

Это пример структуры модуля maven проекта:

enter image description here

 Spring mvc rest maven module ---> service maven module  ---> repository maven module

Основной модуль должен быть настроен так (Spring mvc rest layer):

@SpringBootConfiguration
@EnableAutoConfiguration
//spring mvc module auto scan only its package
@ComponentScan(basePackageClasses = HelloWorldController.class)
//It needs Service bean so it will import ConfigurationService.class from
// Service maven module
@Import({ConfigurationService.class})

Полный класс:

https://github.com/cristianprofile/spring-boot-mvc-complete-example/blob/develop/spring-boot-mvc-rest/src/main/java/com/mylab/cromero/controller/Application.java

Он будет сканировать только свою посылку:

HelloWorldController.class  -->  com.mylab.cromero.controller;

Этот слой Rest использует модуль Service Maven, поэтому необходимо добавить зависимость:

    <dependency>
        <groupId>com.mylab.cromero.core</groupId>
        <artifactId>mylab-core-service-impl</artifactId>
        <version>0.0.2-SNAPSHOT</version>
    </dependency>

Полный файл pom:

https://github.com/cristianprofile/spring-boot-mvc-complete-example/blob/develop/spring-boot-mvc-rest/pom.xml#L16

ConfigurationService.class из модуля Service Maven автоматически сканирует свои пакеты и импортирует ConfigurationRepository.class (модуль Maven репозитория)

@Configuration
//It needs repository's bean so it will import ConfigurationRepository.class from
// Repository maven module
@Import(ConfigurationRepository.class)
//service layer module auto scan only its package
@ComponentScan(basePackageClasses = ConfigurationService.class)
public class ConfigurationService {

}

Полный код обслуживания maven модуля:

https://github.com/cristianprofile/spring-boot-mvc-complete-example/blob/develop/mylab-core/mylab-core-service-impl/src/main/java/com/mylab/cromero/service/ConfigurationService.java#L12

Уровень модуля Service Maven зависит от модуля репозитория maven:

https://github.com/cristianprofile/spring-boot-mvc-complete-example/blob/develop/mylab-core/mylab-core-service-impl/pom.xml#L38

Модуль репозитория автоматически сконфигурирует jpa и классифицированный домен:

@Configuration
@EnableJpaRepositories(basePackages = "com.mylab.cromero.repository")
@EntityScan(basePackageClasses=Base.class)
@ComponentScan(basePackageClasses = BaseRepository.class)
public class ConfigurationRepository {

}
0 голосов
/ 11 сентября 2018

Spring boot выполнит сканирование компонента из пакета класса, помеченного @SpringBootApplication.Компонент scannign означает, что он рекурсивно просматривает классы в этом пакете, анализирует аннотации и подключает все, что распознает.Это может включать контроллеры, простые переменные с аннотациями @Value, члены с @Autowired и множество других вещей.

Вы можете перейти к источнику для аннотации @SpringBootApplication и увидеть, что он расширяетсяко многим другим аннотациям, @ComponentScan является одним из них.

Если все ваши модули находятся в пакете подиерархии, то они все равно будут сканироваться должным образом.Тем не менее, часто субмодули находятся в несколько иной иерархии пакетов.В этом случае вы можете явно указать @ComponentScan() в своем коде, а внутри () вы можете перечислить базовые пакеты для сканирования компонентов.

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

Общие советы

Кроме того, только FYI - многомодульные проекты могут быть немного сложными для управления (говоря из многочисленных отдельных опытов).Они могут быть очень хорошими, если использовать их правильно.Если вы новичок в Maven, возможно, будет разумнее оставить отдельные четко определенные проекты с надлежащим циклом выпуска и просто импортировать их как обычные зависимости.

Так что я не за или противих, но только убедитесь, что вы понимаете их хорошо, входя :):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...