2013-03-16 16 views
12


Devo usare una dipendenza SNAPSHOT non gestita nella mia app java/maven heroku. Lo faccio utilizzando un repository di Maven di progetto locale come descritto in this article.Come pulire la cache delle dipendenze di Heroku (dipendenze gestite non gestite)

Heroku memorizza nella cache le dipendenze tra le generazioni. Sfortunatamente Heroku non si accorge se la versione di SNAPSHOT cambia e continua ad usare la dipendenza della cache. Questo porta a errori di compilazione poiché dipendo dai cambiamenti nella versione SNAPSHOT.

C'è un modo per pulire manualmente o automaticamente questa cache delle dipendenze?

ho trovato questo maven plugin (fa un accumulo locale e spinge i manufatti risultanti per Heroku), ma non è davvero il modo in cui voglio farlo.

Si potrebbe obiettare che è una cattiva pratica utilizzare questa dipendenza di snapshot in primo luogo, ma penso che ci siano altri motivi più o meno validi per pulire i contanti, ad es. perdita di spazio di archiviazione in quanto le dipendenze non gestite non vengono nemmeno rimosse se vengono eliminate dal repository locale del progetto.

Apprezzo la tua risposta

risposta

25

C'è un branch del java buildpack che cancella la cache Maven. Per usarlo, configurare la vostra applicazione per utilizzare il ramo cache_clear:

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

Aggiornamento === ===

C'è un plugin che cancella la cache in qualsiasi applicazione. Installalo ed esegui il comando purge-cache.

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

$ heroku repo:purge_cache -a appname

+0

Grazie per la risposta. Come previsto, l'utilizzo del buildpack porta a un download di dipendenza piuttosto lungo. Sfortunatamente ho ricevuto il seguente errore: 'Impossibile trasferire gli artefatti : : pom: 1.3-SNAPSHOT da/a project.local (file:/tmp/build_asdf/repo): convalida del checksum non riuscita, atteso ma è '. Usare '-DcreateChecksum = true' quando la costruzione degli artefatti non ha aiutato. – mulrich

+0

Per aggirare il checksum è utile rimuovere fail da un tag di repository (project-local). – mulrich

+3

Sono in aumento per l'aggiornamento. In effetti, la parte storica dovrebbe forse essere abbinata a un barrato per indicare che il plugin heroku è di gran lunga il modo preferito. –

1

ho scritto plugin con un take alternativo: bundling la l'immagine della guerra del contenitore + un'immagine di git repository di base in (per ora, la sua sia Winstone e/o della banchina), che è spinto a Heroku, maving quindi più facile da implementare (credo):]

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

0

Questo non risponde direttamente alla domanda, ma se hai la sa il mio problema con il progetto Clojure (usando Leiningen), c'è un modo migliore di gestirlo rispetto all'eliminazione della cache con ogni build: usa la proprietà :update :always per il repository con cui stai lavorando. (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

Accedere per heroko da console, andare al git repository directory della vostra applicazione, eseguire i seguenti comandi e cercare di spingere al repository Heroku git nuovo

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

Ora, scaricherà l'ultimo SNAPSHOT dal repository prima della compilazione. Fare riferimento a questo heroku build pack for java per ulteriori dettagli.

È anche possibile configurare un numero personalizzato settings.xml per il proprio utente, fare riferimento a questo heroku documentation.

+1

Meglio di altre risposte in quanto non richiede plugin, file o hack aggiuntivi –

+0

@MichaelTecourt Grazie. – Visruth

Problemi correlati