2009-07-22 1 views
28

Sto costruendo il mio progetto con Apache Maven e ho un repository personalizzato configurato, ma quando colpisce il repository appende appena per un tempo molto lungo conCome far sì che Maven si interrompa prima durante il download delle dipendenze?

Download: http://maven.mycompany.com/m2/org/springframework/spring/2.5.6/spring-2.5.6.pom

dopo pochi minuti va e download dalla repo centrale

download: http://repo1.maven.org/maven2/org/springframework/spring/2.5.6/spring-2.5.6.pom 12K scaricato (primavera-2.5.6.pom)

voglio il timeout di essere molto più veloce di quello. Questo succede con tutte le versioni più recenti di Maven. La versione 2.0.6 o precedente non aveva questo problema, sarebbe scaduto molto più velocemente.

+0

sembra http://www.jroller.com/mrdon/entry/making_maven_2_not_suck ci sono stati alcuni tentativi in ​​questo, ma non riesco a trovare come usarlo. – rado

risposta

21

Nelle versioni di Maven precedenti alla 2.1, non c'è modo di configurare il client per il timeout, ma è possibile configurarlo per verificare gli aggiornamenti meno spesso se si imposta la politica di aggiornamento. Questo risolve parzialmente il problema.

Ad esempio:

<repository> 
    <id>myrepo</id> 
    <url>http://maven.mycompany.com/m2</url> 
    <releases> 
    <enabled>true</enabled> 
    <updatePolicy>daily</updatePolicy> 
    </releases> 
    <snapshots> 
    <enabled>false</enabled> 
    <updatePolicy>always</updatePolicy> 
    </snapshots> 
</repository> 

valori validi sono:

  • sempre - controllare sempre quando Maven è avviato versioni più recenti delle istantanee
  • mai - mai verificare la presenza di nuove versioni remote. Una volta disattivati ​​gli aggiornamenti manuali possono essere eseguiti.
  • giorno (default) - controllare la prima corsa del giorno (ora locale)
  • Intervallo: XXX - controllare ogni XXX minuti

Un'altra considerazione è il software che si sta utilizzando per ospitare il repository interno . Con un gestore di repository come Nexus è possibile gestire tutte le connessioni del repository remoto esterno tramite il gestore e configurare il timeout per tali connessioni remote. Il tuo cliente interrogherà quindi il gestore del repository, che dovrebbe rispondere con la stessa rapidità allo come consentito dai timeout.


Aggiornamento:

Se si conoscono le dipendenze non stanno andando per essere servito da un particolare repository, è possibile separare in un profilo, in modo che non viene fatto riferimento in quella di costruzione.

<profiles> 
    <profile> 
    <id>remote</id> 
    <repositories> 
     <repository> 
     <id>central</id> 
     <url>http://repo1.maven.org</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>false</enabled></snapshots> 
     </repository> 
     ... 
    </repositories> 
    </profile> 
    <profile> 
    <id>internal</id> 
    <repositories> 
     <repository> 
     <id>myrepo</id> 
     <url>http://maven.mycompany.com/m2</url> 
     <releases><enabled>true</enabled></releases> 
     <snapshots><enabled>false</enabled></snapshots> 
     </repository> 
     ... 
    </repositories> 
    </profile> 
</profiles> 

Con la configurazione di cui sopra, l'esecuzione pacchetto mvn -Premote non si collegherà al repository interno, in modo che il timeout non sarà un fattore.

È possibile evitare di dover specificare i profili di ogni generazione con l'aggiunta di un po 'di configurazione in più per le impostazioni:

<settings> 
    ... 
    <activeProfiles> 
    <activeProfile>internal</activeProfile> 
    <activeProfile>remote</activeProfile> 
    </activeProfiles> 
    ... 
</settings> 

Per Maven 2.1 è possibile impostare il timeout con l'aggiunta di una configurazione sul server nelle impostazioni Maven (~/.m2/settings.xml per impostazione predefinita), per esempio:

<server> 
    <id>myrepo</id> 
    <configuration> 
    <timeout>5000</timeout> <!-- 5 seconds --> 
    </configuration> 
</server> 
+0

Non ero a conoscenza di queste politiche di aggiornamento, ma ho solo aggiornato alcune dipendenze e quindi è necessario uscire e scaricarle. D'accordo sul gestore del repository, ma poiché sto consultando questa azienda, posso solo fare il lavoro che mi chiedono. Forse potrò usare un gestore di repository in futuro, anche se questa sarà un'altra cosa che devono mantenere. – rado

+0

Abbastanza corretto, ho aggiornato la mia risposta con una soluzione che potrebbe essere d'aiuto nella tua situazione attuale. –

+0

Per aggirare il problema per il momento, quello che ho fatto è stato eliminare il dal pom.xml, eseguire mvn e scaricarlo dal repository1, quindi ripristinare il repository personalizzato. – rado

0

Un rapido e sporco hack è l'aggiunta di una voce del file host personalizzati per reindirizzare le richieste di rete a il repository non valido su uno valido.

+0

Sembra una buona idea, come sarebbe? Immagino tu intenda '/ etc/hosts' su Linux. –