2012-04-05 15 views
5

mam artefakt, który powinien być zbudowany na kilku platformach docelowych:Synchronizacja wersje artefaktów na różnych platformach z procesu uwalniania Maven

  • Linux x86 x86
  • Okna
  • ARM11

Niestety z powodu do braku crosscompilers, nie jest możliwe stworzenie wszystkich wersji artefaktu za jednym razem.

Korzystanie Innymi słowy, celem jest, aby w repozytorium coś takiego

  • artifact-1.0.0-linux.zip
  • artifact-1.0.0-windows.zip
  • artefaktu -1.0.0-arm11.zip
  • artifact-1.0.1-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.1-arm11.zip
  • ...

Należy pamiętać, że wersje są zsynchronizowane. Jak to osiągnąć?

Chodzi o to, że proces wydania aktualizuje wersję pom.xml po każdym kompilacji. Więc budując kolejno na różnych platformach mogę osiągnąć mając

  • artifact-1.0.0-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.2-arm11.zip
  • artifact-1.0.3-linux.zip
  • artifact-1.0.4-windows.zip
  • artifact-1.0.5-arm11.zip
  • ...

ale to nie jest to, czego szukam.

mogę

  1. uruchomić na Linuksie

    wydaniu mvn: przygotować wydanie: wykonać -DpushChanges = false

    (z pushChanges ustawiona na false wydaniu nie wzrośnie numer wersji w SCM)

  2. , a następnie uruchom na Windows

    uwolnienie mvn: przygotować zwolnić: wykonać

    (zwiększy to numer wersji)

Ale wtedy odpowiedzialność wywołać procesy zwalniające na różnych platformach w odpowiedniej kolejności spoczywa na mnie. Czy istnieje sposób, w jaki maven może mi w tym pomóc?

Czy masz jakieś sugestie?

Dzięki


PS. Zauważ, że nie chodzi o to, jak organizować się w moduły. Chodzi o to, jak zsynchronizować procesy wydawania pojedynczego artefaktu na wielu platformach.

Odpowiedz

0

Jak widzę, używa się klasyfikatorów (przyrostek nazwy pliku artefaktów), takich jak linux, windows lub arm11 w celu odróżnienia różnych wydań artefaktów przeznaczonych dla określonych platform. Jeśli więc utworzymy wielomodułowy projekt zarządzany przez Mavena, gdzie moduły będą artefaktami o tym samym groupId, tym samym artifactId, tym samym version (prawdopodobnie odziedziczonym po wspólnym rodzicu), ale innym classifier, otrzymasz dokładnie to, co chcesz. W takim przypadku zawsze zwalniasz swój wielomodułowy POM (zwykle jest on wspólny dla swoich modułów), aby wszystkie moduły były wydawane jednocześnie. Zakładając, że samo-version-for-all-modules-polityki (co wydaje się całkiem dobrze pasuje tutaj), można po prostu wykonać:

mvn release:prepare release:perform -DautoVersionSubmodules

i to wszystko. Dostaniesz artefakty o artifact-1.0.0-linux.zip, artifact-1.0.0-windows.zip, artifact-1.0.0-arm11.zip. Następna wersja rozwojowa zostanie ustawiona na 1.0.1-SNAPSHOT dla wszystkich modułów (przez dziedziczenie z nadrzędnego).

+0

Ale moim celem jest to, że gdy jesteś na Linuksie, nie możesz utworzyć pliku binarnego dla okien (ze względu na pewne ograniczenia dla toolchain). Tak więc proces kompilacji uruchamiany w systemie Linux nie może tworzyć plików binarnych systemu Windows. I wzajemnie. Dzięki temu nie można utworzyć wszystkich plików binarnych dla wszystkich platform za jednym razem. --- To nie jest pytanie o organizowanie się w moduły. Chodzi o to, jak zsynchronizować procesy wydań pojedynczego artefaktu na wielu platformach. –

+0

OK, więc obawiam się, że Maven nie może pomóc ci zrobić tego automatycznie, jak chcesz, chyba że chcesz (i masz trochę czasu) na stworzenie własnej wtyczki wydania. Jak już wspomniałeś, możesz zrobić całe zdjęcie bez uderzania w wersję, a potem na koniec globalnie, ale to jest coś, o czym musisz pamiętać. Możesz także odrzucić typową wersję (odziedziczoną po rodzicu) i wpisać wersje dosłowne we wszystkich POM modułów. Tym razem jednak musisz kontrolować ten proces i upewnić się, że wszystkie moduły są wydawane wraz z wersją, a każdy moduł jest wydany jeden raz. Naprawdę nie widzę w 100% automatycznego sposobu. –

+0

Zawsze mam mało czasu :) W każdym razie, dzięki za pomoc. –

2

Znalazłeś już rozwiązanie? Dobrze jest wiedzieć, że nie jestem jedynym, walcząc z Maven :-)

Zresztą

Czy wolno wdrożyć wydana wersja Nexus? Myślę, że można to zrobić:

1 - Zrób "wydanie mvn: przygotuj wydanie: wykonaj" z maszyny Windows - to powinno dostać artefakt-1.0.1-windows.zip do nexusa.

2 - Sprawdź artefakt-1.0.1 znacznik ze sterownika źródłowego

3 - Wykonaj "wdrożenie mvn" z Linuksa i Arm11 (cokolwiek to jest: P) - powinno to również spowodować, że -linux.zip i -arm11.zip również.

Choć uważam, że w zależności od tego, jak jest skonfigurowany nexus to nie pozwoli Ci przesunięcie nic z tego samego WDB (nawet jeśli klasyfikator jest inna)

0

Pomogłeś mi się z pytaniem ... ja nie wiedział o opcji pushChanges = false.

Za pomocą Jenkins można skonfigurować zadanie na każdej platformie, która wykonuje seryjne wydanie serii za pomocą funkcji "Zdalne tworzenie kompilacji (np. Ze skryptów)". Jeśli chcesz, możesz użyć Sparametryzowanej Kompilacji, aby wybrać wersję do kompilacji (jeśli jej używasz, musisz Parameterized Trigger Plugin, aby uruchomić kompilację na innych platformach).

Powiązane problemy