2013-04-04 12 views
9

Ho un progetto Maven + Spring multi-modulo. Alcuni moduli dipendono da altri moduli.In un progetto a più moduli, un modulo Maven può accedere a dipendenze transitive nell'ambito del test di un altro modulo da cui dipende?

Supponiamo di avere un modulo denominato services che dipende dal modulo denominato persistence.

Il modulo servizi:

  • A livello Primavera, le importazioni del persistence contesto
  • A livello Maven, dipende dal modulo

persistence Il modulo persistence definisce alcuni configuratrion relativo al. .. persistenza: origine dati, JPA, transazioni ...

Ha alcune dipendenze s per testare il DB (driver JDBC, DBCP, H2) che sono limitati all'ambito del test, poiché quando l'app viene distribuita, il DataSource verrà definito nel contenitore (Tomcat) e accessibile tramite JNDI.

Ora, vorrei avere accesso, durante la fase di test Maven del modulo , alle dipendenze (transitive) nell'ambito del test del modulo persistence.

Il Maven manual (Table 3.1) afferma che normalmente le dipendenze dello scope di prova non sono disponibili in modo transitorio.

È possibile ottenerli in qualche modo nel contesto di un progetto multi-modulo?

Se no quali sono le buone alternative? (Definire le dipendenze del test nel pom principale? ...)

risposta

20

ho trovato esattamente come dovrebbe funzionare, cioè da generando un test JAR, che è un tipo di manufatto, nel modulo che viene utilizzato come dipendenza dagli altri, nel nostro esempio la modulo di persistenza:

<build> 
    <plugins> 

      <!-- Generate test jar too --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>test-jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

    </plugins> 
</build> 

Poi dichiarando questo barattolo test come test ambito di dipendenza dell'altro modulo, nel nostro esempio il modulo services:

<!-- Services module --> 
<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>services</artifactId> 
    <version>${project.version}</version> 
</dependency> 
<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>services</artifactId> 
    <version>${project.version}</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 

Note la seconda dipendenza identica alla prima tranne che per lo type impostato su e per lo scope impostato per il test.

Ora, si potrebbe immaginare che i prove scritte nel modulo service avrebbero accesso alle classi di test del modulopersistence (questo funziona), ma anche alla prova ambito dipendenze del modulo di persistenza.

Tuttavia, è un problema noto (https://issues.apache.org/jira/browse/MNG-1378) che non funziona in questo modo. È aperto dal 2005, quindi non lo vedo risolto in un prossimo futuro ... ma chissà.

Si dovrò semplicemente duplicare le dipendenze di prova con ambito su entrambi i moduli, o semplicemente definirli nel pom ... genitore

+0

Grazie per questo, ho appena passato un'ora a chiedermi perché stavo ottenendo un'eccezione di classe non trovata :( – PiersyP

+0

GRAZIE !! Per quello che vale, non ho bisogno di includere la dipendenza per il manufatto del modulo principale, solo il test ' 'uno, ma il chilometraggio di altre persone può variare, ovviamente. :) – CullenJ

1

è ma non è così. Succede anche con lo scopo fornito. Problema connesso qui: https://issues.apache.org/jira/browse/MNG-5255

+0

Grazie, ma il problema che indicò, mentre correlata, non risponde il mio domanda. In realtà è il problema opposto che stanno avendo lì: dipendenze transitive del test/dipendenze fornite sono incluse nel JAR finale. –

+0

Siamo spiacenti! tl; dr :) Ci siamo imbattuti nelle dipendenze transitive del campo di prova non essendo nel classpath del test unitario solo l'altro giorno, quindi quando ho visto la tua domanda, ho pensato che fosse lo stesso problema. – tdrury

+0

Alcuni altri moduli dichiarano queste come dipendenze dell'ambito non di test? Ottieni l'efficace POM (tramite eclipse o il plugin di aiuto) per vedere. – tdrury

Problemi correlati