2012-05-02 12 views
15

Często potrzebuję rozwidlenia projektu Java, który używa Mavena (zwykle na github).Jaką wersję etykiety użyć do rozwidlonego projektu maven?

Po rozwidleniu projektu i wprowadzeniu zmian, ogólnie chcę zwolnić moje własne prywatne (ale w internecie) repozytorium maven.

Tak więc pytanie o to, jaka powinna być etykieta wersji dla mojego niestandardowego wydania. Nie mogę zrobić SNAPSHOT, ponieważ potrzebuję tego jako wydania. Czasami sufiksuję projekt z .ADAMGENT (bo jestem narcyzem). Powiedzmy, że rozwidlałem 1.0.4-SNAPSHOT. Mogę to zmienić na 1.0.4.ADAMGENT. Nie mam pojęcia, czy to dobry pomysł. W niektórych przypadkach nie mogę tego uzyskać nawet z .ADAMGENT, ponieważ narzędzia do budowania Springa Gradle tego nie lubią. Tak więc dla projektów wiosennych robię .ADAMGENT.RELEASE lub .ADAMGENT.M1, jeśli jest to kamień milowy.

Co robią inni?

Aktualizacja:chociaż ja powiedziałem widelec ment więcej o zmianie poziomu łata. Nagroda (przez innego użytkownika) z drugiej strony może być dla widelca i/lub łatki

+1

1.0-adam-SNAPSHOT – bmargulies

+0

@bmargulies Nie mogę zrobić SNAPSHOT ponieważ potrzebuję wydania dla projektu, który zależy od widelca (korzystam z wtyczki wydania). –

+0

Jeśli zrobisz wydanie powyższego, otrzymasz * 1.0-adam * ... to jest wydanie. – khmarbaise

Odpowiedz

4

Zwykle dodanie przyrostka (na przykład imię i nazwisko), a następnie uruchomiony numer, aby uniknąć wielu mylące komunikaty sprawiają, że na podstawie tej samej wersji upstream. W konfiguracji, to prawdopodobnie przełoży się na coś takiego:

1.0.4-ADAMGENT-1 

które następnie następuje 1.0.4-ADAMGENT-2 w przypadku trzeba dokonać kolejnej zmiany.

Zdecydowanie zachowaj identyfikator artifact i group ID z oryginalnego projektu, a także wersję, na której opierasz swoje zmiany, przyda Ci się to później, jeśli będziesz musiał kiedyś dowiedzieć się, nad którą wersją pracowałeś. Ułatwia to przejście do oficjalnej wersji, jeśli twoje zmiany zostaną uwzględnione w poprzedniej wersji.

+0

