Ostatnio w pracy miałem się zająć rozwinięciem pluginu do Atlassian JIRA, który ma wspomagać pracę zespołu deweloperów w metodologii Scrum (agile). Zadanie – od strony technicznej – było bardzo ciekawe, ponieważ dowiedziałem się, w jaki sposób robi się pluginy do JIRY oraz przy okazji mogłem poznać wycinek architektury dużego systemu, jakim jest JIRA. Miałem również możliwość poznania Mockito, ponieważ nie dało się napisać testów jednostkowych JUnit operujących bezpośrednio na całej Jirze. Nie miało to nawet sensu.
Niestety, najwięcej czasu wcale nie zabrała kreatywna praca, lecz zmagania z Mavenem i Atlassianem. Problem polegał na tym, że instrukcje na stronie Atlassianu dotyczące przygotowania pustego projektu pluginu w Jirze są nieaktualne. Problemem na samym początku było pobranie wszystkich zależności.
Najpierw wystąpił problem z samym projektem – artefakt jira-plugin-base w wersji 13 nie występował w repozytoriach Atlassianu. Pomimo tego, że plik ~/.m2/settings.xml utworzyłem według wytycznych Atlassianu, proces pobierania zależności wysypywał się. Przy zatrzymaniu się procesu pobierania zależności każdorazowo musiałem szukać nieznaleziony plik z pomocą Gogla i dopisywać nowe repozytorium w settings.xml. Czynność wbrew pozorom frustująca, ponieważ po drodze wynikały inne problemy – dla pewnych plików jedno repozytorium wysyłało permanentne przekierowanie pod inny adres, który okazywał się być 404 Not found. Maven z kolei już tego nie rozumiał i stronę 404 uznawał jako plik XML z danymi nt. paczki. Powstawały dziwne błędy trudne do zlokalizowania, na które tylko pomagał rm -rf na katalogu z błędnymi danymi.
Kolejnym bublem było serwowanie przez jeden z serwerów Atlassianu uszkodzonych paczek z danymi. Takie popsute dane również musiałem ręcznie usuwać i rozpoczynać proces pobierania zależności od nowa – w nadziei, że tym razem wszystko pójdzie gładko. Rozwiązaniem okazało się usunięcie z listy repozytoriów tego feralnego repozytorium Atlassianu, które serwowało uszkodzone paczki. Oczywiście na samym początku procesu pobieranie ten serwer musiał widnieć na liście repozytoriów, bo inaczej nie pobralibyśmy pewnych danych, które tylko na tym serwerze można znaleźć.
W „zaledwie” kilka godzin poradziłem sobie z tymi wszystkimi zależnościami i ściąganiem połowy Internetu na dysk. Odpaliła się wersja demonstracyjna JIRY, na której można było rozwijać plugin. Byłem wniebowzięty. Moje szczęście nie trwało jednak długo – przyszedł czas na zbudowanie paczki JAR z pluginem. Atlassian na swojej stronie mówi „wpisz mvn jar, aby zbudować plik JAR”. Maven na to mówi, że zadanie o nazwie jar nie istnieje. Sławek, kolega z pracy, proponuje spróbować mvn package. Zadziałało…
Rady dla przyszłych plugin developerów dla Atlassian JIRA:
- skorzystaj z mojego pliku settings.xml i przeczytaj komentarze wewnątrz niego
- nie bój użyć się Gogla w celu znalezienia innych repozytoriów
- nie bój się usuwać katalogów z uszkodzonymi plikami w lokalnym repo Mavena
- nie bój się zadać pytania w komentarzach, może uda mi się odpowiedzieć ;)


Jest już 5 komentarzy ↓
Sebastian // lip 16, 2009 at 08:35
Cześć,
właśnie przechodzę tą samą drogę co Ty i twój settings.xml zaoszczędziłby mi dużo czasu. Mógłbyś go gdzieś wrzucić?
Nadir // lip 17, 2009 at 08:38
Hej, wczoraj prawie wyrwałem sobie resztkę włosów klnąc na mavena… Z twoim settings.xml poszło gładko. Wielkie dzięki.
Nadir // lip 17, 2009 at 09:42
Jak to się mówi, nie chwal dnia przed zachodem słońca.. O ile archetype zadziałało, to już mvn eclipse:eclipse po 47 minutach zaciągania bóg wie czego wywaliło mi coś takiego
[INFO] Resource directory’s path matches an existing source directory. Resources will be merged with the source directory src/main/resources [INFO] ———————————————————————— [ERROR] BUILD ERROR [INFO] ———————————————————————— [INFO] Request to merge when ‘filtering’ is not identical. Original=resource src /main/resources: output=target/classes, include=[atlassian-plugin.xml], exclude= [**/.java], test=false, filtering=true, merging with=resource src/main/resource s: output=target/classes, include=[], exclude=[atlassian-plugin.xml|*/*.java], test=false, filtering=false [INFO] ————————————————————————
Sugestie mile widziane…
Nadir // lip 17, 2009 at 09:50
A przepraszam za spam, ale rozwiązanie znalazłem, trzeba mocno się wczytywać w te wszystkie podstronki o budowaniu pluginów…
mvn org.apache.maven.plugins:maven-eclipse-plugin:2.6:eclipse
zamiast mvn eclipse:eclipse rozwiązało problem.. przynajmniej mam taką nadzieje ;)
Nowaker // lip 18, 2009 at 10:35
Dobrze, że się rozwiązało :) U mnie bynajmniej na IntelliJ IDEA mvn idea:idea zadziałało.
Zostaw swój komentarz