是否可以用@SpringBootApplication main 制作一个带有两个弹簧启动应用程序的胖罐子
Posted
技术标签:
【中文标题】是否可以用@SpringBootApplication main 制作一个带有两个弹簧启动应用程序的胖罐子【英文标题】:Is it possible to make one fat jar with two spring boot app inside each with @SpringBootApplication main 【发布时间】:2021-02-06 15:17:44 【问题描述】:我是 Spring Boot/gradle 的新手,所以如果我说错了,请随时纠正我。
我有两个 Spring Boot 项目,我正在使用 Spring Boot Gradle Plugin 在不同的端口中一一运行,并生成相应的 jars。
我想知道是否可以生成一个可以在不同端口上运行两个项目的胖 jar。
这是我的项目的结构:
项目
setting.gradle
项目-1
src/.../@SpringBootApplication Main build.gradle项目-2
src/.../@SpringBootApplication Main2 build.gradle我将两个项目都包含在setting.gradle中,Project-2包含在Project-1的依赖项中,并尝试了gradle clean build
,但是Project-1中生成的fat jar不包含Project-2的jar。我期望的是,当我运行 fat jar 时,它会在各自的端口中公开两个项目,就好像我对每个项目都做了gradle bootRun
。
我做的对吗?我假设将 Project-2 放在 Project-1 的依赖项中会使 gradle 创建我想要的胖 jar。
或者那是不可能的,我只需要使用给我的两个罐子?
感谢您的宝贵时间。
【问题讨论】:
你试过谷歌搜索吗?有多种方法可以实现这一点,具体取决于用例可接受的方式。您可以在同一个 tomcat 实例后面部署多个 jar,也可以创建一个包含这两个应用程序的新 jar。不过推荐第一个 是的,我搜索了谷歌,这就是我遇到问题的方式。之所以在此处发布此内容,是因为我自己达到了自己的极限。感谢您的回答,我会尝试在这些方向上搜索更多内容。 【参考方案1】:您可以在同一个 tomcat 实例后面部署两个单独的 jar 以获得相同的结果。假设你在tomcat后面部署my-first-jar.jar
和my-second-jar.jar
,你会得到两组端点,比如:
http://localhost:8080/my-first-jar/apis-from-first-jar
http://localhost:8080/my-second-jar/apis-from-second-jar
但是,您似乎无法正确创建胖罐。默认情况下,项目的依赖项不包含在 jar 中。您需要明确地对构建工具(在您的情况下为 gradle)说来制作一个胖罐子。看看here
一旦创建了项目 1 的胖 jar,它也将包含来自项目 2 的文件,但您将只能运行单个 spring boot 应用程序。
PS:如果您愿意,您可以在单个容器应用程序中运行多个应用程序。看看here,但不建议你走那条路,因为它很乱
【讨论】:
再次感谢您的回答。我正在调查你提到的事情,一旦我解决了这个问题,我会尽快回复你。 所以,我最终分别使用了两个罐子,每个罐子都在一个容器和不同的端口中。感谢您的帮助。以上是关于是否可以用@SpringBootApplication main 制作一个带有两个弹簧启动应用程序的胖罐子的主要内容,如果未能解决你的问题,请参考以下文章