2009-07-22 2 views
28

ich mit Apache Maven mein Projekt am Aufbau und eine benutzerdefinierte Repository konfiguriert haben, aber wenn es das Repository trifft es mitWie bekomme ich früher beim Abrufen von Abhängigkeiten timeout?

Herunterladen für eine sehr lange Zeit hängt gerade: http://maven.mycompany.com/m2/org/springframework/spring/2.5.6/spring-2.5.6.pom

nach wenigen Minuten geht es und Downloads es vom zentralen Repo

herunterladen: http://repo1.maven.org/maven2/org/springframework/spring/2.5.6/spring-2.5.6.pom heruntergeladen 12K (feder 2.5.6.pom)

ich mag das Timeout als das viel schneller sein. Dies geschieht mit allen neueren Versionen von Maven. Version 2.0.6 oder früher hatte dieses Problem nicht, es würde viel schneller ablaufen.

+0

sieht es wie http://www.jroller.com/mrdon/entry/making_maven_2_not_suck aus es gab einige Versuche, aber ich kann nicht finden, wie man es benutzt. – rado

Antwort

21

In Versionen von Maven vor 2.1 gibt es keine Möglichkeit, den Client auf Zeitlimit zu konfigurieren, Sie können ihn jedoch so konfigurieren, dass er bei der Festlegung der Aktualisierungsrichtlinie seltener nach Updates sucht. Dies behebt das Problem teilweise.

Zum Beispiel:

<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> 

Gültige Werte:

  • immer - immer überprüfen, wenn Maven für neuere Versionen von Snapshots
  • nie gestartet wird - nie für neuere Remote-Versionen überprüfen. Einmalige manuelle Updates können durchgeführt werden. täglich
  • (default) - überprüfen Sie auf dem ersten Lauf des Tages (Ortszeit)
  • Intervall: XXX - prüfen alle XXX Minuten

Eine weitere Überlegung ist die Software, die Sie mit Ihrem internen Repository Host . Mit einem Repository-Manager wie Nexus können Sie alle Ihre externen Remote-Repository-Verbindungen über den Manager verwalten und das Timeout für diese Remote-Verbindungen konfigurieren. Ihr Client wird dann nur den Repository-Manager abfragen, der so schnell reagieren sollte, wie die Timeouts zulassen.


Update:

Wenn Sie die Abhängigkeiten wissen nicht von einem bestimmten Repository bedient gehen werden, können Sie es in ein Profil trennen kann, so ist es nicht in diesem Build verwiesen.

<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> 

Mit der obigen Konfiguration, läuft MVN Paket -Premote wird nicht an die interne Repository verbinden, so dass der Zeitüberschreitungs kein Faktor sein.

können Sie vermeiden auf jedem Build die Profile angeben zu müssen, indem Sie einige zusätzliche Konfigurations, um Ihre Einstellungen hinzu:

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

Für Maven 2.1 können Sie das Timeout durch eine Konfiguration auf einem Server in den Maven Einstellungen hinzugefügt (~/.m2/settings.xml Standardeinstellung), zum Beispiel:

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

Ich war mir dieser Update-Richtlinien nicht bewusst, aber ich habe gerade einige Abhängigkeiten aktualisiert und muss sie daher herunterladen. Ich bin mit dem Repository-Manager einverstanden, aber da ich für diese Firma berate, kann ich nur die Arbeit tun, die sie von mir verlangen. Vielleicht kann ich in Zukunft einen Repository-Manager verwenden, obwohl das noch eine Sache sein wird, die sie beibehalten müssen. – rado

+0

Fair genug, ich habe meine Antwort mit einer Problemumgehung aktualisiert, die in Ihrer aktuellen Situation hilfreich sein kann. –

+0

Um es im Moment zu umgehen, was ich getan habe, war das Löschen der von der pom.xml, Ausführen von MVN und lassen Sie es aus dem Repo1 herunterladen, dann legen Sie mein benutzerdefiniertes Repository zurück. – rado

0

Ein quick and dirty Hack ist das Hinzufügen eines benutzerdefinierten Hosts-Datei Eintrags auf Netzwerkanforderungen umleiten zu das ungültige Repository zu einem gültigen.

+0

Klingt wie eine gute Idee, wie würde das aussehen? Ich nehme an, du meinst "/ etc/hosts" unter Linux. –

Verwandte Themen