2013-03-16 103 views
12


我必须在我的java/maven heroku应用程序中使用非托管的SNAPSHOT依赖项。 我这样做使用项目本地的Maven仓库在this article.如何清理Heroku的依赖缓存(非托管的Maven依赖)

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

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

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

有人可能会认为它的糟糕做法是首先使用这个快照依赖关系,但我认为还有其他或多或少有效的理由来清理现金,因为如果从项目本地存储库中删除非托管依赖项,它们甚至不会被删除。

我很欣赏你的答案

回答

25

有扫清行家缓存java buildpackbranch。要使用它,请配置应用程序来使用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

+0

感谢您的回复。正如所料,使用buildpack会导致相当长的依赖下载。不幸的是,我现在得到以下错误:'不能将工件:pom:1.3-SNAPSHOT从/移至project.local(file:/ tmp/build_asdf/repo):校验和验证失败,预期,但是'。在构建工件时使用'-DcreateChecksum = true'并没有帮助。 – mulrich 2013-03-25 13:04:04

+0

为了解决校验和问题,它有助于从(项目本地)存储库标记中除去 fail。 – mulrich 2013-03-25 14:36:55

+3

我正在更新。事实上,历史部分也许应该用一个删除线来表明,heroku插件是迄今为止的首选方式。 – 2014-09-18 13:56:40

0

这并不直接回答这个问题,但如果你遇到的SA我问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}]] 
4

登录由控制台heroko,去你的应用程序的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

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

+1

比其他答案更好,因为它不需要额外的插件,文件或黑客 – 2017-04-21 16:03:48

+0

@MichaelTecourt谢谢。 – Visruth 2017-04-21 19:38:06