Heroku支持deployment of Java apps based on Maven
如果需要在公共maven存储库中不可用的lib,他们也会give advice进行应用部署
但: 我有两个Maven项目,其中一个取决于另一个。当我在本地mvn安装依赖工件时,我可以mvn打包另一个,一切正常。但是,我无法将其推送到heroku,因为heroku无法访问我当地的mvn repo。
我该怎么办?是否有必要在网络上设置一个可供heroku访问的私有maven仓库(例如神器),还是有其他方法来部署这样一个具有heroku自定义依赖性的应用程序?
感谢。
答案 0 :(得分:2)
Heroku的备用部署路径名为Anvil,可能对此有所帮助。使用此路径,您将使用您需要的任何私有库本地构建所有内容并copy all dependencies into your target directory,然后使用Anvil构建并将整个内容发布到您的Heroku应用程序中。默认情况下,Anvil会将您的应用程序检测为Java并尝试再次构建它,但是您可以通过指定null buildpack来覆盖它,这会告诉它将您的文件保留为原样,因为您已经在本地进行了构建。通过示例可能更好地显示了这一点:
安装Anvil:
heroku plugins:install https://github.com/ddollar/heroku-anvil
克隆已在其copy-dependencies
中配置pom.xml
的此示例应用。您需要在自己的应用中进行配置:
git clone git://github.com/heroku/template-java-jaxrs.git
进入目录并构建应用程序,该应用程序将运行copy-dependencies
。这很重要,因为您需要在应用的target
目录中使用所有依赖项,而不是~/.m2/repository
,因此Heroku将能够找到它们:
mvn package
创建Heroku应用程序:
heroku create
使用Anvil使用null buildpack进行构建并发布到应用程序:
heroku build -b https://github.com/ryandotsmith/null-buildpack.git -r
答案 1 :(得分:1)
了解我们如何使用实时开源Web应用程序执行此操作:pom.xml。该应用程序使用Maven和Ant部署到Heroku。我们会自动执行git clone
,然后将新文件复制到该文件夹中,然后执行git commit && git push
。重要的是我们使用maven-invoker-plugin
来下载Heroku slug中的工件。
答案 2 :(得分:0)
您需要一个Maven存储库。如果您的项目在GitHub上,那么您可以使用JitPack。它将构建您的代码并发布一个jar。
网站上有说明和文档。基本上将JitPack添加为存储库,然后将项目添加为依赖项。
答案 3 :(得分:0)
自2018年8月起,我建议使用Heroku Maven Plugin
它允许在本地构建应用程序,然后将人工制品推送到Heroku。 它解决了我与本地Maven依赖项有关的问题。
Spring Boot应用程序的示例配置:
<build>
<plugins>
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>2.0.5</version>
<configuration>
<appName>${heroku.appName}</appName>
<processTypes>
<web>java -Dserver.port=$PORT $JAVA_OPTS -jar target/${project.build.finalName}.jar</web>
</processTypes>
</configuration>
</plugin>
</plugins>
</build>
如果您使用的是Heroku CLI,那么${heroku.appName}
将被自动解析。