Maven 3 en JUnit 4 compilatieprobleem: pakket org.junt bestaat niet

Ik probeer een eenvoudig Java-project te bouwen met Maven. In mijn pom-bestand verklaar ik JUnit 4.8.2 als de enige afhankelijkheid. Toch dringt Maven aan op het gebruik van JUnit-versie 3.8.1. Hoe los ik het op?

Het probleem manifesteert zich in een compilatiefout: “package org.junt bestaat niet”. Dit komt door de import-instructie in mijn broncode. De juiste pakketnaam in JUnit 4.* is org.junt.* terwijl het in versie 3.* junit.framework is.*

Ik denk dat ik documentatie over de oorzaak van het probleem heb gevonden op http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.htmlmaar het advies daar lijkt bedoeld te zijn voor Maven-experts. Ik begreep niet wat ik moest doen.


Antwoord 1, autoriteit 100%

Gewoon om een antwoord te hebben met de complete oplossing om de bezoekers te helpen:

Het enige wat je hoeft te doen is de junit-afhankelijkheid toe te voegen aan pom.xml. Vergeet de <scope>test</scope>

niet

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>

Antwoord 2, autoriteit 85%

@Dennis Roberts: Je had helemaal gelijk: mijn testklas bevond zich in src/main/java. Ook de waarde van het “scope”-element in de POM voor JUnit was “test”, hoewel het zo hoort te zijn. Het probleem was dat ik slordig was geweest bij het maken van de testklasse in Eclipse, waardoor het werd gemaakt in src/main/java in plaats van src/test/java. Dit werd gemakkelijker te zien in Eclipse’s Project Explorer-weergave na het uitvoeren van “mvn eclipse:eclipse”, maar door jouw opmerking zag ik het als eerste. Bedankt.


Antwoord 3, autoriteit 35%

mijn probleem was een regel in mijn pom.xmlik had de regel <sourceDirectory>${basedir}/src</sourceDirectory>het verwijderen van deze regel maven gemaakt gebruik mappen met normale structuur die mijn probleem oplossen


Antwoord 4, autoriteit 22%

het verwijderen van de scope-tag in pom.xml voor junit werkte..


Antwoord 5, autoriteit 9%

Ik had hetzelfde probleem. Het enige wat ik deed was – Uit het pom.xml-bestand heb ik de afhankelijkheid voor junit 3.8 verwijderd en een nieuwe afhankelijkheid voor junit 4.8 toegevoegd. Daarna heb ik maven clean en maven install gedaan. Het deed de truc. Om te verifiëren ging ik na de installatie van maven naar project->properties-build path->maven-afhankelijkheden en zag dat nu de junit 3.8 jar is verdwenen!, in plaats daarvan wordt junit 4.8 jar weergegeven. koel!!. Nu loopt mijn test als een zonnetje.. Ik hoop dat dit op de een of andere manier helpt..


Antwoord 6, autoriteit 9%

Voeg deze afhankelijkheid toe aan uw pom.xml-bestand:

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>

Antwoord 7, autoriteit 7%

Mijn geval was een simpele vergissing.

Ik heb de JUnit-afhankelijkheidsverklaring in <dependencies>geplaatst onder het knooppunt <dependencyManagement/>in plaats van <project/>in het POM-bestand. De juiste manier is:

<project>
<!-- Other elements -->
    <dependencies>
    <!-- Other dependencies-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>
<project>

Antwoord 8, autoriteit 7%

Hoe heb je de versie aangegeven?

<version>4.8.2</version>

Let op de betekenis van deze verklaring die wordt uitgelegd hier (zie OPMERKINGEN):

Bij het declareren van een “normale” versie zoals 3.8.2 voor Junit, wordt dit intern weergegeven als “alles toestaan, maar liever 3.8.2.” Dit betekent dat wanneer een conflict wordt gedetecteerd, Maven de conflictalgoritmen mag gebruiken om de beste versie te kiezen. Als u [3.8.2] opgeeft, betekent dit dat alleen 3.8.2 wordt gebruikt en niets anders.

Probeer versie 4.8.2 te forceren

<version>[4.8.2]</version>

Omdat je geen andere afhankelijkheden in je project hebt, zouden er geen conflicten mogen zijn die je probleem veroorzaken. De eerste declaratie zou voor u moeten werken als u deze versie uit een repository kunt halen. Erf je afhankelijkheden van een ouderpom?


