首页 文章

spring 启动与maven多模块项目

提问于
浏览
4

我有一个maven多模块项目,设计类似于以下SO帖子中的第一个答案:Multi-module maven with Spring Boot

现在我想要一个通用的maven模块,它可以包含多个微服务使用的模型 . 如果我将这个常见项目作为第一级父pom的子项(以便通过引导注入的所有依赖项,如jpa,jackson等可用于公共),那么STS / Spring将其检测为启动应用程序并抱怨没有Main关于maven构建的课程 .

有人可以建议我如何实现这一目标吗?

现行代码:

parent pom.xml :(仅包含相关部分)

<project>
<name>...</name>
<groupId>...</groupId>
<artifactId>...</artifactId>
<packaging>pom</packaging>
<version>...</version>
<parent>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-parent</artifactId>
    <version>Brixton.M3</version>
    <relativePath />
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
</project>

子(公共模块)pom.xml(只有相关部分),不是启动应用程序:

<project>
<artifactId>...</artifactId>
<version>...</version>
<name>...</name>

<parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
</parent>

</project>

3 回答

  • 6

    以下是解决此问题的两种方法:

    <executions>
              <execution>
                <id>repackage</id>
                <goals>
                  <goal>repackage</goal>
                </goals>
                <configuration>
                  <classifier>exec</classifier>
                </configuration>
              </execution>
    

    此修复将确保依赖模块获取其所需的jar,源模块仍将是可执行的模块 .

  • 0

    我没有关于你的项目的所有细节,但我最好的猜测是 spring-boot-maven-plugin 是在父项上定义的(或者你在根pom中使用了 spring-boot-starter-parent ) . 这有效地要求构建将您的模块打包为Spring Boot应用程序(这不是您想要的) .

    STS可能会查找该提示,以确定模块是否包含Spring Boot应用程序 . 也许如果它寻找一个用 @EnableAutoConfiguration (或 SpringBootApplication )注释的主类会更好 .

    您可以通过指定skip property of the repackage goal轻松解决问题(从构建方面)

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
              <skip>true</skip>
        </configuration>
      </plugin>
    

    如果STS仍然将模块作为Spring Boot应用程序选择,我将创建an issue in their tracker

  • 0

    通常,如果模块中不存在,则Spring Boot将不会启动Web容器 . 我建议你使用命令分析你的拒绝

    mvn dependency:tree
    

    另一种强制确保方法是在application.properties中使用此配置

    spring.main.web-environment=false
    

相关问题