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

查看:16
本文介绍了Maven 配置与 Spring Boot &多模块 - 在 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 &amp;多模块 - 在 Intellij 中运行应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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