Come faccio a rendere il manifesto disponibile durante una Maven / infallibile unittest run “test mvn”?
-
04-10-2019 - |
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.
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 durantepackage
). Non so se questa è un'opzione (e se funzionerà). - put ed eseguire il test da un altro modulo a seconda del JAR.