Wie stelle ich das Manifest während eines Maven / Surefire-Komponententests "mvn test" zur Verfügung?
Ich habe ein Open-Source-Projekt, das ich von Ant zu Maven konvertiere, einschließlich seiner Unit-Tests. Hier ist das Projektquellen-Repository mit dem Maven-Projekt: Ссылка
Meine Frage bezieht sich auf das primäre Modul namens "base". Dieses Modul verfügt über einen Komponententest, der das Verhalten der statischen Methode getVersion()
in der Klasse org.znerd.logdoc.Library
testet. Diese Methode gibt Folgendes zurück:
Die Methode getImplementationVersion()
gibt einen Wert einer Einstellung in der Manifestdatei zurück. So weit, ist es gut. Ich habe dies in der Vergangenheit getestet und es funktioniert gut, solange das Manifest tatsächlich auf dem Klassenpfad im Pfad META-INF/MANIFEST.MF
(entweder im Dateisystem oder in einer JAR-Datei) verfügbar ist.
Nun besteht meine Herausforderung darin, dass die Manifestdatei nicht verfügbar ist, wenn ich die Komponententests ausführe:
%Vor% Surefire führt die Komponententests aus, aber mein Komponententest schlägt mit einer Meldung fehl, die anzeigt, dass Library.getVersion()
null
zurückgegeben hat.
Wenn ich das JAR überprüfen möchte, finde ich, dass es nicht einmal erzeugt wurde. Maven / Surefire führt die Komponententests für die Klassen aus, bevor die Ressourcen dem Klassenpfad hinzugefügt werden.
Weitere Untersuchungen zeigen, dass Surefire eine eigene JAR-Datei in einem temporären Verzeichnis erstellt, z. B.
%Vor% Und dann verwendet diese JAR, um die Bibliotheksklasse zu laden. Diese JAR enthält nicht die Ressourcen, die ich unter src/main/resources
festhielt. Also funktioniert es auch nicht, eine META-INF/MANIFEST.MF
Datei zu erstellen.
Wie kann ich Surefire mitteilen, dass meine META-INF/MANIFEST.MF
-Datei vom selben Klassenlader wie die Library
-Klasse verfügbar ist.
Beachten Sie, dass ich Maven 2.2.0, Java 1.6.0_17 unter Mac OS X 10.6.2 mit JUnit 4.8.1 verwende.
Nun, wie Sie auf Sie hingewiesen haben, besteht das Problem darin, dass das MANIFEST.MF
während package
generiert und direkt in das finale jar eingefügt wird und all dies nach test
geschieht. Ich denke, du musst entweder:
target/classes
verfügbar wäre) vor dem Zusammenführen während package
). Ich weiß nicht, ob das eine Option ist (und ob es funktionieren wird). Tags und Links maven-2 junit4 manifest.mf surefire