如何清理Heroku依赖缓存(非托管maven依赖项)

时间:2013-03-16 13:21:11

标签: heroku


  我必须在我的java / maven heroku应用程序中使用非托管SNAPSHOT依赖项。 我使用this article.

中描述的项目本地maven存储库来执行此操作

Heroku缓存构建之间的依赖关系。不幸的是,Heroku没有注意到SNAPSHOT版本是否发生了变化并继续使用缓存的依赖项。这会导致编译错误,因为我依赖于SNAPSHOT版本的更改。

有没有办法手动或自动清理此依赖项缓存?

我发现了这个maven plugin(它做了一个本地构建并将生成的文物推送到heroku)但它并不是我想要的方式。

有人可能认为首先使用这种快照依赖是一种不好的做法,但我认为还有其他或多或少的有效理由来清理现金,例如:泄漏存储,因为如果从项目本地存储库中删除非托管依赖项,则甚至不会将其删除。

感谢您的回答

4 个答案:

答案 0 :(得分:25)

branch java buildpack清除了maven缓存。要使用它,请将您的应用配置为使用cache_clear分支:

heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-java.git#cache_clear

===更新===

有一个plugin可以清除任何应用上的缓存。安装它并运行purge-cache命令。

$ heroku plugins:install https://github.com/heroku/heroku-repo.git

$ heroku repo:purge_cache -a appname

答案 1 :(得分:4)

通过控制台登录heroko,转到应用程序的git repository目录,运行以下命令并尝试再次推送到heroku git存储库

$ heroku config:set MAVEN_CUSTOM_GOALS="clean package"
$ heroku config:set MAVEN_CUSTOM_OPTS="--update-snapshots -DskipTests=true"

现在,它将在构建之前从存储库下载最新的SNAPSHOT。 有关详细信息,请参阅此heroku build pack for java

您还可以为maven配置自定义settings.xml,请参阅此heroku documentation

答案 2 :(得分:1)

我已经编写了一个替代版本的插件:将容器+ war图像捆绑到git存储库基本映像(现在,它的winstone和/或jetty),它被推送到Heroku,从而更容易部署(我认为):]

http://cedarhero.ingenieux.com.br/heroku-maven-plugin/

答案 3 :(得分:0)

这不能直接回答这个问题,但是如果你遇到与Clojure项目相同的问题(使用Leiningen),那么处理这个问题的方法比使用每个构建清除缓存更好:使用:update :always属性对于您正在使用的存储库。 (https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L91

:repositories [["releases" {:url "http://blueant.com/archiva/internal"
                            ;; How often should this repository be checked for
                            ;; snapshot updates? (:daily, :always, or :never)
                            :update :always}]]