2012-11-14 14 views
8

Szukałem już od jakiegoś czasu i nie mogłem znaleźć żadnego działającego rozwiązania lub przewodnika/samouczka dotyczącego zwalniania modułów Maven przy użyciu zagnieżdżonych podmodułów Git.Uwalnianie wielu artefaktów Mavena przy użyciu zagnieżdżonych podmodeli Git

Mamy złożoną strukturę publicznych i prywatnych projektów, które wymagają konkretnego zamówienia do pomyślnego zbudowania. Naszym celem jest wykonanie wydania Maven w celu zaszyfrowania i wdrożenia wielu artefaktów Maven w jednym kroku.

Oto uproszczone Maven project/moduły i struktura repozytorium Git:

parent-public:1.0.0:pom (descriptor only, no Maven modules, public Git repository) 
    | | 
    | |- public-module:1.0.0-SNAPSHOT:jar 
    |  (Maven module, child of parent-public, Git submodule, public repository) 
    | 
    |- parent-private:1.0.0-SNAPSHOT:pom 
    (Maven modules, Git submodule, private repository) 
     | 
     |- public-module:1.0.0-SNAPSHOT:jar 
     | (Maven module only, child of parent-public, Git submodule, public repository, released) 
     | 
     |- private-module:1.0.0-SNAPSHOT:war 
      (Maven module, child of parent-private, released) 

Obecna struktura pozwala Maven do tworzenia i wdrażania projektów/modułów niezależnie.

Po zwolnieniu public-module (od nadrzędny publicznym/rodziców-prywatnego/publicznego modułu Directory), The maven-release-plugin Skuteczny (GIT repozytorium zostały oznaczone i uwolnienia artefakt jest stosowane).

Po zwolnieniu parent-private The maven-release-plugin przygotowuje i rozpoczyna wykonywanie uwolnienie przed braku podczas docelowej kasie (ten problem został omówiony here, ale rozwiązanie nie działa w moim kontekście, a za mało reputacji komentować).

Oto aktualny maven-release-plugin konfiguracja:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <tagNameFormat>[email protected]{project.version}</tagNameFormat> 
     <commitByProject>true</commitByProject> 
     <pushChanges>true</pushChanges> 
    </configuration> 
</plugin> 

Czy istnieje bardziej elegancki sposób organizowania modułów Maven i repozytoriów Git w celu uwolnienia wielu artefaktów Maven? Alternatywnie, czy ktoś znalazł rozwiązanie do klonowania rekurencyjnie podmodułów Git podczas kasowania tuż przed rozmieszczaniem artefaktów?

+0

To brzmi jak wielo- maven Kompilacja modułu, która w konsekwencji musi znajdować się w jednym repozytorium Git zamiast w submodułach, a ponadto dzięki zastosowaniu wielomodułowej kompilacji możesz po prostu wdrożyć/zwolnić całe moduły w jednym kroku. Tak więc pytanie brzmi: dlaczego chcesz bardziej skomplikować ? – khmarbaise

+0

@khmarbaise: dzięki za komentarz, zdecydowaliśmy się przejść do jednego repozytorium Git z wieloma modułami Maven, ponieważ nie mogliśmy znaleźć prostego rozwiązania dla naszej struktury projektu – almeidap

+1

IMHO tak naprawdę nie ma dobrej opcji. kroki podczas wydania tworzą tag _, z wartością th e semantyczny, który przywracający kod z tego tagu da mi cały kod dla tego wydania. Ale z submodułami GIT, nie ma sposobu, aby upewnić się, że użytkownik dostaje wszystko z tego tagu, ponieważ z łatwością może zobaczyć moduł podrzędny jako pierwszy. –

Odpowiedz

5

Odpowiedź na to pytanie nie zaspokoi początkowego pytania, ale wtyczka Maven Release nie jest wystarczająco inteligentna, aby zrozumieć granice submodule Git. Myślę, że to, czego szukasz, to zdolność wtyczki Maven Release do wyczuwania, że ​​katalog wskazuje na moduł podrzędny, a dla tej wersji wtyczki do automatycznego tagowania ponad granicami? Tak się nie stanie i nie sądzę, że w tym momencie jest to plan kogoś innego.

To, co zawsze polecam użytkownikom Mavena, którzy używają Gita, nigdy nie przekracza granic projektu wielomodułowego, który musi używać wtyczki Release w submodułach. Ograniczaj to do jednego repozytorium.

Ponownie, nie jest to świetna odpowiedź, ale które korzystały z Maven Release Plugin przez wiele lat, prawdą jest również, że nie jest to świetny plugin :-(

Powiązane problemy