我有一个多模块Spring-Boot应用程序的问题 .
我有一个模块,我用于服务,核心模块 . 一个用于视图相关类的模块,即web模块 . 它们都在父模块中,我在其中添加依赖项,如"spring-boot-starter",并且可以由两个模块使用 .
现在来问题:
我想运行带有嵌入式Tomcat的web模块,并将core-Module作为Web模块中的依赖项 .
在其他Spring项目中,我只需要包含maven-jar-plugin并创建一个core-Module的jar .
这个Spring-Boot项目的问题是在"spring-boot-starter"中已经配置了maven-jar-plugin . 它需要一个mainClass,只有web模块才有 .
摘自“spring-boot-starter”-POM
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>${start-class}</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
有没有办法将核心模块打包为JAR,而不需要在该模块中使用"start-class"?
4 回答
您可以通过这种方式禁用spring-boot-maven插件 .
看起来你可以通过配置
spring-boot-maven-plugin
来禁用fat-JAR来替换原来的并安装到repo中 .取自http://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/maven-plugin/examples/repackage-disable-attach.html:
如果您使用嵌入式tomcat来运行您的应用程序,那么您是否只想为您的Web应用程序使用标准的Spring Boot胖 jar ?如果是这样,只需将您的Web模块标记为依赖于pom中的核心模块,然后构建项目 .
这是一个不同的用例,您需要将 jar 分开吗?
您是将模块构建为完全独立的模块,还是将模块构建为单个多模块项目的一部分?区别在于后者,您将在根目录中指定模块 . 我特别忘记了Maven语法,所以我的例子是Gradle(多模块构建的Maven文档是here) . 对于那个很抱歉 .
baseProject的build.gradle:
Maven有类似的结构 . 您应该查看文档,但我相信您需要做的就是在父pom中正确指定模块顺序,如下所示,并在Web模块pom中包含依赖项 .
父母pom:
网络-POM:
核心pom应该只需要包含
parent
部分,如上面的web模块,否则是相同的 .我找到了答案 . 我配置我的应用程序就像@judgingnotjudging解释的那样 . 区别在于我把它放在了父母POM中:
它阻止了子模块中JAR的默认创建 . 我可以通过在Web模块中包含此 only 来解决此问题 .
这样Spring-Boot就可以从web-Module和一个来自core-Module的简单JAR构建一个fat-JAR .