2013-04-30 14 views
5

Dato il seguente progetto di esempio multi-modulo:Maven Plugin di uscita con SVN: Esterni e un multi-modulo di progetto

  • aggr/pom.xml (versione 1.0-SNAPSHOT)
  • aggr/genitore/pom .xml (Versione 2.0-SNAPSHOT)
  • aggr/app/pom.xml (versione 3.0-SNAPSHOT)
  • aggr/COMP1/pom.xml (Versione 4.0-SNAPSHOT)

cui genitore è il sbucciare nt di qualsiasi altro pom e app ha una dipendenza da comp1.

Rilascio tramite rilascio: preparare/eseguire funziona correttamente purché la cartella aggr abbia la stessa struttura all'interno del repository svn (repository/trunk/aggr/parent.pom, ...).

Ora quando voglio usare lo stesso progetto ma con svn: gli esterni, il rilascio-plugin non funziona affermando che comp1:

Can't release project due to non released dependencies : parent:pom:2.0-SNAPSHOT

La struttura repository è quindi qualcosa di simile

  • repository/Aggi/trunk/pom.xml
  • repository/genitore/trunk/pom.xml
  • repository/app/trunk/pom .xml
  • repository/comp1/trunk/pom.xml cartella

l'aggr usa esterni che punta al modulo di tronchi e quindi la copia di lavoro controllato assomiglia quanto sopra.

Perché Maven gestisce i moduli in base agli esterni in modo diverso e c'è un modo per superare questo problema?

Modifica: i file pom del progetto svn: externals. L'unica differenza con i pom-Files dell'altro progetto sono i tag scm. Nell'altro progetto non esterni solo l'aggregatore ha il tag scm.

genitore-pom.xml esterno

<groupId>small.test</groupId> 
<artifactId>parent</artifactId> 
<version>2.0-SNAPSHOT</version> 

<scm> 
    <connection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</connection> 
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/parent/trunk/</developerConnection> 
    <url>http://localhost/svn/small-test-ext/parent/trunk/</url> 
</scm> 

<build> 
<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-release-plugin</artifactId> 
     <version>2.4.1</version> 
    </plugin> 
</plugins> 

aggr-pom.xml esterno small.test genitore 2.0-SNAPSHOT

<groupId>small.test</groupId> 
<artifactId>aggr</artifactId> 
<version>1.0-SNAPSHOT</version> 

<scm> 
    <connection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</connection> 
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/aggr/trunk/</developerConnection> 
    <url>http://localhost/svn/small-test-ext/aggr/trunk/</url> 
</scm> 

<modules> 
    <module>parent</module> 
    <module>comp1</module> 
    <module>comp2</module> 
    <module>app</module> 
</modules> 

app-pom.xml esterno

<parent> 
    <groupId>small.test</groupId> 
    <artifactId>parent</artifactId> 
    <version>2.0-SNAPSHOT</version> 
</parent> 
<groupId>small.test</groupId> 
<version>3.0-SNAPSHOT</version> 

<artifactId>app</artifactId> 
<packaging>jar</packaging> 

<scm> 
    <connection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</connection> 
    <developerConnection>scm:svn:http://localhost/svn/small-test-ext/app/trunk/</developerConnection> 
    <url>http://localhost/svn/small-test-ext/app/trunk/</url> 
</scm> 

<dependencies> 
    <dependency> 
    <groupId>small.test</groupId> 
    <artifactId>comp1</artifactId> 
    <version>4.0-SNAPSHOT</version> 
</dependency> 

Grazie Konrad

+0

Il problema principale si dispone non utilizza la stessa versione per tutti i moduli, ecc Inoltre si può visualizzare i file pom? A parte questo, perché stai usando gli esterni per creare una struttura multi-modulo e non creare una struttura reale senza elementi esterni? – khmarbaise

+0

I moduli e il genitore del progetto reale vengono utilizzati in diversi progetti. Quindi devo fare affidamento sugli esterni e non posso usare la stessa versione per l'intero progetto. – Konrd

+0

Questo non è davvero un motivo, perché se si dispone di una build multi-modulo è possibile utilizzare i moduli separatamente. Quindi, se non si modifica la struttura delle cartelle in un singolo albero SVN invece di utilizzare le esternalizzazioni, non è possibile eseguirlo. – khmarbaise

risposta

2

Nel progetto attuale è necessario eseguire mvn: rilasciare per ognuno, perché avete progetti o moduli in diversi repository SVN.Se si desidera eseguire un solo mvn: rilasciare repository dovrebbe apparire come:

svn_repository: branches/ 
      tags/ 
      trunk/ 
        parent 
        comp1 
        comp2 
        app 
        pom.xml 
+2

Questo è esattamente quello che sto facendo. Grazie! Sai se esiste un plugin che chiama automaticamente la versione: preparati per tutti i sottomoduli nell'ordine giusto? – Konrd

Problemi correlati