Maven richiede una connessione a Internet ad un certo punto per poterlo utilizzare? Significa ottenere specificamente i plugin interni di Maven per la compilazione, la pulizia, il confezionamento, ecc.?
Maven richiede una connessione a Internet ad un certo punto per poterlo utilizzare? Significa ottenere specificamente i plugin interni di Maven per la compilazione, la pulizia, il confezionamento, ecc.?
Risposte:
Puoi eseguire Maven in modalità offline mvn -o install
. Ovviamente qualsiasi artefatto non disponibile nel tuo repository locale fallirà. Maven non è basato su repository distribuiti, ma certamente rendono le cose più semplici. È per questo motivo che molti negozi utilizzano mirror interni sincronizzati in modo incrementale con i repository centrali.
Inoltre, mvn dependency:go-offline
può essere utilizzato per assicurarsi che tutte le dipendenze siano installate localmente prima di iniziare a lavorare offline.
mvn dependency:go-offline
semplicemente non cattura tutto. All'interno di una nuova macchina virtuale, ad esempio, il mio progetto deve ancora scaricare cose anche dopo aver eseguito questo obiettivo. Vedi anche questo numero .
Se si dispone di un PC con accesso a Internet nella LAN, è necessario installare un repository Maven locale.
Raccomando Artifactory Open Source . Questo è ciò che usiamo nella nostra organizzazione, è davvero facile da configurare.
Artifactory funge da proxy tra il tuo strumento di costruzione (Maven, Ant, Ivy, Gradle ecc.) E il mondo esterno.
Memorizza nella cache gli artefatti remoti in modo che non sia necessario scaricarli più e più volte.
Blocca le richieste esterne indesiderate (e talvolta sensibili alla sicurezza) per gli artefatti interni e controlla come e dove vengono distribuiti gli artefatti e da chi.
Dopo aver impostato Artifactory devi solo cambiare Maven settings.xml
nelle macchine di sviluppo:
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mirrors>
<mirror>
<mirrorOf>*</mirrorOf>
<name>repo</name>
<url>http://maven.yourorganization.com:8081/artifactory/repo</url>
<id>repo</id>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>plugins-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
</pluginRepository>
</pluginRepositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
Abbiamo utilizzato questa soluzione perché abbiamo avuto problemi con l'accesso a Internet nelle nostre macchine di sviluppo e alcuni artefatti hanno scaricato file danneggiati o non sono stati scaricati affatto. Da allora non abbiamo più avuto problemi.
Hai due opzioni per questo:
1.) apporta modifiche nel settings.xml aggiungilo nel primo tag
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2.) utilizzare il tag -o per il comando offline.
mvn -o clean install -DskipTests=true
mvn -o jetty:run
Maven ha bisogno delle dipendenze nel tuo repository locale. Il modo più semplice per ottenerli è con l'accesso a Internet (o più difficile utilizzando altre soluzioni fornite qui).
Quindi, supponendo che tu possa ottenere temporaneamente l'accesso a Internet, puoi prepararti a andare offline usando il plug-in di dipendenza maven con la sua dipendenza: obiettivo go-offline . Questo scaricherà tutte le dipendenze del tuo progetto nel tuo repository locale (ovviamente le modifiche alle dipendenze / plug-in richiederanno un nuovo accesso a Internet / al repository centrale).
Purtroppo
dependency:go-offline
non ha funzionato per me in quanto non ha memorizzato nella cache tutto, ad es. File POM e altri riferimenti impliciti alle dipendenze.
La soluzione alternativa è stata quella di specificare una posizione del repository locale , all'interno di settings.xml
file con <localRepository>...</localRepository>
o eseguendo mvn
con -Dmaven.repo.local=...
parametro. Dopo la compilazione iniziale del progetto, tutti gli artefatti necessari devono essere memorizzati nella cache, quindi è possibile fare riferimento alla posizione del repository nello stesso modo, mentre si esegue la compilazione Maven in modalità offline ( mvn -o ...
).
Prima di andare offline devi assicurarti che tutto sia nel tuo repository locale, che è richiesto quando lavori offline. L'esecuzione di "mvn dependency: go-offline" per il / i progetto / i su cui intendi lavorare ridurrà gli sforzi per raggiungere questo obiettivo.
Ma di solito non è tutta la storia, perché dependency: go-offline scaricherà solo i plug -in "bare build" ( go-offline / resolver-plugins non risolve tutte le dipendenze dei plug-in ). Quindi devi trovare un modo per scaricare plugin di deploy / test / site (e forse altri) e le loro dipendenze nel tuo repository.
Inoltre dipendenza: go-offline non scarica l'artefatto stesso del pom, quindi devi dipendenza: copialo se necessario.
A volte - come ha scritto MaDa - non sai di cosa avrai bisogno, pur essendo offline, il che rende praticamente impossibile avere un repo "sufficiente".
In ogni caso, avendo un repository correttamente compilato, devi solo aggiungere "<offline> true </offline>" al settings.xml di Maven per andare offline.
Non modificare il profilo Maven (id) che hai usato per riempire il tuo repository, mentre sei offline. Maven riconosce gli artefatti scaricati nei suoi metadati con una "identità", che è associata all'ID del profilo.
Se stai usando IntelliJ, puoi semplicemente andare su Preferenze -> Compila, Esecuzione, Distribuzione -> Strumenti di compilazione -> Maven e selezionare / deselezionare Lavora offline .
Per te funziona?
http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html
Non dimenticare di aggiungerlo al tuo repository di plugin e puntare l'URL ovunque sia il tuo repository.
<repositories>
<repository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</pluginRepository>
</pluginRepositories>
In caso contrario, potrebbe essere necessario eseguire un server locale, ad esempio apache, sulle macchine.
(fonte: jfrog.com )
o
Usa semplicemente i server di repository Maven come Sonatype Nexus http://www.sonatype.org/nexus/ o JFrog Artifactory https://www.jfrog.com/artifactory/ .
Dopo che uno sviluppatore ha costruito un progetto, compilato dagli sviluppatori successivi o Jenkins CI non richiederà l'accesso a Internet.
Il server di repository Maven può anche avere proxy configurati per accedere a Maven Central (o più repository pubblici necessari) e possono avere un elenco sincronizzato di artefatti nei repository remoti.
La mia esperienza mostra che l'opzione -o non funziona correttamente e che l'obiettivo di andare offline è lungi dall'essere sufficiente per consentire una compilazione offline completa:
La soluzione che potrei convalidare include l'uso --legacy-local-repository
dell'opzione maven piuttosto che quella -o
(offline) e l'uso del repository locale al posto del repository di distribuzione
Inoltre, ho dovuto copiare tutti i maven-metadata-maven2_central.xml
file del repository locale nel maven-metadata.xml
formato previsto da Maven.
Guarda la soluzione che ho trovato qui .
Rispondere direttamente alla tua domanda: non richiede una connessione a Internet, ma l'accesso a un repository, su LAN o disco locale (usa i suggerimenti di altre persone che hanno postato qui).
Se il tuo progetto non è in una fase matura, significa che quando i POM vengono cambiati abbastanza spesso, la modalità offline sarà molto poco pratica, poiché dovrai aggiornare anche il tuo repository abbastanza spesso. A meno che tu non possa ottenere una copia di un repository che ha tutto ciò di cui hai bisogno, ma come faresti a saperlo? Di solito si avvia un repository da zero e questo viene clonato gradualmente durante lo sviluppo (su un computer connesso a un altro repository). Una copia del repository pubblico repo1.maven.org pesa centinaia di gigabyte, quindi non consiglierei nemmeno la forza bruta.
È apparso un nuovo plugin per correggere i difetti di mvn dependency:go-offline
:
https://github.com/qaware/go-offline-maven-plugin
Aggiungilo nel tuo pom, quindi corri mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
. Dopo aver impostato tutte le dipendenze dinamiche, Maven non proverà a scaricare di nuovo nulla (fino a quando non aggiorni le versioni).
<offline> false </offline>
<localRepository>${user.home}/.m2/repository</localRepository>
per
<offline> true <offline>
<localRepository>${user.home}/.m2/repository</localRepository>
Modifica il tag offline da falso a vero.
verrà scaricato dal repository in linea