2013-03-16 122 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