sobota, 4 stycznia 2014

maven - geneza

Maven.

Kiedy poznałem ant'a byłem w szoku. Pozwalał mi na dużo. Operacje jak : compile, build, deploy, test robiłem w jednej chwili.
Wystarczyło zdefiniować target (cel) oraz task (zadanie) i tyle.

Target określa co chcemy osiągnąć w ramach naszego procesu kompilacji.

Task umożliwia wykonanie jakiegoś wycinka pracy, która ma być wykonana w ramach kompilacji. To on jest potencjałem oraz decyduje o elastyczności tego narzędzia.

Od tej pory kiedy coś robiłem używałem właśnie anta.
To było coś wspaniałego. Wcześniej znałem tylko narzędzie make.
Poznając anta zrozumiałem jego moc. Poznałem sporo bibliotek zadaniowych co ułatwiało pewne procesy związane z wytwarzaniem softu.
np wsparcie dla hibernate, junit, lub generowanie klas z xsd. To już było coś.

A teraz historia...

Skończyłem studia i zmieniłem pracę.
W nowej pracy dostałem następujące zadanie:

Istniało podejrzenie, że procedury wbudowane do bazy Oracle nie działają prawidło pod dużym obciążeniem.

Moim zadaniem było stworzenie swojego rodzaju narzędzia do testowania takich przypadków.
Warunkiem drugim było zrobienie tego w taki sposób, aby to było elastyczne, uniwersalne i konfigurowalne rozwiązanie.

Zabrałem się do pracy. Miałem 'obcykanego' anta więc jego użyłem.
Nie istniała jeszcze java concurrent , a przynajmniej jeszcze wtedy nie była wbudowane w javę. Może jako osobna biblioteka już istniała.
W każdym razie wykorzystując wątki udało mi się zrobić coś na kształt zadanego zadania.
Generalnie byłem z siebie zadowolony. Zajęło mi to 2 tygodnie. Znałem już wtedy pełen katalog  GoF wzorców projektowych więc śmiało ich używałem.
Z poziomu anta można było zdefiniować task, jakieś properties i testy ruszyły. Testy wykazały, że moje rozwiązanie jakoś działa chodź to nie był jakiś  czysty kod do końca :)

Pokazałem je chłopakom. Powiedzieli ok, ale .....

'Ale' to magiczne słowo. Warto się zatrzymać przy nim. W innym kontekście. Jak kogoś proszę, żeby coś zrobił a ten ktoś odpowiada zrobiłbym , ale ..... i tutaj podaję jakiś durny powód to wiem, że ten człowiek już się do tego nie nadaje.
Albo to spierdoli.Pewnie nie wie jak to zrobić albo po prostu prozaicznie mu się nie chce tego robić.
Uważajcie na słowo 'ale'. Ja jak go słyszę od razu dostrzegam problem.

W każdym razie wracając do tematu. Powiedzieli, że faktycznie działa 'ale' nie o to im chodziło. Za mało elastycznie, nieprzenośne. Spytałem jak to ?

Odpowiedź brzmiała: trzeba było najpierw poszukać istniejących rozwiązań :
DBUnit, SqlUnit, Grinder rzucili nazwami.
Poza tym powinien był użyć mavena zamiast anta wtedy projekt byłby bardziej przenośny i łatwiej byłoby go przejąć czy rozwijać innym programistom.

Hmm... nie znałem wcześniej tych frameworków. Ale chwile poczytałem i faktycznie przez następne 3 czy 4 dni zrobiłem to samo co robił mój poprzedni kod.
Tylko, że napisałem raptem kilkadziesiąt linii kodu zamiast kilku tysięcy.
Rozwiązanie było bardziej elastyczne i bardziej konfigurowalne.
Poza tym poznałem cztery nowe rzeczy : DBUnit, SqlUnit, Grinder, Maven.
Maven którego używam już 9 lat i uważam że jest nieprzecenionym narzędziem.

Ok w części drugiej pokaże co może Maven i dlaczego warto go używać.
Może to już trochę nieaktualne bo jest już następny gracz jak Gradle, którego już od jakiegoś czasu używają znaczące frameworki jak Hibernate czy Spring.
Tak czy inaczej uważam, że poznać mavena lepiej zawsze warto.
Potem też postaram się pokazać jakim potężnym narzędziem jest Gradle i porównamy sobie oba rozwiązania.

dalej ->
 

Brak komentarzy:

Prześlij komentarz