Czym dokładnie jest migawka Mavena i dlaczego jej potrzebujemy?

Jestem trochę zdezorientowany co do znaczenia migawki Mavena i dlaczego ją budujemy?

Author: Joachim Sauer, 2011-05-05

7 answers

Wersja migawkowa w Mavenie to wersja, która nie została wydana.

Chodzi o to, że zanim zostanie wykonane 1.0, Istnieje 1.0-SNAPSHOT. Ta wersja jest tym, co może się stać 1.0. To w zasadzie "1.0 w fazie rozwoju". Może to być blisko do rzeczywistego wydania 1.0 lub dość daleko (na przykład zaraz po wydaniu 0.9).

Różnica między" rzeczywistą " wersją A wersją migawkową polega na tym, że migawki mogą otrzymuj aktualizacje. Oznacza to, że pobranie 1.0-SNAPSHOT dzisiaj może dać inny plik niż pobranie go wczoraj lub jutro.

Zazwyczaj zależności migawkowe powinny istnieć tylko podczas programowania i Żadna wydana wersja (tzn. żadna nie-migawka) nie powinna mieć zależności od wersji migawkowej.

 769
Author: Joachim Sauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-18 09:00:11

Trzy pozostałe odpowiedzi dają Ci dobrą wizję tego, czym jest wersja -SNAPSHOT. Chciałem tylko dodać kilka informacji dotyczących zachowania Mavena, gdy znajdzie SNAPSHOT zależność.

Podczas tworzenia aplikacji, Maven będzie szukał zależności w lokalnym repozytorium. Jeśli nie ma tam stabilnej wersji, przeszukuje zdalne repozytoria (zdefiniowane w settings.xml lub pom.xml), Aby odzyskać tę zależność. Następnie skopiuje go do lokalnego repozytorium, aby udostępnij go dla kolejnych wersji.

Na przykład Biblioteka foo-1.0.jar jest traktowana jako wersja stabilna i jeśli Maven znajdzie ją w lokalnym repozytorium, użyje jej do bieżącej kompilacji.

Teraz, jeśli potrzebujesz foo-1.0-SNAPSHOT.jar biblioteki, Maven będzie wiedział, że ta wersja nie jest stabilna i podlega zmianom. Dlatego Maven spróbuje znaleźć nowszą wersję w zdalnych repozytoriach, nawet jeśli wersja tej biblioteki znajduje się w lokalnym repozytorium. Jednakże, czek ten jest wykonywany tylko raz dziennie. Oznacza to, że jeśli masz foo-1.0-20110506.110000-1.jar (tzn. biblioteka została wygenerowana 2011/05/06 o 11:00:00) w lokalnym repozytorium i jeśli uruchomisz kompilację Mavena jeszcze tego samego dnia, Maven nie sprawdzi repozytoria pod kątem nowszej wersji.

Maven zapewnia sposób na zmianę tej polityki aktualizacji w definicji repozytorium:

<repository>
    <id>foo-repository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

Gdzie XXX może być:

  • zawsze : Maven sprawdzi czy nie ma nowszego wersja na każdym build;
  • daily , wartość domyślna;
  • interwał: XXX : interwał w minutach (XXX)
  • never : Maven nigdy nie będzie próbował odzyskać innej wersji. Zrobi to tylko wtedy, gdy nie istnieje lokalnie. Po konfiguracji Wersja SNAPSHOT będzie obsługiwana jako biblioteki stabilne.

(model ustawień.xml można znaleźć tutaj)

 679
Author: romaintaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-06 21:33:42

Termin "migawka" oznacza, że kompilacja jest migawką Twojego kodu w danym momencie.

Zazwyczaj oznacza to, że wersja jest jeszcze w fazie intensywnego rozwoju.

Kiedy nadejdzie czas wydania kodu, będziesz chciał zmienić wersję wymienioną w pom. Więc zamiast mieć "migawkę", miałbyś coś w stylu"1.0".

Aby uzyskać pomoc w wersjonowaniu, zapoznaj się ze specyfikacją semantycznego wersjonowania.

 54
Author: jjnguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-05 16:55:03

"release" jest ostateczną kompilacją wersji, która się nie zmienia.

"snapshot" jest kompilacją, która może być zastąpiona inną kompilacją o tej samej nazwie. Oznacza to, że budowa może się zmienić w dowolnym momencie i jest nadal w aktywnym rozwoju.

Masz różne artefakty dla różnych kompilacji opartych na tym samym kodzie. Na przykład możesz mieć jeden z debugowaniem i jeden bez. Jeden dla Javy 5.0 i jeden dla Javy 6. Generalnie prostsze jest posiadanie jednej konstrukcji, która wszystko, czego potrzebujesz. ;)

 21
Author: Peter Lawrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-05 16:54:01

Wersje Mavena mogą zawierać ciąg znaków "SNAPSHOT" oznaczający, że projekt jest obecnie aktywnie rozwijany.

Na przykład, jeśli twój projekt ma wersję "1.0-SNAPSHOT" i wdrożysz artefakty tego projektu do repozytorium Maven, Maven rozszerzy tę wersję do "1.0-20080207-230803-1" if you were to premiera odbyła się 7 lutego 2008 roku o godzinie 23:08 UTC. Innymi słowy, kiedy wdrożyć migawkę, nie tworzysz wydania komponentu oprogramowania; ty są zwolnienie migawki komponentu w określonym czasie.

Więc głównie wersje migawkowe są używane dla projektów będących w fazie aktywnego rozwoju. Jeśli twój projekt zależy od komponentu oprogramowania, który jest aktywnie rozwijany, możesz polegać na wydaniu migawki, a Maven będzie okresowo próbować aby pobrać najnowszą migawkę z repozytorium podczas uruchamiania kompilacji. Podobnie, jeśli kolejne wydanie Twojego systemu będzie miało wersję "1.8", Twój projekt będzie mieć " 1.8-migawka" Wersja do momentu jej oficjalnego wydania.

Na przykład, następująca zależność zawsze pobierałaby najnowszy 1.8 development JAR of spring:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>1.8-SNAPSHOT”</version>
    </dependency>

Maven

Przykład procesu wydania Mavena

Tutaj wpisz opis obrazka

 9
Author: Joby Wilson Mathews,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-13 14:23:17

Tak wygląda migawka dla repozytorium i w tym przypadku nie jest włączona, co oznacza, że repozytorium, o którym mowa, jest stabilne i nie ma potrzeby aktualizacji.

<project>
    ...
    <repositories>
        <repository>
            <id>lds-main</id>
            <name>LDS Main Repo</name>
            <url>http://code.lds.org/nexus/content/groups/main-repo</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

Inny przypadek byłby dla:

<snapshots>
        <enabled>true</enabled>
</snapshots>

Co oznacza, że Maven będzie szukał aktualizacji dla tego repozytorium. Za pomocą tagu można również określić odstęp między aktualizacjami.

 3
Author: Kati Holasz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 12:08:45

Zazwyczaj w mavenie mamy dwa rodzaje buildów 1)tworzenie migawek 2) Release builds

  1. Snapshot builds:SNAPSHOT to specjalna wersja, która wskazuje aktualną kopię wdrożenia, a nie jak zwykła wersja, maven sprawdza wersję dla każdej kompilacji w zdalnym repozytorium tak więc Kompilacje migawek są niczym innym jak kompilacjami konserwacyjnymi.

  2. Release builds:Release oznacza usunięcie migawki w wersji dla kompilacji, są to zwykłe kompilacji wersje.

 1
Author: Venky Vungarala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-19 07:24:54