Czy zastanawiałeś/łaś się kiedyś jak to było zanim powstał Maven? Albo co tak naprawdę się dzieje kiedy wpisujemy komendę: mvn clena install? W dzisiejszym artykule opowiem o tym jak to było dawniej 🙂
1. Czasy przed Maven-em
Czasy przez Maven-em polegały nie tylko na wpisywaniu szeregu komend aby skompilować czy też spakować projekt. Do kompilacji projektu posługiwano się poleceniem:
- javac src/main/java/pl/devwords/app.java -d target.
I tak kolejno: javac to kompilator Javy który zamienia kod źródłowy na kod bajtowy. Następnie src/main/java/pl/devwords/app.java – jest to ścieżka do pliku źródłowego. -d target natomiast informuje że kod bajtowy zostaje wrzucony do folderu „target”. Zauważmy że w tym poleceniu odwołujemy się tylko do jednej wybranej klasy. Więc aby nieco ten proces usprawnić można posłużyć się komendą:
- javac $(find . -name „*.java”) -d target
Polecenie robi dokładnie to samo z tą różnicą że najpierw wyszukuje wszystkie pliki z rozszerzeniem .java. Następnie kompiluje je do kodu bajtowego i umieszcza w folderze target.
2. Pakowanie bez Maven-a
Aby można było aplikacje uruchomić następuje pakowanie aplikacji do JAR. W tym celu używana jest aplikacja jar.exe. Następnie tak spakowaną aplikacje wysyłamy do maszyny wirtualnej. Ponieważ maszyna wirtualnej nie wie gdzie jest punkt startowy – musimy jej to powiedzieć. Aby to zrobić trzeba utworzyć dokument manifest.txt. W tym pliku wpisujemy: Main-Class: ścieżka do naszej klasy uruchomieniowej np.:
- Main-Class: pl.devwords.sortarray.App
Java parsując plik musi dokładnie wiedzieć gdzie jest koniec tej klasy. Dlatego wpisujemy np.: „empty line” lub „blank line”. Następnie trzeba wywołać komendę:
- jar cfm target/App.jar manifest.txt -C target .
jar cfm + ścieżka gdzie to utworzyć + ścieżka do manifest + dodanie kodu bajtowego do naszego archiwum. czyli -C katalog na którym ma się ustawić I co ma wczytać czyli -C target
Kropka oznacza aby uwzględnić wszystko i wczytać z katalogu target. Gdy paczka jest gotowa uruchomienie archiwum następuje poprzez
- java -jar target/App.jar
3. Dependency
Dawnymi czasy również dodawanie/usuwanie bibliotek ręcznie do projektu było dużo bardziej czasochłonne niż obecnie. Aby to zrobić trzeba było powiedzieć kompilatorowi gdzie biblioteka którą chcemy dołączyć się znajduje.
- -cp src/resources/lib/\*
co znaczy – dodaj do class path wszystkie biblioteki które są w pliku lib. Aby skompilować i zbudować projekt z nowymi bibliotekami należało usunąć plik target. Następnie wykonać polecenie:
- javac $(find . -name „*.java”) -d target -cp src/resources/lib/\*
- jar cfm target/App.jar manifest.txt -C target .
- java -jar target/App.jar
W następnej kolejności wygenerowanie testów i dokumentacji i to wszystko mieści się w poleceniu mvn clean package.
4. Podsumowanie
I jak podoba Ci się przeszłość bez Maven-a? Praca z maven-em czyni pracę łatwiejszą i przyjemniejszą. Nie tylko jesli chodzi o dodawanie kolejnych bibliotek do projektu ale również do jego czyszczenia oraz pakowania a nawet deployowania w dalszysz stepach.