Maven 配置与 Spring Boot &多模块 - 在 Intellij 中运行应用程序 [英] Maven configuration with Spring Boot & multi modules - run application in 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...
这是我的项目结构:
- 父母
- pom.xml
- 主模块
- 控制器
- 域
- App.java(Spring Boot 主类)
- pom.xml
- 控制器
- 域
- 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 和 config 运行项目:
I think that's correct, but not sure... I run the project in Intellij with Maven with config :
- 工作目录是根目录(不是子模块)
- 命令行
mvn spring-boot:run -Drun.arguments=--spring.profiles.active=dev -e -pl main
- property start-class with parent.main.App
需要您的帮助来配置所有这些东西以运行 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 !
谢谢!
推荐答案
你需要告诉 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.这篇关于Maven 配置与 Spring Boot &多模块 - 在 Intellij 中运行应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!