Spring Boot - Maven

Spring Boot jest projektem Springa, który pozwala na szybką budowę aplikacji w oparciu o przygotowaną kolekcję szablonów startowych (starter templates). Zatem jeśli np. chcemy stworzyć aplikację webową działającą na bazie Spring MVC wystarczy, że użyjemy odpowiedniej zależności (Maven dependency) reprezentującej szablon startowy do budowy aplikacji web, a wszystkie wymagane zależności zostaną automatycznie dociągnięte i podpięte pod nasz projekt:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
W przypadku gdybyśmy chcieli sami (bez Spring Boota) skonfigurować taką aplikację, musielibyśmy zadbać o własnoręczne wybranie i podpięcie wszystkich wymaganych zależności zachowując do tego odpowiednie powiązania między wersjami, co jest bardziej czasochłonne i ogólnie bardziej skomplikowane (trzeba wtedy skompletować pasujące do siebie wersje bibliotek).
Należy pamiętać, że aby Spring Boot mógł w ogóle zostać zainicjalizowany to w pierwszej kolejności (jeszcze przed wpisaniem wyżej wymienionej zależności) wymagane jest podanie wersji w jakiej mają działać komponenty Spring Boota (innymi słowy, jaką wersję Spring Boot-a chcemy używać). Wprowadzamy więc do pliku pom.xml następującą konfigurację:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
</parent>
Wersja 2.0.4 jest podana jako przykład. Analogicznie będzie to wyglądało dla Spring Boot w wersji 3. Ostatecznie nasz plik pom.xml będzie się prezentował podobnie jak poniżej:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
                                           http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                                           http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion> <!-- Wersja modelu POM używana przez Maven -->
	<groupId>com.javappa</groupId> <!-- Odwrócona nazwa domeny organizacji -->
	<artifactId>...</artifactId> <!-- Nazwa artefaktu, czyli projektu -->
	<version>1.0.0</version> <!-- Wersja projektu -->
	<name>...</name> <!-- Czytelna nazwa projektu -->
	<description>...</description> <!-- Opis projektu -->

    <parent>
    	<groupId>org.springframework.boot</groupId>  <!-- Grupa dla zależności Spring Boot -->
    	<artifactId>spring-boot-starter-parent</artifactId> <!-- Nazwa artefaktu rodzica -->
    	<version>3.0.0.RELEASE</version> <!-- Wersja Spring Boot -->
    </parent>

    <dependencies> <!-- Lista zależności potrzebnych do projektu -->
    	<dependency>
            <groupId>org.springframework.boot</groupId> <!-- Grupa dla Spring Boot -->
            <artifactId>spring-boot-starter-web</artifactId> <!-- Starter web app -->
    	</dependency>
    </dependencies>

    <build> <!-- Konfiguracje i dodatki związane z procesem budowy aplikacji -->
        <plugins> <!-- Wtyczki Maven używane do budowy aplikacji -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Wtyczki czyli Plugins

W sekcji plugins pliku pom.xml w projekcie Maven definiowane są wtyczki, które są niezbędne do budowania i zarządzania aplikacją. W kontekście Spring Boot, jedną z kluczowych wtyczek jest spring-boot-maven-plugin, która upraszcza proces budowy aplikacji, umożliwiając automatyczne repackaging i tworzenie wykonywalnych artefaktów. Wtyczka ta jest integralną częścią pracy z Spring Boot, zapewniając zgodność z konwencjami frameworka i ułatwiając deployment aplikacji.

Opcje konfiguracyjne wtyczki classifier, mainClass oraz excludes na podstawie przykładu wykluczenia biblioteki LOG4J podczas budowania projektu:
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.0.0</version> <!-- Wersja dla Spring Boot 3 -->
            <configuration>
                <classifier>exec</classifier> <!-- Klasyfikator artefaktu -->
                <mainClass>com.example.MainApp</mainClass> <!-- Klasa główna aplikacji -->
                <excludes>
                    <exclude>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId> <!-- Wykluczenie LOG4J -->
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>
Wykluczenie zależności LOG4J może być przydatne, jeśli chcesz używać własnej implementacji biblioteki do logowania.

Atrybut classifier to dodatkowy identyfikator, który może być używany do rozróżniania różnych wersji lub typów tego samego artefaktu. "Exec" oznacza, że w ramach builda będzie generowany wykonywalny plik JAR.
Rekomendacja
Podsumowując, Maven odgrywa kluczową rolę w upraszczaniu i usprawnianiu procesu zarządzania zależnościami w projektach Spring Boot. W naszej praktyce deweloperskiej, zdecydowana większość projektów powstała z użyciem Mavena jako narzędzia do zarządzania zależnościami, co poniekąd świadczy o jego niezawodności i wydajności.

Chociaż Maven pozostaje dominujący, warto zauważyć rosnącą popularność Gradle, szczególnie w nowych projektach, ze względu na jego elastyczność i mocne wsparcie dla automatyzacji. Rekomendujemy dokładne rozważenie obu narzędzi w kontekście specyficznych wymagań i preferencji Twojego projektu, pamiętając, że wybór odpowiedniego narzędzia do zarządzania zależnościami może znacząco wpłynąć na efektywność i sukces Twojej pracy deweloperskiej.
Praktyka


Wszystkie nasze kursy poświęcone Springowi wykorzystują Spring Boot. Każdy z nich zawiera plik pom.xml, który jest przygotowany tak, aby zawierał tylko niezbędne zależności. Przykładowo:
<dependencies>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>

</dependencies>
Zdjęcie autora
Autor: Jarek Klimas
Data: 03 stycznia 2024
Labele: Backend, Podstawowy, Java
Topowe Materiały
Spring IO: Spring Boot Maven Plugin Documentation
Baeldung: Spring with Maven
Baeldung: Spring Maven Repositories
Baeldung: Multi-Module Project With Spring Boot
Baeldung: Apache Maven Tutorial

Udemy: [NEW] Spring Boot 3, Spring 6 & Hibernate for Beginners  —  polskie napisy

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy: stackshare
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .


Pozycjonowanie stron: Grupa TENSE