2011-09-07 14 views
18

Próbuję wydać projekt za pomocą maven, ale zamiast wypuszczać do repozytorium prasowe, umieszcza je w repozytorium Snapshots.Maven wdraża migawkę zamiast wydania

Moja pom wygląda następująco:

<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>com.example.my.profiler</groupId> 
<artifactId>profilerlib</artifactId> 
<name>Profiler Lib</name> 
<version>1.0.2-SNAPSHOT</version> 
<description>Profiler Library</description> 
<scm> 
    <connection>scm:svn:https://svn.example.com/my-project/profilerlib/trunk 
    </connection> 
    <developerConnection>scm:svn:https://svn.example.com/my-project/profilerlib/trunk 
    </developerConnection> 
</scm> 
<distributionManagement> 
    <!-- Publish the versioned releases here --> 
    <repository> 
     <id>nexus</id> 
     <name>nexus</name> 
     <url>http://repo.example.com:8081/nexus/content/repositories/releases 
     </url> 
    </repository> 
    <!-- Publish the versioned releases here --> 
    <snapshotRepository> 
     <id>nexus</id> 
     <name>nexus</name> 
     <url>http://repo.example.com:8081/nexus/content/repositories/snapshots 
     </url> 
    </snapshotRepository> 
</distributionManagement> 
<!-- download artifacts from this repo --> 
<repositories> 
    <repository> 
     <id>nexus</id> 
     <name>EXAMPLE Public Repository</name> 
     <url>http://repo.example.com:8081/nexus/content/groups/public</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>true</enabled> 
     </snapshots> 
    </repository> 
</repositories> 
<dependencies> 
    ... 
</dependencies> 
<build> 
    <finalName>${project.artifactId}</finalName> 
    <plugins> 
     <plugin> 
      <artifactId>maven-release-plugin</artifactId> 
      <configuration> 
       <tagBase>https://svn.example.com/my-project/profilerlib/tags 
       </tagBase> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <powermock.version>1.4.6</powermock.version> 
</properties> 
</project> 
+0

Czy znalazłeś rozwiązanie dla tego problemu? – mihn

+0

Dawno temu, ale IIRC musiałem zdefiniować oddzielne repozytorium i wartości identyfikatora snapShotRepository w moim pom.xml. –

Odpowiedz

11
<repository> 
    <id>nexus</id><!--etc--> 
</repository> 
<snapshotRepository> 
    <id>nexus</id><!--etc--> 
</snapshotRepository> 
<!-- etc --> 
<repositories> 
    <repository> 
     <id>nexus</id> 
     <!-- etc --> 
    </repository> 
</repositories> 

To jest problem, używasz tego samego identyfikatora dla trzech różnych repozytoriów. Maven zarządza tymi repozytoriami za pomocą ID, więc każdy identyfikator musi być unikalny! Na przykład. użyj "nexus-releases", "nexus-snapshots" i "nexus".

+0

Dzięki za napiwek, próbowałem, ale nadal widzę ten sam problem. Maven output help? –

+3

dlaczego jest to zaakceptowana odpowiedź, jeśli nie rozwiązało problemu? – Ken

+0

@Ken obie odpowiedzi są prawidłowe, pokazują tylko dwa różne aspekty tego problemu. może obydwaj razem rozwiązali problem? –

12

POM pokazuje numer wersji jako wersję SNAPSHOT. Więc jeśli uruchomiłeś mvn deploy z POM w tym stanie, to oczywiście wdroży on migawkę do repozytorium migawek.

Aby zrobić wydanie, musisz użyć celów z release plugin.


Z drugiej strony, być może już o tym wiedzą, a prawdziwa odpowiedź jest odpowiedzią Sean Patrick Floyd.

+0

Haha, przeoczyłem oczywistość (+1) !! –

+0

Używam: mvn release: przygotować wydanie: wykonać NOT mvn deploy. Z tego co rozumiem, wtyczka wydania powinna usunąć sufiks -SNAPSHOT przed wdrożeniem, czyż nie? –

+1

@ user932509 należy uruchomić przygotowanie i wykonać w dwóch oddzielnych etapach, ponieważ wątpię, aby przygotować zmiany wersji działającego artefaktu wykonania (byłoby to złe) –

19

W przypadku ktokolwiek inny ma ten problem i znaleźć istniejące odpowiedzi nie rozwiązują swoje problemy:

Odnotowano garść błędów, co oznacza, że ​​release:prepare nie zobowiązuje do repozytorium git przed utworzeniem tagu release . Oznacza to, że numer wersji w plikach POM, który znajdzie release:perform, zawiera -SNAPSHOT, a wdrażający spróbuje udostępnić repozytorium migawek.

Oto najnowsza defekt odpowiedzialny za to zachowanie: MRELEASE-875 (dotyczy 2,5, ustalone w 2.5.1)

+0

To był dokładnie mój problem, dzięki! Z jakiegoś powodu Maven zbierał uszkodzoną wersję 2.5; wymuszenie wyboru 2.5.1 (http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-release-plugin/2.5.1) przez określenie wersji w POM usuniętej. –

+0

Wystarczy to potwierdzić! wielkie dzięki. Znalazłem [stronę pomocy] (https://maven.apache.org/guides/mini/guide-releasing.html), która pokazuje '2.5' wersję' maven-release-plugin'. Właśnie wysłałem wiadomość e-mail na [ML] (http://mail-archives.apache.org/mod_mbox/maven-users/201507.mbox/thread), aby poprosić ich o aktualizację tej strony. – boly38

2

Fell Faul ten problem z innej przyczyny ... upewnij się, że wtyczka jest uwalnianie sprawdzanie tagu, a nie oddziału o tej samej nazwie!

Właśnie spadłem z tego powodu ... Stworzyłem oddział o nazwie "1.9.0", w którym zrobię moje wydanie, a następnie uruchomiłem wydanie mvn: przygotować, które utworzyło również znacznik "1.9.0". Kiedy mvn release: perform run wykonał check git z "1.9.0, a zakończył się odbierając HEAD oddziału 1.9.0, który, oczywiście, miał SNAPSHOT w nim (1.10-SNAPSHOT).

To dwie godziny mojego życia, nie wrócę ... W przyszłości będę dodawał przyrostek "-release" do nazwy oddziału (np. "1.9.0-release")

Powiązane problemy