9 Stimmen

Wie mache ich das Manifest während eines Maven/Surefire-Unittestlaufs "mvn test" verfügbar?

Wie mache ich das Manifest während eines Maven/Surefire-Unittestlaufs "mvn test" verfügbar?

Ich habe ein Open-Source-Projekt, das ich von Ant zu Maven konvertiere, einschließlich seiner Unit-Tests. Hier ist das Quellcode-Repository des Projekts mit dem Maven-Projekt: http://github.com/znerd/logdoc

Meine Frage bezieht sich auf das primäre Modul, genannt "Basis". Dieses Modul hat einen Unit-Test, der das Verhalten der statischen Methode testet getVersion() in der Klasse org.znerd.logdoc.Library . Diese Methode gibt zurück:

Library.class.getPackage().getImplementationVersion()

Le site getImplementationVersion() Methode gibt den Wert einer Einstellung in der Manifestdatei zurück. So weit, so gut. Ich habe dies in der Vergangenheit getestet und es funktioniert gut, solange das Manifest tatsächlich auf dem Klassenpfad unter folgendem Pfad verfügbar ist META-INF/MANIFEST.MF (entweder im Dateisystem oder in einer JAR-Datei).

Jetzt ist mein Problem, dass die Manifestdatei nicht verfügbar ist, wenn ich die Unit-Tests ausführe:

mvn test

Surefire führt die Unit-Tests aus, aber mein Unit-Test schlägt mit einer Meldung fehl, die angibt, dass Library.getVersion() zurückgegeben null .

Wenn ich die JAR-Datei überprüfen möchte, stelle ich fest, dass sie noch nicht einmal generiert wurde. Maven/Surefire führt die Unit-Tests gegen die Klassen aus, vor werden die Ressourcen dem Klassenpfad hinzugefügt.

Weitere Untersuchungen zeigen, dass Surefire seine eigene JAR-Datei in einem temporären Verzeichnis erzeugt, z. B.

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

Und verwendet dann dieses JAR, um die Library-Klasse zu laden. Dieses JAR enthält nicht die Ressourcen, die ich unter src/main/resources . Daher wird eine META-INF/MANIFEST.MF Datei funktioniert ebenfalls nicht.

Wie kann ich Surefire sagen, dass ich meine META-INF/MANIFEST.MF Datei, die über denselben Classloader verfügbar ist wie die Library Klasse.

Beachten Sie, dass ich Maven 2.2.0, Java 1.6.0_17 auf Mac OS X 10.6.2, mit JUnit 4.8.1 verwende.

2voto

Pascal Thivent Punkte 548176

Wie Sie schon sagten, besteht das Problem darin, dass die MANIFEST.MF wird erzeugt während package und direkt in das endgültige Gefäß aufgenommen, und all dies geschieht nach test . Also müssen Sie wohl entweder:

  • anbieten. Ihre eigene MANIFEST.MF (die verfügbar wären in target/classes vor der Zusammenführung während package ). Ich weiß nicht, ob dies eine Option ist (und ob es funktionieren wird).
  • legen und führen Sie Ihren Test von einem anderen Modul aus, das vom JAR abhängt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X