我想用Heroku部署一个Spring Boot应用程序,它是多模块Maven项目的一部分,并引用其中一个子模块:
$ ls .
api/
models/
Procfile
pom.xml
主父pom.xml
具有以下模块:
<modules>
<module>models</module>
<module>api</module>
</modules>
api
项目引用了具有以下的models
模块
<dependency>
<groupId>com.test</groupId>
<artifactId>models</artifactId>
<version>1.0</version>
</dependency>
Procfile
的内容为:
web: java -Dserver.port=$PORT -jar $PATH_TO_JAR
现在,当我执行git push heroku master
命令时,我收到这个错误:
remote: [ERROR] Failed to execute goal on project api:
Could not resolve dependencies for project com.test:api:jar:1.0:
Could not find artifact com.test:models:jar:1.0 in central (https://repo.maven.apache.org/maven2) -> [Help 1]
如何正确解决本地子模块依赖关系?
Heroku从头开始构建Maven reactor(在git push上(,但它无法找到api
依赖项,因为它既不在本地Maven中,也不在Maven中心
在本地,您将首先使用mvn install
子模块或使用system
作用域。
如果使用Heroku Docker部署应用程序,则可以保持相同的体系结构。
Dockerfile打包您在本地创建的SpringBoot jar文件:
FROM adoptopenjdk/openjdk11:latest
RUN mkdir -p /software
ADD target/mySpringBoot.jar /software/mySpringBoot.jar
CMD java -Dserver.port=$PORT $JAVA_OPTS -jar /software/mySpringBoot.jar
创建SpringBoot应用程序jar文件,然后构建/推送映像到Heroku
# build project locally (ie Springboot jar file)
mvn clean package
# build/push to Docker
heroku container:push web -a myapp
heroku container:release web -a myapp
不要忘记登录Heroku Docker注册表(heroku container:login
(,只需要一次。