2012-08-17 12 views
6

Voglio dividere il mio lavoro di integrazione continuo (Hudson) in due passaggi. (Poiché il runtime con build e reporting richiede troppo tempo.) Nel primo processo, ho creato il mio progetto Maven multi modulo con "pacchetto mvn". Quindi copio il mio spazio di lavoro in un'altra posizione e provo a ricostruire il progetto solo con l'obiettivo "sito" e/o findbugs/checkstyle/pmd per creare report. Ma questo non funziona! Maven non può risolvere una dipendenza dei miei sottomoduli. (Ma tutti i JAR sono disponibili nelle cartelle di destinazione.)Il sito Maven sul progetto multi-modulo non è in grado di risolvere la dipendenza

Esempio: La mia struttura simile a questa:

  • Parent
    • Un
    • B
    • C
    • D

Progetto C ha come progetto la dipendenza B.

Quando costruisco tutto con "sito mvn", si genera per il progetto A e B tutti i rapporti. Ma si è fermato al progetto C con il messaggio di errore "Impossibile risolvere le dipendenze per il progetto B." Ma il progetto B è già stato creato con "pacchetto mvn". Cioè Posso trovare il file JAR del progetto B nella sua cartella di destinazione.

Esiste un modo per risolvere la dipendenza dal sottomodulo B senza "mvn install"? (non voglio fare questo sul mio server CI temo che potrebbe essere pericoloso per altri lavori con lo stesso codice di base..)

Aggiornamento 08/20/12:

POM della radice cartella:

<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> 
    <name>Foo</name> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>parent</module> 
    </modules> 
</project> 

Parent POM:

<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> 
    <name>Foo</name> 
    <groupId>foo</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>../bar-a</module> 
     <module>../bar-b</module> 
     <module>../bar-c</module> 
     <module>../bar-d</module> 
    </modules> 
    [...] 
    <reporting> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>findbugs-maven-plugin</artifactId> 
       <version>2.5.1</version> 
       [...] 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-pmd-plugin</artifactId> 
       <version>2.7.1</version> 
       [...] 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-checkstyle-plugin</artifactId> 
       <version>2.9.1</version>    
       [...] 
      </plugin> 
     </plugins> 
    </reporting> 
</project> 

POM di B :

<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> 
    <parent> 
     <groupId>foo</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0</version> 
     <relativePath>../parent</relativePath> 
    </parent> 
    <name>Bar B</name> 
    <artifactId>bar-b</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    [...] 
</project> 

POM di C:

<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> 
    <parent> 
     <groupId>foo</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0</version> 
     <relativePath>../parent</relativePath> 
    </parent> 
    <name>Bar C</name> 
    <artifactId>bar-c</artifactId> 
    <packaging>jar</packaging> 
    [...] 
    <dependencies> 
     <dependency> 
      <groupId>foo</groupId> 
      <artifactId>bar-b</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
    [...] 
</project> 
+0

Senza pom's è difficile indovinare ... ma sembra che una dipendenza/modulo non sia configurato correttamente. Il sito mvn clean dovrebbe funzionare senza errori. – khmarbaise

+0

Un pacchetto mvn clean viene eseguito anche senza errori? – khmarbaise

+0

Sì. "Il pacchetto mvn clean" funziona senza errori. "mvn clean site" non. Carico uno snippet di codice in seguito. – user1606528

risposta

1

stavo affrontando proprio la stessa questione "molto tempo".

L'unico modo (penso) per risolverlo con il tuo modo di lavorare è davvero mvn install, come l'hai suggerito.

Ma il problema è in effetti il ​​modo in cui si tenta di avere comportamenti diversi con la copia dell'area di lavoro. Dovresti invece considerare che CI verrà compilato e testato tutte le volte che vuoi (ogni commit o ogni ora), ma fai report solo una volta (ogni mezzanotte per esempio). Sareste in grado di avere build sempre più veloci e correggere la documentazione e le segnalazioni di notte.

Questo è il modo in cui lavoriamo, ed è abbastanza sufficiente. Usiamo jenkins per quello, ma potreste attivarlo con ogni CI soft penso)!

@hourly : mvn clean package (or install) --> from 1 to 5 minutes to run all test on all modules 
@daily : mvn clean install site --> from 15 to 35 minutes to run all test on all modules + doc + reports + PDF reports 

è anche possibile utilizzare i profili per innescare comportamenti diversi, ma questo è troppo sofisticato per un utilizzo come base.

Problemi correlati