2013-07-03 11 views
6

Próbuję wykonać mvn release:perform, ale polecenie zakłada, że ​​plik pom znajduje się w katalogu głównym repozytorium. Czy istnieje właściwość lub preferencja systemu, którą mogę ustawić, aby zastąpić domyślną?Wydanie mvn: wykonanie nie powiedzie się, ponieważ plik pom nie znajduje się w katalogu głównym repozytorium

Wydaje się, że wywołanie mvn release:prepare zakończyło się sukcesem, ponieważ wszystkie artefakty wydania znajdują się w katalogu docelowym, a repozytorium jest poprawnie oznakowane.

Jeśli jest to ważne, jest to projekt git.


EDIT Oto co zrobiłem:

cd /path/to/git/root/path/to/mvn/project 
mvn -DdevelopmentVersion=1.2.0-SNAPSHOT -DreleaseVersion=1.1.0 release:prepare 
...enter correct passphrase and choose all default options... 
mvn release:perform 

A następnie klonowanie zdalnego repo w katalogu target/checkout i po jakimś ubijaniu i popychając do zdalnego git repo następujący błąd dzieje:

[ERROR] 
[ERROR] The project (/path/to/git/root/path/to/mvn/project/target/checkout/pom.xml) has 1 error 
[ERROR]  Non-readable POM /path/to/git/root/path/to/mvn/project/target/checkout/pom.xml: /path/to/git/root/path/to/mvn/project/target/checkout/pom.xml (No such file or directory) 

Więc Maven szuka pliku pom w katalogu głównym target/checkout, który nie jest tam, gdzie się znajduje.

+3

nr Maven zakłada pom znajduje się w bieżącym katalogu roboczym i korzenia projektu. Nie zakłada, że ​​pom znajduje się w katalogu głównym repozytorium. Jeden wspólny układ (w Subversion) to /trunk/ProjectName/pom.xml. wydanie: przygotuj tam prace. Czy możesz rozwinąć problem, który pojawia się w momencie wydania wersji? –

+0

Zobacz moją edycję powyżej. –

+0

Po prostu ciekawy, gdzie * znajduje się * plik pom.xml i czy znajduje się automatycznie dla wszystkich innych zadań, na przykład "mvn install", "mvn compile"? Ogólnie można użyć "mvn -f dir1/dir2/pom.xml", aby użyć alternatywnego pliku pom.xml, chociaż nigdy wcześniej nie wypróbowałem go za pomocą wtyczki wydania. – Keith

Odpowiedz

0

Ponieważ pom-root nie znajduje się w kontroli nad źródłami, wydaje mi się, że wydanie: przygotować i wydać: wykonać nie będą działać dla ciebie. Myślę, że jednym z celów tych poleceń jest zapewnienie, że opublikowany projekt może zostać zbudowany (i przejść testy) w oparciu o to, co jest kontrolą źródła, a nie to, co znajduje się na komputerze jednej osoby. Dlatego próbuje dokonać kasacji i odbudować. Jeśli pom nie jest po prostu kontrolą źródła, to ten cel nie jest możliwy. Może być konieczne ręczne wykonanie kroków, które zostały wydane: przygotowanie i wydanie: wykonaj wykonaj: usuń migawkę, zatwierdz, znacznik, wdrożenie mvn, zwiększ liczbę wersji migawki, zatwierdz.

+2

Myślę, że źle zrozumiałeś mój komentarz powyżej. Pom jest pod kontrolą źródła. To po prostu nie jest w źródle kontroli źródła. –

+0

@Andrew, Git nie ma pojęcia "podkatalogu", jeśli chodzi o zatwierdzenia, więc Twój scenariusz jest niewykonalny w sensie wtyczki Git + maven-release-plugin. Wtyczka musi zatwierdzić/oznaczyć cały projekt (Git) - i nie może tego zrobić. Ogólny projekt KISS ma mieć 1: 1 Git-project: build-artifact. To powiedziawszy, podmoduły Mavena będą działały, ale musisz uruchomić plugin maven-release na rodzica i wszystkie jego podmoduły. – Andre

7

Miałem ten sam problem. Dodaj to do swojej pom:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.2.1</version> 
    <executions> 
    <execution> 
     <id>default</id> 
     <goals> 
      <goal>perform</goal> 
     </goals> 
     <configuration> 
      <pomFileName>subdir/pom.xml</pomFileName> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Źródło: https://stackoverflow.com/a/8233712/555220

+0

Dzięki. Wygląda obiecująco. Jak już powiedziałem, nie używam już wtyczki wydania. Zamiast tego użyj celu wdrożenia. Wypróbuję to i zobaczę, czy to działa. –

Powiązane problemy