niedziela, 3 kwietnia 2011

Własne repozytorium mavena na serwerze www

Tworząc mały modularny projekt natchnąłem się na pewien problem, jak udostępnić biblioteki współdzielone pomiędzy projektami. Oczywiście mogę po prostu dodać bibliotekę do ścieżki ale wiąże się to z utrudnioną ewentualną aktualizacją biblioteki (trzeba pobrać, skopiować itd.) no i jest trochę bezsensowne jeśli używa się mavena - aplikacji która została stworzona do rozwiązywania takich problemów. Niestety maven wymaga repozytorium z którego może pobrać odpowiednie biblioteki co dotychczas stanowiło dla mnie problem, dotychczas bo niedawno poznałem plugin wagon-ftp który potrafi zamienić serwer ftp/http w pełni działające repozytorium mavena.


Aby poprawnie skonfigurować wagon-ftp należy w pliku pom.xml projektu który chcemy przesłać do repozytorium dodać następującą konfigurację:

<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-beta-7</version>
</extension>
</extensions>
</build>

<distributionManagement>
<repository>
<id>darekzon-maven-ftp</id>
<url>ftp://example.com</url>
</repository>
</distributionManagement>

Powyższa konfiguracja w sekcji "extensions" dołącza plugin wagon-ftp do naszego projektu, następnie w sekcji "distributionManagement" konfigurujemy id repozytorium oraz adres do niego. Potrzebujemy jeszcze dane uwierzytelniające, jednak one nie powinny być składowane w pliku pom.xml który jak wiadomo jest udostępniany wszystkim. Dane te umieścimy bezpośrednio w konfiguracji mavena (u mnie plik ~/.m2/settings.xml).

<servers>
<server>
<id>darekzon-maven-ftp</id>
<username>mvn@example.com</username>
<password>jakies_haslo</password>
</server>
</servers>
</settings>

Powyższa konfiguracja definiuje serwer który ma działać w połączeniu z repozytorium o id maven-ftp (identyfikatory muszą się zgadzać) i ma wykorzystywać zadany login oraz hasło.

Po skonfigurowaniu wagon-ftp wystarczy w konsoli przejść do naszego projektu i wykonać polecenie

maven deploy

dzięki któremu maven skompiluje nasz projekt i automatycznie wyśle go na serwer.

Gdy już wrzucimy nasze biblioteki na serwer musimy dodać repozytorium do projektów, przykładowa konfiguracja wygląda jak poniżej:

<repositories>
<repository>
<id>moje-repo</id>
<url>http://example.com/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>

3 komentarze:

  1. Nie wiem czy coś się zmieniło w nowej wersji Mavena, ale kiedy ja robiłem sobie repozytorium pod koniec października to trzeba było jeszcze zindeksować repozytorium przy pomocy nexus-indexer.

    OdpowiedzUsuń
  2. Sprawdziłem, żadne dodatkowe akcje nie są potrzebne. Wcześniej używałem Nexusa jako kompletnego narzędzia do przechowywania repozytorium i muszę powiedzieć, że w połączeniu z Hudsonem sprawia się świetnie, jednak cięcia budżetowe pozbawiły mnie tego narzędzia.

    OdpowiedzUsuń
  3. Nic takiego nie jest potrzebne, po wysłaniu pakietu na serwer jest on automatycznie dostępny w naszym IDE (oczywiście, czasem trzeba pobrać aktualizację pakietów w repozytorium)

    OdpowiedzUsuń