14


我必须在我的 java/maven heroku 应用程序中使用非托管 SNAPSHOT 依赖项。我使用本文中描述的项目本地 maven 存储库来执行此操作

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

有没有办法手动或自动清理这个依赖缓存?

我找到了这个maven 插件(它进行本地构建并将生成的人工制品推送到 heroku),但它并不是我真正想要的方式。

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

我很感激你的回答

4

4 回答 4

27

java buildpack的一个分支可以清除 maven 缓存。要使用它,请将您的应用程序配置为使用分支:cache_clear

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

===更新===

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

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

$ heroku repo:purge_cache -a appname

于 2013-03-19T01:47:49.683 回答
4

通过控制台登录heroku,进入你应用的git仓库目录,运行以下命令,再次尝试推送到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

您还可settings.xml以为您的 Maven 配置自定义,请参阅此heroku 文档

于 2016-12-23T16:01:56.763 回答
1

我用另一种方法编写了插件:将容器 + 战争图像捆绑到一个 git 存储库基础图像中(现在,它要么是 winstone 和/或码头),它被推送到 Heroku,因此更容易部署(我认为) :]

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

于 2013-08-15T20:15:03.077 回答
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}]]
于 2015-12-23T01:20:48.947 回答