2013-03-16 18 views
12


Muszę używać niezarządzanego zależność SNAPSHOT w mojej aplikacji java/maven heroku. Robię to za pomocą lokalnego repozytorium projektu, opisanego w this article.Jak czyścić pamięć podręczną zależności Heroku (niezarządzane zależności maven)

Heroku buforuje zależności między kompilacjami. Niestety, Heroku nie zauważy, czy wersja SNAPSHOT zmienia się i nadal korzysta z buforowanej zależności. Prowadzi to do błędów kompilacji, ponieważ zależą od zmian w wersji SNAPSHOT.

Czy istnieje sposób ręcznego lub automatycznego czyszczenia tej pamięci podręcznej zależności?

Znalazłem to maven plugin (robi lokalną kompilację i wypycha powstałe artefakty do heroku), ale tak naprawdę nie jest tak, jak chcę to zrobić.

Można argumentować, że jest to zła praktyka polegająca na używaniu tej zależności migawki, ale sądzę, że istnieją inne mniej lub bardziej uzasadnione powody czyszczenia gotówki, np. wycieku pamięci jako niezarządzane zależności nie są nawet usuwane, jeśli są one usuwane z lokalnego repozytorium projektu.

Doceniam odpowiedź

Odpowiedz

25

Jest branch z java buildpack że podaje maven cache. Aby z niego skorzystać, należy skonfigurować aplikację do korzystania z cache_clear Branża:

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

=== Aktualizacja ===

Jest plugin że czyści pamięć podręczną na dowolnej aplikacji. Zainstaluj go i uruchom polecenie purge-cache.

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

$ heroku repo:purge_cache -a appname

+0

Dzięki za odpowiedź. Zgodnie z oczekiwaniami, użycie buildpack prowadzi do dość długotrwałego pobierania zależności. Niestety pojawia się następujący błąd: 'Nie można przenieść artefaktu : : pom: 1.3-SNAPSHOT z/do project.local (file:/tmp/build_asdf/repo): Sprawdzanie sumy kontrolnej nie powiodło się, oczekiwano , ale jest '. Używanie "-DcreateChecksum = true" podczas budowania artefaktów nie pomogło. – mulrich

+0

Aby ominąć rzecz sumy kontrolnej, pomocne jest usunięcie fail z tagu repozytorium (project-local). – mulrich

+3

Aktualizuję aktualizację. W rzeczywistości część historyczna powinna być stylizowana z przekreśleniem, aby wskazać, że plugin heroku jest zdecydowanie preferowany. –

0

To nie jest odpowiedź na pytanie bezpośrednio, ale jeśli masz AF do wydania z projektem Clojure (używając Leiningena), jest lepszy sposób na to, niż wyczyszczenie pamięci podręcznej przy każdej kompilacji: użyj własności :update :always dla repozytorium, z którym pracujesz. (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

Logowanie do heroko przez konsoli przejdź do git katalogu repozytorium aplikacji, uruchom następujące polecenia i starają się wcisnąć do repozytorium Heroku git ponownie

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

Teraz pobierze najnowszą wersję SNAPSHOT z repozytorium przed kompilacją. Więcej informacji można znaleźć pod numerem heroku build pack for java.

Możesz także skonfigurować niestandardową settings.xml dla swojego maven'a, zapoznaj się z tym heroku documentation.

+1

Lepsze niż inne odpowiedzi, ponieważ nie wymaga dodatkowych wtyczek, plików ani hacków. –

+0

@MichaelTecourt Dzięki. – Visruth