2012-02-27 8 views
6

Nel mio progetto Maven, ho un modulo in funzione su un altro ed è il codice di prova/risorse:logback-test.xml e multi-modulo di progetto Maven

... 
<scope>test</scope> 
<type>test-jar</type> 
... 

Ora, entrambi i moduli hanno un proprio logback-test.xml, ognuno con una configurazione specifica per l'esecuzione di test in quel particolare modulo. Tuttavia, come previsto, durante l'esecuzione di prove in modulo bambino, logback si lamenta con un avvertimento che ci sono molteplici logback-Test.xml nel percorso, e lo fa con la sua configurazione di registrazione di default:

08:44:17,528 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 
08:44:17,530 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:path/to/my/project/module2/logback-test.xml] 
08:44:17,532 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs multiple times on the classpath. 
08:44:17,533 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs at [file:/C:/path/to/my/project/module2/logback-test.xml] 
08:44:17,533 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback-test.xml] occurs at [file:/C:/path/to/my/project/module1/logback-test.xml] 
08:44:17,636 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 
08:44:17,647 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 
08:44:17,653 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 
08:44:17,692 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 
08:44:17,764 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN 
08:44:17,764 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 
08:44:17,765 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.myproject] to TRACE 
08:44:17,765 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to OFF 
08:44:17,768 |-INFO in [email protected] - Registering current configuration as safe fallback point 

Mi chiedo come potrei risolvere questo problema .. Voglio mantenere più configurazioni per ogni modulo; Immagino di non poter escludere un file da classpath; Voglio davvero tornare indietro per tacere di cose di cui sono a conoscenza. Come puoi vedere dalle ultime due righe, ho un intero pacchetto di logback su "OFF" nella mia configurazione, ma continua comunque a registrare dopo quel punto. Il modello di registro è anche diverso da quello che ho configurato in entrambe le configurazioni.

Il logback è configurato e utilizzato nel codice tramite SLF4J.

Durante l'esecuzione di test nel modulo genitore, nessuno di questi viene registrato (né INFO né messaggi WARN), quindi non posso dare la colpa a nient'altro che strani comportamenti di Logback.

risposta

5

È possibile escludere logback-test.xml dal vaso di prova

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>test-jar</goal> 
        </goals> 
        <configuration> 
        <excludes> 
         <excludes>logback-test.xml</excludes> 
        </excludes> 
        </configuration> 
       </execution> 
      </executions>    
     </plugin> 

O (non ho provato questo) è possibile utilizzare una convenzione di denominazione logback-test-project.a.xml, logback-test-project.b.xml ecc e configurare infallibile in modo diverso in ogni progetto con -Dlogback.configurationFile=logback-test-project.a.xml.

+3

la soluzione di esclusione risolve il problema solo in un caso: durante l'esecuzione di test su un modulo, quando tutte le altre dipendenze provengono dal repository. Tuttavia, l'esecuzione di un test unitario da Eclipse (immagino che questo sia il punto in cui Maven ha poco a che fare con le cose), o l'esecuzione di "clean test" sul genitore pom, non sono influenzate da questa configurazione. Sfortunatamente, i primi due sono i modi più frequenti per eseguire i miei casi di test. – uiron

+0

Il tuo padre POM ha il suo 'logback-test' o è puramente un aggregatore? – artbristol

+0

no, non c'è il codice nel genitore. Stavo pensando di avere appena configurato la registrazione in parent, ma voglio davvero avere impostazioni di registrazione diverse per ogni modulo. – uiron