Friday, July 4, 2008

Upload do repozytorium mavena

Załóżmy, że mamy własne repozytorium mavena (np. nexusa, opisanego przez Leszka tutaj). Czasem jest potrzeba dorzucenia do takiego repozytorium "cudzej" biblioteki. Np. wtedy, gdy potrzebna nam jej nowa, świeża wersja, której jeszcze nie ma w repozytoriach ogólnodostępnych, ale można ją ściągnąć z internetu.

Przypuśćmy, że dołączyć chcemy bibliotekę httpunit w wersji 1.7. Mamy ją w pliku httpunit.jar w katalogu /home/franek/tmp/httpunit.jar. Nasze repozytorium jest pod adresem http://myserver/maven-repo


mvn deploy:deploy-file -DgroupId=httpunit -DartifactId=httpunit -Dversion=1.7 -Dpackaging=jar -Dfile=/home/franek/tmp/httpunit.jar -Durl=http://myserver/maven-repo -DrepositoryId=main

Maven sam wygeneruje plik POM. Jednak zdecydowanie lepiej jest mu go dostarczyć jeśli tylko takim dysponujemy. Inaczej narażamy się na to, że w wygenerowanym POMie może brakować bibliotek od których httpunit zależy. Załóżmy, że POM leży w katalogu /home/franek/tmp/pom.xml. Aby go dodać, do komendy trzeba dodać parametr -DpomFile=/home/franek/tmp/pom.xml. Jeśli dołączamy POMa, nie trzeba podawać parametrów groupId, artifactId, version i packaging - maven odczyta je z POMa.

Jeśli repozytorium wymaga nazwy użytkownika i hasła, trzeba je jeszcze ustawić w ~/.m2/settings.xml
<settings>
  ...
  <servers>
    <server>
      <id>main</id>
      <username>mvn</username>
      <password>mvn</password>
    </server>
  </servers>
  ...
</settings>

Do biblioteki dorzuconej do repozytorium warto także dołączyć źródła:

mvn deploy:deploy-file -DgroupId=httpunit -DartifactId=httpunit -Dversion=1.7 -Dpackaging=java-source -Dfile=/home/franek/tmp/httpunit-src.jar -Durl=http://myserver/maven-repo -DrepositoryId=main -DgeneratePom=false
Na czerwono oznaczyłem fragmenty, które różnią się w stosunku do komendy służącej do wrzucania jara.

4 comments:

Koziołek said...

Jak realizowane jest wrzucanie? Daa się to skonfigurować na FTPa?

Unknown said...

Wrzucanie na FTPa? Wrzuca się do repozytorium mavena, jak ono jest wewnętrznie skonstruowane to nie wiem, dla mnie to po prostu serwis wystawiony w sieci do którego się odwołuję klientem (mvn).

Unknown said...

tak, da sie wrzucic na ftp'a

C:\inventory\workspace\dev\inventory-int>mvn deploy:deploy-file -DgroupId=pl.firma.inventory -DartifactId=inventory-int -Dversion=4.0.3-SNAPSHOT -Dfile=../inv
entory-ejb/target/inventory-ejb-int-5.01.02.62-SNAPSHOT.jar -Dpackaging=java-sou
rce -DrepositoryId=repo -Durl=http://10.3.1.147:9099/home/inventory2/proxy/targe
t/repo -DgeneratePom=false

tutaj odpalenie z cmd

do tego settings.xml w .m2
<--settings>
<--servers>
<--server>
<--id>repo<--/id>
<--username>inventory2<--/username>
<--password>inventory2<--/password>
<--/server>
<--/servers>
....


i pom.xml w katalogu z ktorego odpalamy mvn z lini cmd

<--?xml version="1.0" encoding="UTF-8"?><--project>
<--modelVersion>4.0.0<--/modelVersion>
<--groupId>pl.firma.inventory<--/groupId>
<--artifactId>inventory-int<--/artifactId>
<--packaging>jar<--/packaging>
<--version>4.0.3-SNAPSHOT<--/version>
<--description>POM was created from deploy:deploy-file<--/description>
<--distributionManagement>
<--repository>
<--id>repo<--/id>
<--url>ftp://inventory2@10.3.1.147/home/inventory2/proxy/target/repo<--/url>
<--/repository>
<--/distributionManagement>
<--build>
<--extensions>
<--extension>
<--groupId>org.apache.maven.wagon<--/groupId>
<--artifactId>wagon-ftp<--/artifactId>
<--version>1.0-alpha-6<--/version>
<--/extension>
<--/extensions>
<--/build>
<--/project>


czyli Id konfiguracji servera ftp jest w pomie i settings xml <--id>repo<--/id>


ps. trzeba sobie wyrzucic --

Koziołek said...

Dzięki. Pewien czas temu doszedłem do podobnego rozwiązania.

Co do samego ftp to jet on najprostszy w obsłudze. Rzecz w tym, że większość narzędzi pozwalających na tworzenie zdalnego repo wymaga serwera z Javą. Jeżeli masz ftp to wystarczy samo konto na np. republice. Nie trzeba nawet mieć na nim php.