2011-09-07 14 views
18

Sto provando a rilasciare un progetto utilizzando Maven ma invece di rilasciarlo nel repository Releases lo inserisce nel nostro repository delle istantanee.Maven si installa sullo snapshot anziché sul rilascio

mio pom assomiglia:

<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

Hai trovato un soluzione per questo problema? – mihn

+0

Molto tempo fa, ma IIRC dovevo definire valori separati di repository e snapShotRepository ID nel mio pom.xml. –

risposta

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

Questo è il problema, che si sta utilizzando lo stesso ID per tre diversi repository. Maven gestisce questi repository per ID, quindi ogni ID deve essere unico! Per esempio. usa "nexus-releases", "nexus-snapshots" e "nexus".

+0

Grazie per il suggerimento, l'ho provato, ma continuo a vedere lo stesso problema. Aiuto uscita Maven? –

+3

perché è questa la risposta accettata se non risolvesse il problema? – Ken

+0

@Ken entrambe le risposte sono valide, mostrano solo due aspetti diversi di ciò che potrebbe essere il problema. forse i due insieme hanno risolto il problema? –

12

Il POM indica il numero di versione come versione SNAPSHOT. Quindi se esegui mvn deploy con il POM in questo stato, distribuirà naturalmente uno snapshot al repository degli snapshot.

Per fare un rilascio, è necessario utilizzare gli obiettivi dello release plugin.


D'altra parte, forse già lo sanno, e la vera risposta è nella risposta di Sean Patrick Floyd.

+0

Haha, ho trascurato l'ovvio (+1) !! –

+0

Sto eseguendo: mvn release: preparare release: eseguire NOT mvn deploy. Da quello che ho capito, il plugin di rilascio dovrebbe rimuovere il suffisso -SNAPSHOT prima della distribuzione, no? –

+1

@ user932509 dovresti eseguire la preparazione e l'esecuzione in due passaggi separati, perché dubito che preparare cambi la versione del manufatto di esecuzione in esecuzione (che sarebbe malvagio) –

19

Nel caso qualcuno altro sta avendo questo problema e trovare le risposte esistenti non risolvono i loro problemi:

Ci sono stati una manciata di bug che significa che release:prepare non si impegna a repository git prima di creare il tag di rilascio . Ciò significa che il numero di versione nei file pom trovati da release:perform contiene -SNAPSHOT e il deployer proverà a rilasciare nel repository di istantanee.

Ecco l'ultimo vizio responsabile di questo comportamento: MRELEASE-875 (colpisce 2,5, fissato in 2.5.1)

+0

Questo era esattamente il mio problema, grazie! Per qualche ragione Maven stava raccogliendo la versione 2.5 rottamata; costringendolo a scegliere 2.5.1 (http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-release-plugin/2.5.1) specificando la versione in POM in ordine. –

+0

Basta confermarlo! grazie mille. Ho trovato [una pagina di aiuto] (https://maven.apache.org/guides/mini/guide-releasing.html) che mostra la versione '2.5' di' maven-release-plugin'. Ho appena inviato un'email su [ML] (http://mail-archives.apache.org/mod_mbox/maven-users/201507.mbox/thread) per chiedere loro di aggiornare questa pagina. – boly38

2

Fell fallo di questo problema con una causa diversa ... fare in modo che il rilascio-plugin è controllando un tag e non un ramo con lo stesso nome!

Mi sono semplicemente imbattuto in questo ... Ho creato un ramo chiamato "1.9.0" nel quale eseguire la mia versione, e poi ho eseguito la release di mvn: preparare che ha anche creato un tag "1.9.0". Quando la release di mvn è stata eseguita, ha eseguito un check-out git di "1.9.0 e ha finito per prelevare l'HEAD del ramo 1.9.0, che, naturalmente, conteneva uno SNAPSHOT (1.10-SNAPSHOT).

Sono due ore della mia vita che non tornerò ... In futuro aggiungerò un suffisso "-release" al nome del ramo (es. "1.9.0-release").