Come faccio a rendere il manifesto disponibile durante una Maven / infallibile unittest run “test mvn”?

StackOverflow https://stackoverflow.com/questions/2916209

Domanda

Come faccio a rendere il manifesto disponibile durante una Maven / infallibile unittest run "test mvn"?

Ho un progetto open-source che sto convertendo da Ant a Maven, compresi i suoi test di unità. Ecco il repository di origine del progetto con il progetto Maven: http://github.com/znerd/logdoc

La mia domanda riguarda il modulo primario, chiamato "base". Questo modulo ha uno unit test che verifica il comportamento del metodo getVersion() statico nella org.znerd.logdoc.Library classe. Questo metodo restituisce:

Library.class.getPackage().getImplementationVersion()

Il metodo getImplementationVersion() restituisce un valore di un'impostazione nel file manifesto. Fin qui tutto bene. Ho testato questo in passato e funziona bene, a patto che il manifesto è infatti disponibile sul classpath al META-INF/MANIFEST.MF percorso (sia sul file system o all'interno di un file JAR).

Ora la mia sfida è che il file manifesto non è disponibile quando si esegue i test di unità:

mvn test

infallibile esegue i test di unità, ma il mio test di unità non riesce con un mesage che indica che Library.getVersion() null restituito.

Quando voglio controllare il JAR, trovo che non è nemmeno stato generato. Maven / Surefire esegue i test di unità contro le classi, prima le risorse sono aggiunti al percorso di classe.

Ulteriori spettacoli indagine infallibile genera il proprio file JAR in una directory temporanea, per es.

/private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar

E poi usa questo JAR per caricare la classe Biblioteca. Questo JAR non contiene le risorse ho attaccato sotto src/main/resources. Così mettendo un file META-INF/MANIFEST.MF anche non funziona.

Quindi, come faccio a dire sicuro per avere il mio file META-INF/MANIFEST.MF disponibili dalla stessa classe loader della classe Library.

  

Si noti che io uso Maven 2.2.0, Java 1.6.0_17 su Mac OS X 10.6.2, con JUnit 4.8.1.

È stato utile?

Soluzione

Bene, come è stato evidenziato, il problema è che il MANIFEST.MF viene generato durante package e direttamente inclusi nel vaso finale e tutto questo si verifica dopo test. Quindi credo che si dovrà o:

  • il proprio MANIFEST.MF (che avrebbe essere disponibile in target/classes prima di essere fusa durante package). Non so se questa è un'opzione (e se funzionerà).
  • put ed eseguire il test da un altro modulo a seconda del JAR.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top