在Heroku上部署Java应用程序,这取决于我自己的Maven工件

时间:2012-08-21 20:57:39

标签: java maven deployment heroku artifactory

Heroku支持deployment of Java apps based on Maven

如果需要在公共maven存储库中不可用的lib,他们也会give advice进行应用部署

但: 我有两个Maven项目,其中一个取决于另一个。当我在本地mvn安装依赖工件时,我可以mvn打包另一个,一切正常。但是,我无法将其推送到heroku,因为heroku无法访问我当地的mvn repo。

我该怎么办?是否有必要在网络上设置一个可供heroku访问的私有maven仓库(例如神器),还是有其他方法来部署这样一个具有heroku自定义依赖性的应用程序?

感谢。

4 个答案:

答案 0 :(得分:2)

Heroku的备用部署路径名为Anvil,可能对此有所帮助。使用此路径,您将使用您需要的任何私有库本地构建所有内容并copy all dependencies into your target directory,然后使用Anvil构建并将整个内容发布到您的Heroku应用程序中。默认情况下,Anvil会将您的应用程序检测为Java并尝试再次构建它,但是您可以通过指定null buildpack来覆盖它,这会告诉它将您的文件保留为原样,因为您已经在本地进行了构建。通过示例可能更好地显示了这一点:

  1. 安装Anvil:

    heroku plugins:install https://github.com/ddollar/heroku-anvil

  2. 克隆已在其copy-dependencies中配置pom.xml的此示例应用。您需要在自己的应用中进行配置:

    git clone git://github.com/heroku/template-java-jaxrs.git

  3. 进入目录并构建应用程序,该应用程序将运行copy-dependencies。这很重要,因为您需要在应用的target目录中使用所有依赖项,而不是~/.m2/repository,因此Heroku将能够找到它们:

    mvn package

  4. 创建Heroku应用程序:

    heroku create

  5. 使用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}将被自动解析。