Wie man eine Maven-Testbereichsabhängigkeit von Eclipse ausschließt (aber für Unit-Tests im Pfad)

8

Ich habe einige Probleme damit, dass Eclipse eine Maven-Abhängigkeit im Testbereich berücksichtigt - es taucht auf dem Build-Pfad auf und macht mit der Compilierungs- / Javadoc-Auflösung von Eclipse zu schaffen.

Ein Beispiel mit Java EE-Bibliotheken

Ich habe die javaee-api-6.0 -Bibliothek benutzt, um meine Java EE-Anwendung gegen zu kompilieren.

Ich wollte jedoch zu Unit-Testzwecken Zugang zu mehr als nur der API haben - ich brauchte eine Implementierung. Also habe ich die eingebetteten Glassfish-Bibliotheken mit einem Testumfang wie folgt verbunden:

%Vor%

Funktioniert wie erwartet mit Maven

Aus meiner Sicht wird es wegen der <scope>test</scope> der Glassfish-Abhängigkeit nicht in die reguläre compile -Phase aufgenommen.

Da beide Abhängigkeiten in der test-compile -Phase enthalten sind, war ich mir sicher, dass die glassfish-Abhängigkeit vor der javaee-api-Abhängigkeit liegt, damit ersteres beim Kompilieren der Testklassen gegenüber letzterem verwendet wird. Wenn Sie also nur Maven verwenden, ist diese Konfiguration kein Problem.

Funktioniert in Eclipse nicht wie erwartet

Bei der Verwendung von m2e und Eclipse ist die glassfish-Abhängigkeit jedoch in meinem Build-Pfad aufgeführt:

Da die glassfish-Abhängigkeit vor der java-ee-api-Abhängigkeit aufgeführt ist, scheint Eclipse die falsche lib (glassfish anstelle der java-ee-api) zu verwenden, um Javadocs zu validieren / kompilieren / nachzuschlagen. (Tatsächlich bin ich nicht 100% sicher, dass die Kompilierung die falsche lib verwendet - es hängt davon ab, ob Eclipse Maven benutzt, um die Kompilierung durchzuführen, die beim Validieren von Code verwendet wird, und ich weiß nicht, ob es das ist oder nicht) Die Javadoc-Suche verweist definitiv auf die falsche lib)

Die Frage

Wie kann ich Eclipse davon abhalten, die glassfish-Bibliothek zu verwenden, außer wenn Unit-Tests ausgeführt werden? Ich möchte sicherstellen, dass meine Compilation / Javadoc-Lookups auf der API stattfinden, nicht eine bestimmte Implementierung dieser API.

    
Ryan Bennetts 24.02.2012, 07:27
quelle

4 Antworten

8

Es ist eine Weile her, seit ich diese Frage zum ersten Mal gestellt habe, aber:

  

Wie kann ich Eclipse davon abhalten, die glassfish-Lib zu verwenden, außer wenn Unit-Tests ausgeführt werden?

Sie können nicht. Eclipse ist an das Konzept eines Build-Pfades pro Projekt gebunden und m2e / m2e-wtp kann diese Einschränkung nicht überwinden (oder wird es nicht), wie im folgenden Fehler beschrieben:

Der Umfang der Abhängigkeiten hat keine Auswirkungen auf die Eclipse-Kompilierung

Update 08. Juni 2016

Mit der Veröffentlichung von JEE7 enthält die JAR-Datei javaee-api jetzt wirklich verwendbare Klassendateien . Dies bedeutet, dass es in Tests verwendet werden kann und ich die glassfish-embedded-all jar-Datei nicht zuvor in der pom-Datei angeben muss.

Nun, da Eklipse Source und Javadoc aus der richtigen JAR-Datei zieht (zB javaee-api und nicht glassfish-embedded-all ) ist es mir egal, dass der test-scoped glassfish-embedded-all immer noch auf dem Klassenpfad in Eclipse ist .

Es ist keine Lösung für die Frage, die ich ursprünglich vorgeschlagen habe, aber es ist eine Lösung für das zugrunde liegende Problem, das ich zu der Zeit hatte. Vielleicht hilft es auch jemand anderem.

    
Ryan Bennetts 20.03.2013, 07:54
quelle
6

Ich habe auch mit diesem Problem gekämpft und endlich eine Lösung gefunden. Sie haben das m2e-Plugin installiert, benötigen aber auch den m2e wtp-Connector, der standardmäßig nicht installiert ist. Abhängig von Ihrer m2e Version wird dies anders durchgeführt. Für die neueste Version unter 'Einstellungen' - & gt; 'Maven' - & gt; 'Entdeckung'. Klicken Sie auf "Katalog öffnen". Wählen Sie den M2E - WTP-Anschluss.

Klicken Sie nach der Installation mit der rechten Maustaste auf Ihr Projekt und wählen Sie "Maven" - & gt; 'Projektkonfiguration aktualisieren ...'

Ihre pom.xml sollte wie folgt aussehen:

%Vor%

Eclipse sollte glücklich bereitstellen, Unit-Tests sollten in Eclipse ausgeführt werden, und maven in der Befehlszeile sollte ebenfalls angenehm sein.

Hoffe, das hilft.

    
J. Andrew Thompson 16.04.2012 19:22
quelle
2

Vielleicht funktioniert es, wenn du das surefire-plugin auf

konfigurierst
  • schließt die API-Abhängigkeit (die als Projektabhängigkeit enthalten ist) und
  • aus
  • schließt die glasfish-Abhängigkeit ein (nicht in die Projektabhängigkeiten einbeziehen)

so:

%Vor%

Sehen Sie sich die Konfiguration des Classpath an surefire-Plugin (das Plugin, das die Tests ausführt) Website.

Aus der Dokumentation (Name des äußeren Ausschlusselements AND innerer Ausschlusselementname mit s )

%Vor%

aber ich denke, es sollte (nur äußerer Elementname mit ' s ) sein:

%Vor%     
FrVaBe 24.02.2012 22:48
quelle
0

Ich denke von der Eclipse-Seite, wenn Sie lib im Buildpath nicht haben, können Sie es nicht speziell für Unittests oder Ressourcenverarbeitung usw. haben.

Aus der Praxis - versuchen Sie, Abhängigkeiten in pom.xml anzuordnen, und die Reihenfolge der Bibliotheken in eclipse buildpath ist in den meisten Fällen gleich.

    
Andrew 24.02.2012 09:52
quelle