2011-07-17 18 views
28

Próbuję wydać wielomodułowy projekt maven, który używa git jako SCM, a wśród pierwszych problemów, z jakimi się zetknąłem, jest sposób, w jaki buduje się dodatek do maven release the release.properties scm.url. Mój rodzic POM wygląda mniej więcej tak:Uwalnianie wielomodułowego projektu maven z Git

<packaging>pom</packaging> 
<groupId>org.project</groupId> 
<artifactId>project-parent</artifactId> 
<version>1.0.0-SNAPSHOT</version> 

<scm> 
    <connection>scm:git:git://github.com/username/project.git</connection> 
    <developerConnection>scm:git:[email protected]:username/project.git</developerConnection> 
    <url>http://github.com/username/project</url> 
</scm> 

<modules> 
    <module>api</module> 
    <module>spi</module> 
</modules> 

A POMs modułu są proste:

<parent> 
    <groupId>org.project</groupId> 
    <artifactId>project-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 
<artifactId>api</artifactId> 
<version>0.2.2</version> 

Moim celem jest, aby być w stanie uwolnić poszczególne moduły, ponieważ każdy z nich ma różne wersje, a ja nie chcesz zwiększyć wszystkie wersje razem za każdym razem, gdy robię wydanie.

Kiedy przejść do katalogu api i zrobić mvn release:clean release:prepare ja spotkał się z następującym wyjścia:

[INFO] Executing: cmd.exe /X /C "git push [email protected]:username/project.git/api master:master" 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Unable to commit files 
Provider message: 
The git-push command failed. 
Command output: 
ERROR: Repository not found. 

Wygląda na wtyczce uwalnianiu Maven tworzy scm.url dołączając nazwę modułu do developerConnection, który kończy się nie być prawidłowym repozytorium na github. Nie jestem pewien, jaki jest właściwy sposób, aby to ustawić. Możliwe, że Maven + git + zwalniając indywidualny moduł podrzędny po prostu nie zadziała? Dowolne wejście jest doceniane.

Odpowiedz

14

Aby zobaczyć, jak do tej pracy, spojrzeć na przykład roboczych, takich jak:

https://github.com/sonatype/sonatype-aether

Jednak to nie pomoże, jeśli chcesz, aby zwolnić poszczególne kawałki. W takim przypadku wystarczy skopiować elementy <scm> do wszystkich poms.

Jest to aktywny temat dyskusji na liście devów, ale nie wstrzymuj oddechu, szukając rozwiązania; to ważna sprawa.

+2

Wygląda na to, że projekt jest zwalniany z POM na najwyższym poziomie, a nie z poszczególnych modułów, jak próbuję to zrobić. Problem pojawia się, gdy próbuję zwolnić z katalogu jednego z modułów. Ważne jest dla mnie, aby móc wydać poszczególne moduły, ponieważ wersje modułów są różne i nie chcę zwiększać wszystkich wersji modułów w tym samym czasie. –

+1

Nigdy nie widziałem, żeby ktoś to robił. – bmargulies

+0

Dzięki za informacje. Czy zdarzają Ci się linki do któregokolwiek z wątków na liście dev, gdzie to zostało omówione? –

10

Znalazłem to pytanie z wyszukiwaniem "nieudane polecenie git-push". Mam podobną konfigurację, w której mam master-pom, a następnie submodules, które wydajemy jako własne pakiety maven.

Aby to zadziałało, musiałem ustawić odcinek scm w pom.xml na coś podobnego. Połączenia musiały być specjalnie dostosowane do pracy. Żaden z tych githubów nie działał w ogóle.

<scm> 
    <url>https://github.com/XXX/YYY</url> 
    <connection>scm:git:ssh://[email protected]/XXX/YYY.git</connection> 
    <developerConnection>scm:git:ssh://[email protected]/XXX/YYY.git</developerConnection> 
</scm> 

W powyższym przykładzie XXX to Twoja nazwa użytkownika github. Nie można użyć formatu :XXX ([email protected]:XXX/...), ponieważ wartość za numerem : jest interpretowana jako numer portu. YYY to oczywiście nazwa twojego repozytorium pod kontem XXX.

Właśnie wydałem wszystkie 3 submoduły jeden po drugim, używając tego wzorca pomyślnie.

+0

Te adresy URL zadziałały u mnie. wielkie dzięki ! – Cristiano

1

Próbowałem zrobić coś podobnego przez długi czas i nigdy nie znalazłem dobrego rozwiązania, więc napisałem własną wersję dodatku dla git. Uwalnia tylko zmienione moduły, nie potrzebujesz żadnej scm config, taguje się na podstawie nazw modułów i zależności między komponentami.

Dokumentacja: http://danielflower.github.io/multi-module-maven-release-plugin/index.html

Wprowadzenie blog: http://danielflower.github.io/2015/03/08/The-Multi-Module-Maven-Release-Plugin-for-Git.html

0

prosty sposób, co pracował dla mnie jest wykorzystanie właściwości macierzystych w modułach pom.xml jak pójść w znaczniku scm jak następujące:

<!--module pom.xml--> 
<scm> 
    <connection>${project.parent.scm.connection}</connection> 
    <developerConnection>${project.parent.scm.developerConnection}</developerConnection> 
</scm> 
Powiązane problemy