Ich versuche mit Maven ein einfaches Java-Projekt zu erstellen. In meiner POM-Datei deklariere ich JUnit 4.8.2 als einzige Abhängigkeit. Trotzdem besteht Maven darauf, JUnit Version 3.8.1 zu verwenden. Wie behebe ich das?
Das Problem äußert sich in einem Kompilierungsfehler: "Paket org.junit existiert nicht". Dies liegt an der Importanweisung in meinem Quellcode. Der korrekte Paketname in JUnit 4. * lautet org.junit. * In Version 3. * ist es junit.framework. *
Ich glaube, ich habe unter http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html eine Dokumentation zur Wurzel des Problems gefunden, aber der Rat dort scheint für Maven-Experten gedacht zu sein. Ich habe nicht verstanden, was ich tun soll.
Antworten:
Nur um eine Antwort mit der Komplettlösung zu haben, die den Besuchern hilft:
Sie müssen lediglich die Junit-Abhängigkeit hinzufügen
pom.xml
. Vergiss das nicht<scope>test</scope>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
quelle
@ Tennis Roberts: Sie hatten absolut Recht: Meine Testklasse befand sich in src / main / java. Auch der Wert des Elements "scope" im POM für JUnit war "test", obwohl es so sein soll. Das Problem war, dass ich beim Erstellen der Testklasse in Eclipse schlampig war, was dazu führte, dass sie in src / main / java insted von src / test / java erstellt wurde. Dies wurde in der Projekt-Explorer-Ansicht von Eclipse nach dem Ausführen von "mvn eclipse: eclipse" einfacher zu sehen, aber Ihr Kommentar hat mich dazu gebracht, es zuerst zu sehen. Vielen Dank.
quelle
Mein Problem war eine Zeile in meiner.
pom.xml
Ich hatte die Zeile<sourceDirectory>${basedir}/src</sourceDirectory>
, die diese Zeile entfernte, damit Maven reguläre Strukturordner verwendet, die mein Problem lösenquelle
Das Entfernen des Scope-Tags in pom.xml für junit hat funktioniert.
quelle
Fügen Sie diese Abhängigkeit zu Ihrer
pom.xml
Datei hinzu:http://mvnrepository.com/artifact/junit/junit-dep/4.8.2
<!-- https://mvnrepository.com/artifact/junit/junit-dep --> <dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>4.8.2</version> </dependency>
quelle
Ich hatte das gleiche Problem. Alles was ich getan habe war - Aus der Datei pom.xml habe ich die Abhängigkeit für junit 3.8 gelöscht und eine neue Abhängigkeit für junit 4.8 hinzugefügt. Dann habe ich Maven sauber gemacht und Maven installiert. Es hat den Trick gemacht. Um zu überprüfen, ging ich nach der Installation von maven zu project-> properties-build path-> maven dependencies und sah, dass jetzt das junit 3.8 jar weg ist! Stattdessen wird junit 4.8 jar aufgelistet. cool!!. Jetzt läuft mein Test wie ein Zauber. Hoffe das hilft irgendwie ..
quelle
Mein Fall war ein einfaches Versehen.
Ich habe die JUnit-Abhängigkeitsdeklaration nicht in der POM-Datei, sondern
<dependencies>
unter dem<dependencyManagement/>
Knoten<project/>
abgelegt. Der richtige Weg ist:<project> <!-- Other elements --> <dependencies> <!-- Other dependencies--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies> <project>
quelle
Wie haben Sie die Version deklariert?
<version>4.8.2</version>
Beachten Sie die Bedeutung dieser hier erläuterten Erklärung (siehe ANMERKUNGEN) :
Wenn Sie eine "normale" Version wie 3.8.2 für Junit deklarieren, wird dies intern als "alles zulassen, aber 3.8.2 bevorzugen" dargestellt. Dies bedeutet, dass Maven bei Erkennung eines Konflikts die Konfliktalgorithmen verwenden darf, um die beste Version auszuwählen. Wenn Sie [3.8.2] angeben, bedeutet dies, dass nur 3.8.2 verwendet wird und sonst nichts.
Um die Verwendung der Version 4.8.2 zu erzwingen, versuchen Sie es
<version>[4.8.2]</version>
Da Sie keine anderen Abhängigkeiten in Ihrem Projekt haben, sollten keine Konflikte auftreten, die Ihr Problem verursachen. Die erste Deklaration sollte für Sie funktionieren, wenn Sie diese Version aus einem Repository abrufen können. Erben Sie Abhängigkeiten von einem übergeordneten POM?
quelle
<version>[4.8.2,)</version>
besser, zumindest diese Version zu erzwingen ?Ich hatte meine Dateien an den richtigen Stellen und nur das Entfernen
<scope>test</scope>
aus dem JUnit-Abhängigkeitseintrag löste das Problem (ich verwende JUnit 4.12). Ich glaube, dass mit demtest
Umfang die Abhängigkeit während der Kompilierungsphase einfach ignoriert wurde. Jetzt funktioniert alles auch wenn ich anrufemvn test
.quelle
Ich hatte ein ziemlich ähnliches Problem in einem "Test-Utils" -Projekt (Hinzufügen von Funktionen, Regeln und Zusicherungen zu JUnit), einem Kind eines übergeordneten Projekts, das Abhängigkeiten injiziert. Die Klasse, die vom Paket org.junit.rules abhängt, befand sich in src / main / java.
Also habe ich eine Abhängigkeit von junit ohne Testumfang hinzugefügt und das Problem gelöst:
pom.xml des Test-Util-Projekts:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency>
pom.xml des übergeordneten Projekts:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>
quelle
Ich hatte ein ähnliches Problem damit, dass Eclipse meinen Code gut kompilierte, aber Maven schlug beim Kompilieren der Tests jedes Mal fehl, obwohl JUnit in meiner Abhängigkeitsliste enthalten war und sich die Tests in / src / test / java / befanden.
In meinem Fall hatte ich die falsche Version von JUnit in meiner Abhängigkeitsliste. Ich habe JUnit4-Tests (mit Anmerkungen) geschrieben, aber JUnit 3.8.x als meine Abhängigkeit. Zwischen Version 3.8.x und 4 von JUnit wurde der Paketname von junit.framework in org.junit geändert, weshalb Maven das Kompilieren mit einem JUnit-JAR immer noch unterbricht.
Ich bin mir immer noch nicht ganz sicher, warum Eclipse erfolgreich kompiliert wurde. Es muss irgendwo im Klassenpfad eine eigene Kopie von JUnit4 haben. Hoffe, diese alternative Lösung ist nützlich für die Menschen. Ich habe diese Lösung erreicht, nachdem ich dem obigen Link von Arthur gefolgt bin.
quelle
Ich bin auch auf dieses Problem gestoßen - ich habe versucht, ein Objekt aus einer Quelle abzurufen, und es funktionierte im Testcode, aber nicht im Quellcode. Zum weiteren Testen habe ich einen Codeblock aus dem Test kopiert und in den Quellcode eingefügt. Dann habe ich sofort die JUnit-Zeilen entfernt, sodass ich nur wusste, wie der Test das Objekt hineingezogen hat. Dann würde mein Code plötzlich nicht mehr kompiliert.
Das Problem war, dass Eclipse, als ich den Code ablegte, alle Klassen hilfreich auflöste, sodass ich JUnit-Aufrufe von meinem src-Code bekam, was nicht richtig war. Ich hätte die Warnungen oben über nicht verwendete Importe bemerken sollen, aber ich habe es versäumt, sie zu sehen.
Nachdem ich die nicht verwendeten JUnit-Importe in meiner src-Datei entfernt hatte, funktionierte alles wunderbar.
quelle
Auch ich hatte das gleiche Problem wie unten gezeigt.
Um das Problem zu beheben, werden die folgenden Zeilen zum
dependencies
Abschnitt in build.gradle auf App-Ebene hinzugefügt.Gradle Build wurde dann nach der Warnung gemeldet.
Um diese Warnung zu beheben, wird der folgenden Abschnitt zur App-Ebene build.gradle hinzugefügt.
quelle
Finden Sie die eine Lösung für diesen Fehler, wenn Sie Code in src / main / java Utils haben
<dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.9.1</version> </dependency>
quelle
Das Ändern der Junit-Version hat dies für mich behoben. Scheint, als hätte Version 3.8.1 in meinem Fall nicht funktioniert. Problem beim Ändern auf 4.12 behoben
quelle
Standardmäßig durchsucht maven diese Ordner nach Java- bzw. Testklassen - src / main / java und src / test / java
Wenn der src mit den Testklassen unter source angegeben wird und der Bereich für die Junit-Abhängigkeit in pom.xml als test angegeben wird, wird org.unit von maven nicht gefunden.
quelle