Antwoord 9, autoriteit 6%

Ik had mijn bestanden op de juiste plaatsen en door gewoon <scope>test</scope>uit de JUnit-afhankelijkheidsvermelding te verwijderen, werd het probleem opgelost (ik gebruik JUnit 4.12). Ik geloof dat met de testscope de afhankelijkheid gewoon werd genegeerd tijdens de compilatiefase. Nu werkt alles, zelfs als ik mvn testaanroep.


Antwoord 10, autoriteit 6%

Ik had een soortgelijk probleem in een “test-utils”-project (toevoegen van functies, regels en beweringen aan JUnit) onderliggend aan een bovenliggend project dat afhankelijkheden injecteerde.
De klasse die afhankelijk was van het pakket org.junit.rules was in src/main/java.

Dus ik heb een afhankelijkheid van junit toegevoegd zonder testscope en het probleem is opgelost:

pom.xml van het test-util project :

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
</dependency>

pom.xml van het bovenliggende project :

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <scope>test</scope>
</dependency>

Antwoord 11, autoriteit 2%

Ik had een soortgelijk probleem waarbij Eclipse mijn code prima compileerde, maar Maven faalde elke keer bij het compileren van de tests, ondanks het feit dat JUnit in mijn lijst met afhankelijkheden stond en de tests in /src/test/java/ stonden.

In mijn geval had ik de verkeerde versie van JUnit in mijn lijst met afhankelijkheden. Ik schreef JUnit4-tests (met annotaties) maar had JUnit 3.8.x als mijn afhankelijkheid. Tussen versie 3.8.x en 4 van JUnit hebben ze de pakketnaam gewijzigd van junit.framework in org.junit. Daarom onderbreekt Maven nog steeds het compileren met een JUnit-jar.

Ik weet nog steeds niet helemaal zeker waarom Eclipse succesvol is gecompileerd. Het moet zijn eigen kopie van JUnit4 ergens in het klassenpad hebben. Ik hoop dat deze alternatieve oplossing nuttig is voor mensen. Ik kwam tot deze oplossing na het volgen van Arthur’s link hierboven.


Antwoord 12, autoriteit 2%

Ik kwam ook dit probleem tegen – ik probeerde een object uit een bron te halen en het werkte in de testcode, maar niet in de src-code. Om verder te testen, kopieerde ik een codeblok uit de test en liet ik het in de src-code vallen, waarna ik onmiddellijk de JUnit-regels verwijderde, dus ik had net hoe de test het object binnenhaalde. Dan opeens wil mijn code niet compileren.
Het probleem was dat toen ik de code liet vallen, Eclipse alle klassen behulpzaam oploste, dus ik kreeg JUnit-aanroepen vanuit mijn src-code, wat niet correct was. Ik had de waarschuwingen bovenaan moeten zien over ongebruikte importen, maar ik vergat ze te zien.
Nadat ik de ongebruikte JUnit-importen in mijn src-bestand had verwijderd, werkte het allemaal prachtig.


Antwoord 13, autoriteit 2%

Ik had ook hetzelfde probleem als hieronder weergegeven.

Om het probleem op te lossen, zijn onderstaande regels toegevoegd aan de sectie dependenciesin de app-niveau build.gradle.

compile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test:runner:0.5'

Gradle build vervolgens gerapporteerd na waarschuwing.

Warning:Conflict with dependency 'com.android.support:support-annotations'. 
Resolved versions for app (25.1.0) and test app (23.1.1) differ. 
See http://g.co/androidstudio/app-test-app-conflict for details.

Om deze waarschuwing op te lossen, is de volgende sectie toegevoegd aan build.gradle op app-niveau.

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-annotations:23.1.1'
    }
}

Antwoord 14

Vind de enige oplossing voor deze fout als je code hebt in src/main/java Utils

<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.9.1</version>
</dependency>

Antwoord 15

Het wijzigen van de junit-versie loste dit voor mij op. Het lijkt erop dat versie 3.8.1 in mijn geval niet werkte. Probleem opgelost bij het wijzigen naar 4.12


Antwoord 16

Maven kijkt standaard naar deze mappen voor respectievelijk Java- en testklassen –
src/main/java en src/test/java

Als de src is gespecificeerd met de testklassen onder broncode en het bereik voor junit-afhankelijkheid in pom.xml wordt vermeld als test – org.unit wordt niet gevonden door maven.

Other episodes