Подтвердить что ты не робот

Проблема с Maven 3 и JUnit 4: пакет org.junit не существует

Я пытаюсь создать простой Java-проект с Maven. В моем pom файле я объявляю JUnit 4.8.2 единственной зависимостью. Тем не менее Maven настаивает на использовании JUnit версии 3.8.1. Как это исправить?

Проблема проявляется в сбое компиляции: "package org.junit не существует". Это из-за инструкции import в моем исходном коде. Правильное имя пакета в JUnit 4. * является org.junit. * Пока в версии 3. * это junit.framework. *

Я думаю, что нашел документацию в корне проблемы http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html, но совет, похоже, предназначен для экспертов Maven. Я не понимал, что делать.

4b9b3361

Ответ 1

@Dennis Roberts: Вы были абсолютно правы: мой тестовый класс находился в src/main/java. Также значение элемента "scope" в POM для JUnit было "test", хотя так оно и должно быть. Проблема заключалась в том, что я был неаккуратным при создании тестового класса в Eclipse, в результате чего он был создан в src/main/java insted из src/test/java. Это стало легче увидеть в представлении Project Eclipse Project Explorer после запуска "mvn eclipse: eclipse", но ваш комментарий был тем, что заставило меня увидеть его первым. Спасибо.

Ответ 2

Просто, чтобы получить ответ с полным решением, чтобы помочь посетителям:

Все, что вам нужно сделать, это добавить зависимость junit к pom.xml. Не забывайте <scope>test</scope>

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

Ответ 3

моя проблема была в моей строке pom.xml, у меня была строка <sourceDirectory>${basedir}/src</sourceDirectory>, удаляющая эту строку, из-за которой maven использовала обычные папки структуры, которые решают мою проблему

Ответ 4

удаление тега области в pom.xml для работы junit.

Ответ 5

Как вы объявили версию?

<version>4.8.2</version>

Помните о значении из этой декларации, пояснил здесь (см. ПРИМЕЧАНИЯ):

При объявлении "нормальной" версии, такой как 3.8.2 для Junit, внутренне это представляется как "разрешить что угодно, но предпочитает 3.8.2". Это означает, что при обнаружении конфликта Maven разрешает использовать алгоритмы конфликта для выбора лучшей версии. Если вы укажете [3.8.2], это означает, что будет использоваться только 3.8.2 и ничего больше.

Чтобы принудительно использовать версию 4.8.2, попробуйте

<version>[4.8.2]</version>

Поскольку у вас нет других зависимостей в вашем проекте, не должно быть конфликтов, вызывающих вашу проблему. Первое объявление должно работать для вас, если вы сможете получить эту версию из репозитория. Наследуете ли вы зависимости от родительского pom?

Ответ 6

У меня была та же проблема. Все, что я сделал, было: из файла pom.xml я удалил зависимость для junit 3.8 и добавил новую зависимость для junit 4.8. Тогда я сделал maven clean и maven install. Это сделал трюк. Чтобы проверить, после установки maven я отправил зависимости project- > properties-build path- > maven и увидел, что теперь junit 3.8 jar ушел!, а junit 4.8 jar указан. круто!!. Теперь мой тест проходит как шарм. Надеюсь, это поможет как-то...

Ответ 7

Добавьте эту зависимость в ваш файл pom.xml:

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>

Ответ 8

У меня была аналогичная проблема, когда Eclipse компилировал мой код просто отлично, но Maven потерпел неудачу при компиляции тестов каждый раз, несмотря на то, что JUnit был в моем списке зависимостей, а тесты были в /src/test/java/.

В моем случае у меня была неправильная версия JUnit в моем списке зависимостей. Я написал тесты JUnit4 (с аннотациями), но имел JUnit 3.8.x в качестве моей зависимости. Между версией 3.8.x и 4 из JUnit они изменили имя пакета с junit.framework на org.junit, поэтому Maven все еще ломает компиляцию с использованием JUnit jar.

Я все еще не совсем уверен, почему Eclipse успешно скомпилирован. У него должна быть своя копия JUnit4 где-то в пути к классам. Надеюсь, что это альтернативное решение полезно людям. Я достиг этого решения после того, как сказал выше ссылку Артура.

Ответ 9

Я также столкнулся с этой проблемой - я пытался вытащить объект из источника, и он работал в тестовом коде, но не в коде src. Чтобы продолжить тестирование, я скопировал блок кода из теста и опустил его в код src, а затем сразу же удалил строки JUnit, поэтому я просто использовал способ тестирования объекта. Тогда вдруг мой код не будет компилироваться.
Проблема заключалась в том, что когда я удалял код, Eclipse успешно разрешал все классы, поэтому у меня были вызовы JUnit, исходящие из моего кода src, что было неправильно. Я должен был заметить предупреждения наверху о неиспользуемых импортах, но я их не видел.
Как только я удалил неиспользуемый импорт JUnit в свой файл src, все это прекрасно работало.

Ответ 10

У меня были файлы в правильных местах, и просто удаление <scope>test</scope> из записи зависимостей JUnit решило проблему (я использую JUnit 4.12). Я считаю, что с областью test зависимость просто игнорировалась на этапе компиляции. Теперь все работает, даже когда я вызываю mvn test.

Ответ 11

Мое дело было простым недосмотром.

Я помещаю объявление зависимости JUnit внутри <dependencies> под <dependencyManagement/> node вместо <project/> в файле POM. Правильный способ:

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

Ответ 12

У меня была довольно схожая проблема в проекте "test-utils" (добавление функций, правил и утверждений к JUnit) дочернего элемента зависимых от родительского проекта. Класс, зависящий от пакета org.junit.rules, находился в src/main/java.

Итак, я добавил зависимость от junit без тестовой области и решил проблему:

pom.xml проекта тестового использования:

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

pom.xml родительского проекта:

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

Ответ 13

У меня тоже была такая же проблема, как показано ниже.

введите описание изображения здесь

Чтобы устранить проблему, строки ниже добавляются в раздел dependencies на уровне приложения build.gradle.

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

Gradle после этого сообщается о следующем предупреждении.

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.

Чтобы решить это предупреждение, следующий раздел добавляется в уровень приложения build.gradle.

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

Ответ 14

По умолчанию maven просматривает эти папки для классов java и test соответственно - src/main/java и src/test/java

Когда src указывается с тестовыми классами в источнике, а область зависимости junit в pom.xml упоминается как test - org.unit не будет найден maven.