Jeśli zdecydujesz się na użycie kwalifikatora wersji, powinieneś się upewnić, że Maven ocenia kwalifikatory. Możesz go zobaczyć na [Porównywalne] (https://git-wip-us.apache.org/repos/asf?p=maven.git; a = blob; f = maven-artefact/src/main/java/org/apache/maven/artefact/versioning/ComparableVersion.java) class. –

2

Jeśli jest to migawka, sugeruję użycie oryginalnego numeru wersji (czy to możliwe z git?) Lub daty rozwidlaj go, z ADAMGENTEM (dodanie własnego sufiksu jest bardzo dobrym pomysłem)

np.

1.0.4-2011-09-12.ADAMGENT 
+0

Data jest dobrym pomysłem, ponieważ od czasu do czasu wypowiadam się na temat wydania i muszę dodać więcej rzeczy, które powodują koszmar czyszczenia pamięci podręcznej maven (muszą się zalogować na maszynie do budowania i czyszczenie ~/.m2). –

+1

To brzmi jak niezręczny sposób na złotą zasadę: nie twórz dwóch wydań, które są w zasadzie takie same. Jeśli chcesz ponownie wydać, po prostu zwiększaj mniejszy numer wersji. Jeśli jest jakiś kosmetyczny powód, aby tego nie robić (w takim przypadku nie sądzę, że ta data bardzo ci pomaga), może po prostu dodaj kolejną kropkę (".1") do numeru wersji. –

17

Ponieważ jesteś widełkiem, użyj innego identyfikatora grupy.

Rzeczywistość jest taka, że ​​po rozpoczęciu wprowadzania zmian w lokalnym widelcu, jest inny artefakt niż. Artefakt tworzony przez Twoją organizację, a nie przez ten, z którego go wziąłeś.

Jeśli chodzi o numer wersji, jeśli twoje zmiany będą zawsze niewielkie, użyłbym głównego i prawdopodobnie pomniejszego numeru drzewa źródłowego, kiedy się rozwidlałem, inaczej zacznę od początku 1.0.0 i zanotuj w projekcie POM, z jakiej wersji go rozwinąłem.

Na przykład:

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.adamgent</groupId> 
    <artifactId>project-xyz</artifactId> <!-- same artifact ID --> 
    <version>1.0.0-RELEASE</version> 
    <name>My Project XYZ</name> <!-- different display name --> 
    <description>My fork of project XYZ created from v5.42.0 of original sources.</description> 
    .... 

To nie jest jakaś trudniej przełączyć identyfikator grupy na uzależnienia niż przełączyć identyfikator wersji. Oba mechanizmy można wykorzystać do łatwego uzyskania pożądanego artefaktu.Jednakże, zmieniając identyfikator grupy, można uzyskać korzyści następująco:

  1. można łatwiej śledzić swoje widły wewnątrz Nexusa
  2. wyeliminować wszelkie nieporozumienia, które mogłyby wyniknąć z konieczności artefaktów z organizacji, które zrobili nie tworzyć
  3. pobyt w standard guidelines dla Mavena identyfikatorów wersji
+1

Problem z tym podejściem polega na tym, że będziesz musiał wykluczyć wszelkie przejściowe zależności w oryginalnym słoiku lub zrobić zasięg = pod warunkiem, że: " pod warunkiem". W związku z tym zmiana identyfikatora grupy jest nieco trudniejsza, ponieważ w przeciwnym razie pojawią się przypadkowe zduplikowane problemy z klasą. –

+0

Aby to ułatwić, możesz dodać swoje wykluczenie do sekcji "dependencyManagement" nadrzędnego POM - w tym samym miejscu musisz dodać swoją nową wersję. Osobiście wolę drobne kłopoty z jawnym zarządzaniem wykluczeniami (hałaśliwe błędy, jeśli zrobione źle), z możliwością pomylenia innych programistów, zwłaszcza nowych. – HDave

+0

Z jakiegoś powodu miałem problemy z wykluczeniami, nawet w rodzicach pom. Staram się to robić często, ale czasami wydaje mi się, że muszę umieścić wykluczenia w prawie każdej zależności, więc po prostu poddaję się i wykonuję "dostarczony" hack. Uważam, że jest to dobrym przykładem. Bez względu na to, ile razy próbuję to wykluczyć, muszę zrobić "pod warunkiem", żeby to zniknęło. Mówiąc to, nie zgadzam się z tobą, że nazwa artefaktu powinna się zmienić. Nie jest to IMHO widelca, ponieważ znajduje się w tej samej przestrzeni nazw (nazwy pakietów/klas pozostają takie same). Rozsądny widelec zmieniłby przestrzeń nazw. –

1

zrobiłem pochodzić z własnego rozwiązania. Nie oznaczę tego poprawnie, ponieważ myślę, że @DavidH ma pewne ważne punkty i jeśli Maven miał poziom konfiguracji, który Ivy ma zastąpić groupid (i/lub wymyśliłem w sonatype jak to zrobić) prawdopodobnie oznaczyłbym to poprawny. W przeciwnym razie mocno wierzę, że widelec powinien być innym obszarem nazw, a nazwy pakietów Java powinny być nieco zgodne z twoimi projektami groupid. Również w mojej sytuacji często muszę to zrobić dla poprawki błędu, więc nie jest to rozwidlenie.

To jest to, co robię i to jest w oparciu o jak Maven odczytuje numery wersji i co Sonatype nieco robi:

Najpierw setup mój własny publiczny, ale nie centralne repozytorium, gdzie będę publikować moją wersję do. Możesz użyć github i/lub googlecode do obsługi takiego repozytorium. W sieci są przewodniki po tym, jak to zrobić i jak je opublikować, więc nie będę w to wchodził.

numery wersji śledzę tego formatu z wyjątkiem wiosny, ponieważ system budowania sprężyny ma dziwne wymagania jak wskazano w moje pytanie:

1.0.4-ADAMGENT-1

trochę więcej zmian i zwolnić:

1.0.4-ADAMGENT-2

Widać, że Maven będzie w większości rozumiał ten format przez looking at the code. Problemem jest kwalifikator ADAMGENT. Maven poprawnie zrozumiał tylko kilka poprawek "alpha", "beta", "milestone", "rc", "snapshot", "", "sp"` and "ga", "final", "cr".

Ci to nie są uporządkowane leksykalny (ADAMGENT w tym przypadku), który jest w porządku, a przypuszczam, że mógł się przyrostową wersję (4), jeśli to jest problem.

+0

Jest to w zasadzie to, co Pascal Thivent zaleca w http://stackoverflow.com/a/2619313/14379. Ma to sens w przypadku poprawek, ale jeśli staną się na tyle duże, że można je uznać za widelec (lub nigdy nie uda się go do projektu wyższego rzędu), prawdopodobnie będzie to nowy identyfikator groupId. (Małe kwalifikatory są prawdopodobnie bardziej popularne niż duże). – seanf

Powiązane problemy