我有一个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 回答
以下是解决此问题的两种方法:
您可以添加提到的 @Stephane Nicoll 之类的skip属性 . 但是,这将完全忽略该模块内的测试用例 . https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/it-skip.html
另一种选择是添加分类器属性以从该模块中创建单独的可执行jar . https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/repackage-classifier.html
此修复将确保依赖模块获取其所需的jar,源模块仍将是可执行的模块 .
我没有关于你的项目的所有细节,但我最好的猜测是
spring-boot-maven-plugin
是在父项上定义的(或者你在根pom中使用了spring-boot-starter-parent
) . 这有效地要求构建将您的模块打包为Spring Boot应用程序(这不是您想要的) .STS可能会查找该提示,以确定模块是否包含Spring Boot应用程序 . 也许如果它寻找一个用
@EnableAutoConfiguration
(或SpringBootApplication
)注释的主类会更好 .您可以通过指定skip property of the repackage goal轻松解决问题(从构建方面)
如果STS仍然将模块作为Spring Boot应用程序选择,我将创建an issue in their tracker
通常,如果模块中不存在,则Spring Boot将不会启动Web容器 . 我建议你使用命令分析你的拒绝
另一种强制确保方法是在application.properties中使用此配置