Wie stelle ich das Manifest während eines Maven / Surefire-Komponententests "mvn test" zur Verfügung?

9

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:

%Vor%

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.

    
Ernst de Haan 26.05.2010, 19:43
quelle

1 Antwort

2

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:

  • stellen Ihre eigene MANIFEST.MF zur Verfügung (die in 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).
  • Legen Sie Ihren Test von einem anderen Modul ab und führen Sie ihn je nach JAR aus.
Pascal Thivent 26.05.2010, 21:08
quelle