Wie kann ich verschiedene JARs zum Kompilieren und Testen in Maven verwenden?

8

Ich kompiliere mein Programm gegen javaee-api. Aber für Junit-Tests muss ich eine spezifische Implementierung wie glassfishs javaee.jar verwenden, um Fehler wie java.lang.ClassFormatError: Abwesend-Code-Attribut in Methode, die nicht nativ ist oder abstrakt in der Klassendatei javax / persistence / Persistence (Siehe auch 1 ).

Vermeiden Sie also Methoden, die nur in der Glassfish-Implementierung verfügbar sind. Ich möchte mein Artefakt mit der allgemeinen API kompilieren, aber junit mit der Implementierungs-JAR ausführen. Beide bieten jedoch gleich benannte Klassen und Schnittstellen, so dass der Klassenlader in Schwierigkeiten gerät.

Was ist der beste Weg, um dieses Problem zu lösen? Kann ich dieses Problem mit Maven lösen?

Vielen Dank

    
marabol 22.01.2010, 09:26
quelle

1 Antwort

13

Ich denke, das ist möglich. Ab Version 2.0.9 verwendet Maven die POM-Reihenfolge, um den Klassenpfad zu erstellen, sodass Sie ihn jetzt bearbeiten können. Und wenn Sie dies mit Dependency Scope kombinieren, sollte es möglich sein erreiche was du willst. Wenn Sie die Abhängigkeit javaee von GlassFish (mit einem Test Gültigkeitsbereich) vor der javaee-api -Abhängigkeit setzen, sollte ersterer vor dem späteren im Test platziert werden Classpath und somit von Komponententests verwendet, während das spätere beim Kompilieren verwendet wird. In der Theorie sollte dies funktionieren, aber es ist ein bisschen zerbrechlich, so dass es sorgfältig dokumentiert werden muss.

So ähnlich (mit einem fiktiven GFv3-Gefäß):

%Vor%     
Pascal Thivent 22.01.2010, 10:26
quelle