2009-07-22 14 views
28

buduję mój projekt z Apache Maven i mają zwyczaj repozytorium skonfigurowane ale gdy trafi do repozytorium po prostu wisi na bardzo długi czas zJak zmusić programistę do przekroczenia limitu czasu podczas pobierania zależności?

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

po kilku minutach przechodzi i pliki do pobrania to z centralnego repo

Pobieranie: http://repo1.maven.org/maven2/org/springframework/spring/2.5.6/spring-2.5.6.pom 12K pobrane (wiosna-2.5.6.pom)

Chcę timeout się znacznie szybciej niż to. Dzieje się tak ze wszystkimi nowszymi wersjami maven. Wersja 2.0.6 lub wcześniejsza nie miała tego problemu, bo upłynąłaby znacznie szybciej.

+0

Wygląda na http://www.jroller.com/mrdon/entry/making_maven_2_not_suck było kilka prób na to, ale nie mogę znaleźć sposobu korzystania z niego. – rado

Odpowiedz

21

W wersjach Mavena przed wersją 2.1 nie ma możliwości skonfigurowania klienta na timeout, ale można skonfigurować go tak, aby sprawdzał aktualizacje rzadziej, jeśli ustawiono politykę aktualizacji. To częściowo rozwiązuje problem.

Na przykład:

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

Prawidłowe wartości to:

  • zawsze - zawsze sprawdzić kiedy Maven jest uruchamiany na nowszych wersjach migawek
  • nigdy - nigdy nie sprawdza, czy są nowsze wersje zdalnych. Po wyłączeniu można przeprowadzić aktualizacje ręczne.
  • dziennie (domyślnie) - sprawdź na pierwszym biegu dnia (czasu lokalnego)
  • przedział: XXX - sprawdź co XXX minut

Innym zjawiskiem jest używane oprogramowanie do organizacji wewnętrznego repozytorium . Za pomocą menedżera repozytorium, takiego jak Nexus, możesz zarządzać wszystkimi zewnętrznymi połączeniami do repozytorium zdalnego za pośrednictwem menedżera i konfigurować limit czasu dla tych połączeń zdalnych. Twój klient zapyta wtedy tylko menedżera repozytorium, który powinien zareagować tak szybko, jak pozwalają na to limity czasu.


Aktualizacja:

Jeśli znasz Zależności nie będą podawane przez danego repozytorium, można podzielić go na profilu, więc to nie jest wymieniony w tej kompilacji.

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

W powyższej konfiguracji, działa mvn pakiet -Premote nie łączy się z wewnętrznym repozytorium, więc limit czasu nie będzie czynnikiem.

można uniknąć konieczności określania profili na każdej budowie, dodając kilka dodatkowych config z ustawieniami:

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

Dla Maven 2.1 można ustawić limit czasu dodając konfigurację na serwerze w ustawieniach Mavena (~/.m2/settings.xml domyślnie), na przykład:

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

Nie wiedziałem o tych zasadach aktualizacji, ale właśnie zaktualizowałem niektóre zależności, więc muszę je pobrać i pobrać. Uzgodniono na menedżerze repozytorium, ale ponieważ konsultuję tę firmę, mogę wykonać tylko to, o co mnie proszą. Może uda mi się w przyszłości użyć menedżera repozytorium, ale będzie to jeszcze jedna rzecz, którą muszą utrzymywać. – rado

+0

Wystarczająco uczciwe, zaktualizowałem swoją odpowiedź obejściem, które może pomóc w obecnej sytuacji. –

+0

Aby obejść to na chwilę, to co zrobiłem to usunąć z pom.xml, uruchomić mvn i pozwolić mu pobrać z repo1, a następnie przywrócić moje niestandardowe repozytorium. – rado

0

Jeden szybki i brudny Hack jest dodanie wpisu niestandardowy plik hosts do przekierowywania żądań sieciowych do niepoprawne repozytorium do poprawnego.

+0

Brzmi jak dobry pomysł, jak by to wyglądało? Zakładam, że masz na myśli '/ etc/hosts' na Linuksie. –

Powiązane problemy