Maven Release Plugin czyli jak szybko zbudować wersje aplikacji

Maven Release Plugin czyli jak szybko zbudować wersje aplikacji

Maven Release Plugin to wtyczka która pozwala zautomatyzować proces wydania nowej wersji oprogramowania który sprowadza się do:

załóżmy, że aktualna wersja aplikacji to:

<version>1.0.1-SNAPSHOT</version>

wersja SNAPSHOT jest wersją niestabilną która nie może być produkcyjnie wdrożona. Przeznaczona jest ona do testów. W momencie jednak kiedy wersja SNAPSHOT staje się wersją stabilną to aby wydać nową wersję oprogramowania należy zmienić plik pom.xml modyfikując wersję releasu aplikacji np.:

<version>1.0.1</version>

następnie należy zapisać zmianę w systemie kontroli wersji, otagować odpowiednio dany release oraz ponownie zmienić plik pom.xml:

<version>1.0.2-SNAPSHOT</version>

i zapisać wszystkie zmiany w systemie kontroli wersji. Kroki te realizowane są za pomocą polecenia:

mvn release:prepare -DdryRun=true

które to na „brudno” (czyli bez zmian w SCM) wykonuje release. Kiedy stwierdzimy już, że wszystko jest poprawnie zrealizowane możemy przystąpić do budowy wersji:

mvn release:clean release:prepare

na tym etapie NIE następuje jeszcze wdrożenie aplikacji na lokalne – .m2/zdalne np. Nexus czy Apache Archiva repozytorium. Wdrożenie następuje dopiero wtedy kiedy wykonamy polecenie powiązane z fazą deploy mavena:

mvn release:perform

Zobaczmy jak to działa w praktyce – przygotujmy sobie lokalne repozytorium gita np.:

scratchbook.git oraz wydajmy polecenie:

git init --bare

Utwórzmy teraz dowolny nowy projekt Apache Maven:

Plik pom.xml – bardzo ważne jest aby wersja maven-release-plugin była nie niższa niż 2.5.3. Niższe wersje zachowują się absurdalnie.

<?xml version="1.0" encoding="UTF-8"?>
<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>
 
    <groupId>pl.javaleader</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>1.1-SNAPSHOT</version>
 
    <build>
        <plugins>
                <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <tagNameFormat>v@{project.version}</tagNameFormat>
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
    <scm>
        <url>scm:git:file://C:/Users/mwarycha/Desktop/scratchbook.git</url>
        <connection>scm:git:file://C:/Users/mwarycha/Desktop/scratchbook.git</connection>
        <developerConnection>scm:git:file://C:/Users/mwarycha/Desktop/scratchbook.git</developerConnection>
    <tag>v1.0</tag>
  </scm>
 
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>
 
    <repositories>
        <repository>
            <id>Central Maven repository</id>
            <name>Central Maven repository https</name>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>
 
</project>

utwórzmy lokalne repozytorium oraz zapiszmy projekt na gicie:

git init
git remote add origin ../scratchbook.git/
git add .
git commit -m "init project"
git push origin master

wydajmy polecenie przygotowania wersji:

mvn release:clean release:prepare

zostaniemy zapytani o wersję releas’u, nazwę taga dla commita releasowe’go oraz o wersje rozwojową – możemy tutaj zgodzić się na domyślne wartości:

What is the release version for "maven-release-plugin"? (pl.javaleader:maven-release-plugin) 1.0: :
What is SCM release tag or label for "maven-release-plugin"? (pl.javaleader:maven-release-plugin) v1.0: :
What is the new development version for "maven-release-plugin"? (pl.javaleader:maven-release-plugin) 1.1-SNAPSHOT: :

w wyniku wykonania powyższych poleceń zostanie utworzona na repozytorium wersja z tagiem:

v1.0

wersja z pliku pom.xml przedstawia się teraz następująco (plugin zmienił wersję aplikacji na kolejną wersję rozwojową):

<version>1.1-SNAPSHOT</version>

zmodyfikujemy projekt np. o dodanie nowej klasy:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

zapiszmy na gicie:

git add .
git commit -am "add HelloWorld class"
git push origin master

i zbudujmy ponownie wersje:

mvn release:clean release:prepare

ponownie zostaniemy zapytani o:

What is the release version for "maven-release-plugin"? (pl.javaleader:maven-release-plugin) 1.1: :
What is SCM release tag or label for "maven-release-plugin"? (pl.javaleader:maven-release-plugin) v1.1: :
What is the new development version for "maven-release-plugin"? (pl.javaleader:maven-release-plugin) 1.2-SNAPSHOT: :

w wyniku wykonania powyższych poleceń zostanie utworzona na repozytorium wersja z następującym tagiem:

v1.1

wersja z pliku pom.xml przedstawia się teraz następująco (plugin zmienił wersję aplikacji na kolejną wersję rozwojową):

<version>1.2-SNAPSHOT</version>

przykładowy wynik budowania wersji na repozytorium gita to:

 

Leave a comment

Your email address will not be published.


*