16 maja 2009

Spring Framework 3.0.0.M3 i Maven

Ostatnio zdarza mi się częściej używać Mavena, co jest generalnie ciekawym doświadczeniem, aczkolwiek czasami frustrującym. To ostatnie dopadło mnie przy próbie integracji ze Spring Framework. Na stronie projektu pokazany jest przykład integracji Springa z Mavenem. Repozytoria, z których można pobrać Springa są następujące:


springsource-milestone
http://repository.springsource.com/maven/bundles/milestone


springsource-release
http://repository.springsource.com/maven/bundles/release


springsource-external
http://repository.springsource.com/maven/bundles/snapshot


Przeglądać repozytoria można pod tym adresem. Teraz przyszedł czas, żeby zdefiniować zależności wskazujące na biblioteki jakich chcemy użyć w naszym projekcie. Tutaj mała wzmianka. Nazewnictwo artefaktów uległo zmianie w stosunku do poprzednich wydań Springa, więc migracja ze starszych wersji dla projektów używających Mavena może okazać się kłopotliwa.


org.springframework
org.springframework.core
3.0.0.M3


Wydawać by się mogło, iż to już wystarczy. Niestety nie. Przy próbie ściągnięcia bibliotek okazuje się, że w repozytorium Springa nie ma wszystkich bibliotek, z których korzysta Spring. Prawdę mówiąc na tym etapie utknąłem. Na szczęście, ktoś wcześniej miał podobny problem i zasugerował dodanie repozytorium Atlassiana.


atlassian-m2-repository
https://m2proxy.atlassian.com/repository/public


Powyższe przygody sprawiają, że ciśnienie Ci wzrasta. Problem z zależnościami jest częstym przeżyciem dla użytkowników Mavena. Nie wiem do końca z czego to wynika? Czy problem leży po stronie twórców Mavena? Czy może ludzie, którzy umieszczają swoje biblioteki w publicznych repozytoriach nie zawsze dbają w należyty sposób o to, aby pobranie bibliotek odbywało się bezproblemowo?

4 komentarze:

koziołek pisze...

Już wyjaśniam w czym leży problem. Kiedyś "nasz człowiek w mavenie", czyli Piotrek Tabor opowiadał nam o tym narzędziu na JUGu. Potem w ramach o spotkaniowej dyskusji wyszła sprawa zależności. Okazuje się, że w repozytorium Mavena mogą być przechowywane tylko biblioteki o konkretnych licencjach zgodnych z Apache Licence i GPL. Spring nie jest rozpowszechniany na licencji springowej która ogranicza dostęp do źródeł. Tym samym nie można umieścić artefaktów springa w repo mavena.
Atlantiss znowu rozpowszechnia swoje produkty na różnego typu pół komercyjnych licencjach z zamkniętym kodem źródłowym.
Faktem jest, że w mavenie brakuje takiego małego kawałka kodu, który by pozwalał na dodanie do pom.xml informacji o dodatkowych repozytoriach do przeszukania. Względnie jeszcze go nie odkryłem :D

syllepsa pisze...

"Okazuje się, że w repozytorium Mavena mogą być przechowywane tylko biblioteki o konkretnych licencjach zgodnych z Apache Licence i GPL."Wydaje mi się, że jest trochę inaczej, ale mogę się mylić. Jeśli dobrze Cię zrozumiałem, to chodzi Ci o "fizyczne" repozytoria Mavena, ale w tym przypadku mamy repozytoria Springa, który chyba może hostować u siebie zewnetrzne projekty (z innymi licencjami aniżeli licencja Springa)? O ile licencje tych projektów na to pozwalają. Jeśli tak jest, to dziwię się, że biblioteki te są dostepne na prywatnym serwerze Atlassiana a nie są umieszczane na serwerze Spring Source, czy jak to się teraz zwie. Innym przypadkiem są biblioteki Sunowskie, których licencja nie pozwalała na umieszczanie ich w zewnętrznych repozytoriach. Jeśli się mylę, to chetnie się dowiem jak to naprawdę jest.

koziołek pisze...

Chodzi o fizyczne repozytorium. Nie tylko to z repo1.maven.org, ale w praktyce każde. Atlantiss może mieć w licencji zapis, że niemożna dystrybuować ich produktów jako stand-alone. Innymi słowy tylko oni mają możliwość wystawiania swoich paczek w repozytorium. Spring jest zależny od ich narzędzia, ale ze względów licencyjnych nie może nie umieścić tej zależności u siebie w repo.
Generalnie problem polega na tym, że maven opiera się na założeniu, że cały kod jest otwarty. Niestety w praktyce popadamy w zawiłości prawa autorskiego i tym samym niweczymy pomysł.

syllepsa pisze...

Jeśli owa brakujaca biblioteka została stworzona przez Atlassiana (teraz nie pamietam co to dokładnie było), to w rzeczy samej, masz rację.