Sto cercando di ottenere un progetto di programmazione Java configurato in modo che possa essere compilato completamente offline solo dai file nel controllo di versione, su qualsiasi macchina, senza prerequisiti da installare. (Eccezione unica: JDK)
Non conosco molto Maven, ma sto attualmente imparando Gradle. Per la build sto utilizzando Gradle con il wrapper, ho modificato gradle-wrapper.properties
in modo che distributionUrl
non punti a un URL remoto ma a un file all'interno della cartella del progetto. Quindi lo stesso Gradle è già fatto.
Per le dipendenze però, questo è un puro incubo. Ho già provato a gestirlo semplicemente indirizzando direttamente a singoli JAR o raccolte di JAR, ma come sicuramente sai questo finisce in totale confusione se hai interdipendenze e / o dipendenze transitive.
Fondamentalmente quello che voglio è Gradle / Maven configurato (solo per questo progetto) in modo tale che usino una directory diversa per la loro cache delle dipendenze locale - non una che sia condivisa da qualsiasi cosa tu faccia sul tuo account utente, nella tua directory home, ma invece una cartella all'interno della cartella del progetto (così posso verificarla anche nel controllo della versione) che è usata solo per quel progetto. In una sola volta, prendere Gradle / Maven in modalità online, eseguire una volta la build per scaricare tutte le dipendenze attualmente necessarie nella directory della cache locale all'interno della cartella del progetto (il cui contenuto viene quindi inserito in VC), quindi metterlo in modalità offline per tutte le successive build.
Non ho ancora trovato un modo per riconfigurare quel percorso della cache locale solo per questo progetto (deve essere qualcosa che posso semplicemente inserire nel mio build.gradle
). Qualcuno ha un vantaggio per me?
Modifica: Un'altra cosa sarebbe avere questo repository locale all'interno della cartella del progetto come un repository Maven "reale" (anziché solo una cache). Ma ciò implicherebbe il lavoro manuale per un modo che immaginavo: si avvia una copia locale di Sonatype Nexus che ha un repository proxy configurato per tutti i repository Maven a cui si fa riferimento in build.gradle
; si modificano gli URL del repository nel proprio script di build in modo che facciano riferimento al Nexus locale, quindi si esegue una volta il build in modo che Nexus scarichi i deps e li inserisca nella propria directory di lavoro nella "normale" struttura di repository Maven; quindi copi quella struttura in una cartella all'interno della cartella del progetto e modifica gli URL del repository buildscript in modo che facciano riferimento alla cartella in cui hai appena copiato i file. Un sacco di lavoro che può a malapena essere automatizzato.