Spring Boot& amp; Maven配置多模块 - 在Intellij中运行应用程序 [英] Maven configuration with Spring Boot & multi modules - run application in Intellij

查看:144
本文介绍了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.

          这篇关于Spring Boot&amp; amp; Maven配置多模块 - 在Intellij中运行应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