Spring Boot& amp; Maven配置多模块 - 在Intellij中运行应用程序
我目前正在开发一个带有Spring Boot的REST API。
I'm currently working on a REST API with Spring Boot.
我是Maven的新手,刚刚开始使用IDEA编码(不太清楚)这个IDE了,我有一个问题......
I'm new to Maven and have just started coding with IDEA (don't know well this IDE yet), and I have a problem...
这是我的项目结构:
- parent
- pom.xml
- 主模块
- controller
- domain
- App.java(Spring Boot主类)
- pom.xml
- parent
- pom.xml
- main module
- controller
- domain
- App.java (Spring Boot main class)
- pom.xml
- controllers
- 域
- pom.xml
因此,当我在Intellij中运行项目时,它启动,我可以访问主模块控制器中定义的所有URL。但不是子模块控制器中的那些...看起来只有主模块被加载。
So when I run the project in Intellij, it starts, and I can access all URLs defined in the main module controller. But not the ones in the sub module controller... It looks like only the main module was loaded.
这是我的父pom.xml:
Here is my parent pom.xml :
<project> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.1.RELEASE</version> </parent> <modelVersion>4.0.0</modelVersion> <name>Test :: Test :: Parent POM</name> <groupId>test.test.test</groupId> <artifactId>project-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <properties> <!-- Specify Java Compiler Version --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!-- Spring --> <spring-boot.version>1.2.1.RELEASE</spring-boot.version> <!-- Sonar --> <sonar-maven-plugin.version>2.5</sonar-maven-plugin.version> <sonar.language>java</sonar.language> <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin> <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath> <!-- Plugin --> <maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version> <jacoco-maven-plugin.version>0.7.3.201502191951</jacoco-maven-plugin.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <modules> <module>submodule</module> <module>main</module> </modules> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin.version}</version> <configuration> <redirectTestOutputToFile>true</redirectTestOutputToFile> <includes> <include>**/*Test.java</include> <include>**/*IT.java</include> <include>**/*Story.java</include> </includes> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco-maven-plugin.version}</version> <configuration> <destFile>${project.basedir}/../target/jacoco.exec</destFile> </configuration> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>${sonar-maven-plugin.version}</version> </plugin> </plugins> </build> </project>
这里是我的主模块pom.xml:
Here my main module pom.xml :
<project> <parent> <artifactId>project-parent</artifactId> <groupId>test.test.test</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>main</artifactId> <name>Test :: Test :: Main</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <commons-lang3.version>3.3.2</commons-lang3.version> <commons-codec.version>1.10</commons-codec.version> <jsr305.version>3.0.0</jsr305.version> <!-- Testing dependencies --> <http-commons.version>4.3.6</http-commons.version> <jbehave.version>3.9.5</jbehave.version> <assertj.version>1.7.1</assertj.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>${jsr305.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> <!-- Test dependencies --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.1-901-1.jdbc4</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${http-commons.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>fluent-hc</artifactId> <version>${http-commons.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> </dependency> <dependency> <groupId>org.jbehave</groupId> <artifactId>jbehave-spring</artifactId> <version>${jbehave.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>${assertj.version}</version> </dependency> </dependencies> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
这里的子模块是pom.xml:
And here the sub module pom.xml :
<project> <parent> <artifactId>project-parent</artifactId> <groupId>test.test.test</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>submodule</artifactId> <name>Test :: Test :: Submodule</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <commons-lang3.version>3.3.2</commons-lang3.version> <commons-codec.version>1.10</commons-codec.version> <jsr305.version>3.0.0</jsr305.version> <!-- Testing dependencies --> <http-commons.version>4.3.6</http-commons.version> <jbehave.version>3.9.5</jbehave.version> <assertj.version>1.7.1</assertj.version> </properties> <dependencies> <dependency> <groupId>test.test.test</groupId> <artifactId>main</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
我认为这是正确的,但不确定...
我在Intellij运行项目与Maven配置:I think that's correct, but not sure... I run the project in Intellij with Maven with config :
- 工作目录是root(不是子模块)
- 命令行
mvn spring-boot:run -Drun.arguments = - spring.profiles.active = dev -e -pl main
- property带有parent.main.App的start-class
需要你的帮助才能配置所有运行Spring Boot的东西,并加载所有子模块在IDE中用于开发目的...因为我只是不知道我的配置有什么问题!
Need your help to configure all that stuff to run Spring Boot with all sub-modules loaded in the IDE for dev purpose... because I readlly don't know what is wrong in my config !
Thx!
您需要告诉SpringBoot在哪里寻找您的控制器。默认情况下,只发生在 @SpringBootApplication
类的子包中(可能不包括您的子模块)。
You need to tell SpringBoot where to look for your controllers. Per default that only happens in sub-packages of your @SpringBootApplication
class (which will probably not include your sub module).
为了更改它,您可以使用 @ComponentScan(path.to.package)
来更改默认包。
In order to change that you can use @ComponentScan("path.to.package")
to change the default package.
此外,您可以使用 @EntityScan
对可能存在的 @Entity
类执行相同的操作在你的子模块中。
Additionally, you can use @EntityScan
to do the same for @Entity
classes that might be in your sub-module.