Próbuję zbudować prosty projekt Java za pomocą Maven. W moim pliku pom deklaruję JUnit 4.8.2 jako jedyną zależność. Wciąż Maven nalega na używanie JUnit w wersji 3.8.1. Jak to naprawić?
Problem objawia się niepowodzeniem kompilacji: „pakiet org.junit nie istnieje”. Dzieje się tak z powodu instrukcji importu w moim kodzie źródłowym. Prawidłowa nazwa pakietu w JUnit 4. * to org.junit. *, Natomiast w wersji 3. * to junit.framework. *
Wydaje mi się, że znalazłem dokumentację dotyczącą źródła problemu na http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html, ale ta rada wydaje się być przeznaczona dla ekspertów Maven. Nie rozumiem, co mam robić.
Odpowiedzi:
Wystarczy, że otrzymam odpowiedź z kompletnym rozwiązaniem, które pomoże odwiedzającym:
Wszystko, co musisz zrobić, to dodać zależność junit do
pom.xml
. Nie zapomnij o<scope>test</scope>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
źródło
@Dennis Roberts: Miałeś absolutną rację: moja klasa testowa znajdowała się w src / main / java. Również wartością elementu „scope” w POM dla JUnit była wartość „test”, chociaż tak powinno być. Problem polegał na tym, że byłem niechlujny podczas tworzenia klasy testowej w Eclipse, co spowodowało, że została utworzona w src / main / java zamiast src / test / java. Stało się to łatwiejsze do zobaczenia w widoku Eksploratora projektów Eclipse po uruchomieniu „mvn eclipse: eclipse”, ale Twój komentarz sprawił, że zobaczyłem go jako pierwszy. Dzięki.
źródło
mój problem był wiersz w moim
pom.xml
miałem linię<sourceDirectory>${basedir}/src</sourceDirectory>
usunięcie tej linii sprawiło Maven regularne foldery strukturę, która rozwiązuje mój problemźródło
usunięcie tagu zakresu w pom.xml dla junit zadziałało.
źródło
Miałem ten sam problem. Wszystko, co zrobiłem, to - z pliku pom.xml usunąłem zależność dla junit 3.8 i dodałem nową zależność dla junit 4.8. Potem zrobiłem Maven Clean i Maven Install. To załatwiło sprawę. Aby to sprawdzić, po instalacji mavena przeszedłem project-> properties-build path-> maven dependencies i zobaczyłem, że teraz junit 3.8 jar zniknął!, Zamiast tego pojawia się junit 4.8 jar. fajne!!. Teraz mój test działa jak urok .. Mam nadzieję, że to jakoś pomoże ..
źródło
Dodaj tę zależność do swojego
pom.xml
pliku: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>
źródło
Mój przypadek był prostym przeoczeniem.
Włożyłem zależności JUnit deklaracji wnętrze
<dependencies>
pod<dependencyManagement/>
węzłem zamiast<project/>
w pliku POM. Prawidłowy sposób to:<project> <!-- Other elements --> <dependencies> <!-- Other dependencies--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies> <project>
źródło
Jak zadeklarowałeś wersję?
<version>4.8.2</version>
Bądź świadomy znaczenia tej deklaracji wyjaśnionej tutaj (patrz UWAGI) :
Podczas deklarowania „normalnej” wersji, takiej jak 3.8.2 dla Junit, wewnętrznie jest to reprezentowane jako „zezwalaj na wszystko, ale preferuj 3.8.2”. Oznacza to, że w przypadku wykrycia konfliktu Maven może użyć algorytmów konfliktu, aby wybrać najlepszą wersję. Jeśli podasz [3.8.2], oznacza to, że zostanie użyty tylko 3.8.2 i nic więcej.
Aby wymusić użycie wersji 4.8.2 spróbuj
<version>[4.8.2]</version>
Ponieważ nie masz żadnych innych zależności w swoim projekcie, nie powinno być żadnych konfliktów, które powodują Twój problem. Pierwsza deklaracja powinna zadziałać, jeśli możesz pobrać tę wersję z repozytorium. Czy dziedziczysz zależności od rodzica pom?
źródło
<version>[4.8.2,)</version>
byłoby lepiej wymusić przynajmniej tę wersję?Moje pliki znajdowały się we właściwych miejscach i samo usunięcie
<scope>test</scope>
z wpisu zależności JUnit rozwiązało problem (używam JUnit 4.12). Uważam, że w przypadkutest
zakresu zależność była po prostu ignorowana podczas fazy kompilacji. Teraz wszystko działa, nawet gdy dzwonięmvn test
.źródło
Miałem dość podobny problem w projekcie "test-utils" (dodawanie funkcji, reguł i asercji do JUnit) potomkiem projektu nadrzędnego wstrzykującego zależności. Klasa zależna od pakietu org.junit.rules znajdowała się w katalogu src / main / java.
Dodałem więc zależność od junit bez zakresu testowego i rozwiązałem problem:
pom.xml projektu test-util:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency>
pom.xml projektu nadrzędnego:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>
źródło
Miałem podobny problem z Eclipse kompilacją mojego kodu, ale Maven zawiódł podczas kompilowania testów za każdym razem, mimo że JUnit był na mojej liście zależności, a testy były w / src / test / java /.
W moim przypadku na mojej liście zależności miałem złą wersję JUnit. Napisałem testy JUnit4 (z adnotacjami), ale miałem JUnit 3.8.x jako moją zależność. Pomiędzy wersją 3.8.x a 4 JUnit zmienili nazwę pakietu z junit.framework na org.junit, dlatego Maven wciąż przerywa kompilację przy użyciu JUnit jar.
Nadal nie jestem do końca pewien, dlaczego Eclipse zostało pomyślnie skompilowane. Musi mieć swoją własną kopię JUnit4 gdzieś w ścieżce klas. Mam nadzieję, że to alternatywne rozwiązanie jest przydatne dla ludzi. Dotarłem do tego rozwiązania po skorzystaniu z linku Arthura powyżej.
źródło
Napotkałem również ten problem - próbowałem pobrać obiekt ze źródła i działał on w kodzie testowym, ale nie w kodzie źródłowym. Aby dalej testować, skopiowałem blok kodu z testu i wrzuciłem go do kodu src, a następnie natychmiast usunąłem wiersze JUnit, więc po prostu miałem jak test wciąga obiekt. Wtedy nagle mój kod nie mógł się skompilować.
Problem polegał na tym, że kiedy upuściłem kod, Eclipse pomogło rozwiązać wszystkie klasy, więc miałem wywołania JUnit pochodzące z mojego kodu src, co nie było właściwe. Powinienem był zauważyć ostrzeżenia u góry o niewykorzystanym imporcie, ale ich nie widziałem.
Po usunięciu nieużywanych importów JUnit z mojego pliku src wszystko działało pięknie.
źródło
Ja też miałem ten sam problem, jak pokazano poniżej.
Aby rozwiązać ten problem, poniższe wiersze zostały dodane do
dependencies
sekcji w pliku build.gradle na poziomie aplikacji.Kompilacja Gradle zgłosiła następujące ostrzeżenie.
Aby rozwiązać to ostrzeżenie, do pliku build.gradle na poziomie aplikacji dodano następującą sekcję.
źródło
Znajdź jedno rozwiązanie tego błędu, jeśli masz kod w src / main / java Utils
<dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.9.1</version> </dependency>
źródło
Zmiana wersji junit rozwiązała ten problem. Wygląda na to, że wersja 3.8.1 nie działała w moim przypadku. Problem rozwiązany po zmianie na 4.12
źródło
Domyślnie maven przegląda te foldery odpowiednio pod kątem klas java i testowych - src / main / java i src / test / java
Gdy src jest określony z klasami testowymi w źródle, a zakres zależności junit w pom.xml jest określony jako test - maven nie znajdzie org.unit.
źródło