使用Spring Boot和多个模块的Maven配置 – 在Intellij中运行应用程序
我目前正在使用Spring Boot开发REST API。
我是Maven的新手,刚开始使用IDEA编码(还不熟悉这个IDE),我有一个问题……
这是我的项目结构:
- 亲
- 的pom.xml
- 主要模块
- 调节器
- 域
- App.java(Spring Boot主类)
- 的pom.xml
- 子模块(需要主模块作为依赖)
- 控制器
- 域
- 的pom.xml
因此,当我在Intellij中运行项目时,它会启动,我可以访问主模块控制器中定义的所有URL。 但不是子模块控制器中的那些……看起来只有主模块被加载了。
这是我的父pom.xml:
org.springframework.boot spring-boot-starter-parent 1.2.1.RELEASE 4.0.0 Test :: Test :: Parent POM test.test.test project-parent 0.0.1-SNAPSHOT pom 1.8 1.8 1.2.1.RELEASE 2.5 java jacoco reuseReports ${project.basedir}/../target/jacoco.exec 2.18.1 0.7.3.201502191951 UTF-8 UTF-8 submodule main org.apache.maven.plugins maven-surefire-plugin ${maven-surefire-plugin.version} true **/*Test.java **/*IT.java **/*Story.java org.jacoco jacoco-maven-plugin ${jacoco-maven-plugin.version} ${project.basedir}/../target/jacoco.exec prepare-agent org.codehaus.mojo sonar-maven-plugin ${sonar-maven-plugin.version}
这里是我的主要模块pom.xml:
project-parent test.test.test 0.0.1-SNAPSHOT 4.0.0 main Test :: Test :: Main UTF-8 3.3.2 1.10 3.0.0 4.3.6 3.9.5 1.7.1 org.springframework.boot spring-boot-starter-data-rest org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security com.google.code.findbugs jsr305 ${jsr305.version} org.apache.commons commons-lang3 ${commons-lang3.version} commons-codec commons-codec ${commons-codec.version} com.h2database h2 postgresql postgresql 9.1-901-1.jdbc4 org.apache.httpcomponents httpclient ${http-commons.version} test org.apache.httpcomponents fluent-hc ${http-commons.version} test org.springframework.boot spring-boot-starter-test test org.springframework.data spring-data-commons org.jbehave jbehave-spring ${jbehave.version} test org.assertj assertj-core ${assertj.version} org.springframework.boot spring-boot-maven-plugin
这里是子模块pom.xml:
project-parent test.test.test 0.0.1-SNAPSHOT 4.0.0 submodule Test :: Test :: Submodule UTF-8 3.3.2 1.10 3.0.0 4.3.6 3.9.5 1.7.1 test.test.test main 0.0.1-SNAPSHOT
我认为这是正确的,但不确定…我使用配置在Maven中运行Intellij中的项目:
- 工作目录是root(不是子模块)
- 命令行
mvn spring-boot:run -Drun.arguments=--spring.profiles.active=dev -e -pl main
- 带有parent.main.App的属性start-class
需要你的帮助配置所有的东西来运行Spring Boot与IDE中加载的所有子模块用于开发目的…因为我只是不知道我的配置有什么问题!
谢谢 !
您需要告诉SpringBoot在哪里寻找您的控制器。 默认情况下,只发生在@SpringBootApplication
类的子包中(可能不包括子模块)。
为了更改它,您可以使用@ComponentScan("path.to.package")
来更改默认包。
此外,您可以使用@EntityScan
对可能位于子模块中的@Entity
类执行相同操作。
您的项目结构如下:
- 亲
- 的pom.xml
- 主要模块
- 调节器
- 域
- App.java(Spring Boot主类)
- pom.xml(将子模块作为依赖项添加到主模块)
- 子模块
- 控制器
- 域
- pom.xm
如果你的App.java在一个包中: com.xxxx.pro ,那么设置子模块的包是com.xxx.pro ,比如你的子模块的控制器是TestController.java,代码是:
package com.xx.pro.web; @RestController public class TestController{ }
所以,这个sub moudle的TestController将由App.java进行修复。试试吧,祝你好运。
还要注意,如果JPA实体和存储库不在Application.java包的子包中,那么@Entityscan和@EnableJpaRepositories必须在Application类中声明,例如:
@Configuration @ComponentScan(basePackages="com.my.pack") @EnableAutoConfiguration @EnableJpaRepositories(basePackages="com.my.pack") @EntityScan(basePackages="com.my.pack") public class Application{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } }