2013-05-16 7 views
11

Ho cercato nel forum per trovare la risposta al mio problema, ma non sono riuscito a trovarlo. Il mio problema è che:Come convincere Maven a prendere risorse da/src/test/resources invece di/src/main/resources per un progetto dipendente?

Ho due progetti: ProgettoA e ProgettoB. ProjectB utilizza ProjectA. In ProjectA ho due cartelle: /src/main/resources e/src/test/resources. In ProjectB eseguo: mvn clean install. Voglio che, nella fase di test, le classi in ProjectB utilizzino risorse da/src/test/resources invece di/src/main/resources.

Questo è quello che ho provato: http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html

E 'simile al mio problema, ma dopo che ho configurato il test goal-vaso per ProjectA, ProjectB corre ancora le prove in proposito, che le classi in Projecta proprietà d'uso da/src/main/resources invece di/src/test/resources.

mio pom.xml in ProjectA assomiglia:

<project ...> 
    <parent> 
     ... 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 
    <artifactId>ProjectA</artifactId> 
    <packaging>jar</packaging> 

    <dependencies> 
     ... 
    </dependencies> 

    <build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
     <testResources> 
      <testResource> 
       <directory>src/test/resources</directory> 
       <filtering>true</filtering> 
      </testResource> 
     </testResources> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>test-jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

In ProjectB mia pom.xml assomiglia:

<project ...> 
    <parent> 
     ... 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>ProjectB</artifactId> 
    <packaging>jar</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>integration-test</goal> 
          <goal>verify</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>com.sensano</groupId> 
      <artifactId>ProjectA</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>ProjectA</groupId> 
      <artifactId>ProjectA</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <scope>test</scope> 
      <type>test-jar</type> 
     </dependency> 
    </dependencies> 

</project> 

Esiste un metodo Qualsiasi aiuto sarebbe apprezzato!

Cordiali saluti,
Mateusz Moroz

risposta

8

Il src/main/resources sono imballati per il file jar chiamato ProjectA.jar come la seguente struttura

ProjectA.jar 
|`-com 
| `-sensano 
| `-foo 
`-[the resource form src/main/resources] 

Purtroppo il src/test/resources sono anche ricco per il file jar chiamato ProjectA-tests.jar come la seguente struttura pure.

ProjectA-tests.jar 
|`-com 
| `-sensano 
| `-foo 
`-[the resource form src/test/resources] 

Se il nome della risorsa che si richiede è lo stesso nome per sia dal src/main/resources e src/test/resources. Potrebbero esserci dei problemi con il caricatore di classi. IMHO, il più vicino vince.

Dal momento che si mette la ProjectA prima della ProjectA-tests, allora potrebbe essere la causa principale che il ProjectB userà il src/main/resources da ProjectA dal momento che è più vicino.

favore prova a scambiare mettendo il ProjectA-tests prima della ProjectA come la seguente: -

<dependencies> 
    <dependency> 
     <groupId>com.sensano</groupId> 
     <artifactId>ProjectA</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>test</scope> 
     <type>test-jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.sensano</groupId> 
     <artifactId>ProjectA</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

La più vicina sarà la ProjectA-tests, e ProjectB dovrebbe usare il src/test/resources invece.

Spero che questo possa essere d'aiuto.