我必须在我的java / maven heroku应用程序中使用非托管SNAPSHOT依赖项。
我使用this article.
Heroku缓存构建之间的依赖关系。不幸的是,Heroku没有注意到SNAPSHOT版本是否发生了变化并继续使用缓存的依赖项。这会导致编译错误,因为我依赖于SNAPSHOT版本的更改。
有没有办法手动或自动清理此依赖项缓存?
我发现了这个maven plugin(它做了一个本地构建并将生成的文物推送到heroku)但它并不是我想要的方式。
有人可能认为首先使用这种快照依赖是一种不好的做法,但我认为还有其他或多或少的有效理由来清理现金,例如:泄漏存储,因为如果从项目本地存储库中删除非托管依赖项,则甚至不会将其删除。
感谢您的回答
答案 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,从而更容易部署(我认为):]
答案 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}]]