Проблема компиляции Maven 3 и JUnit 4: пакет org.junit не существует - PullRequest
69 голосов
/ 01 мая 2011

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

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

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

Ответы [ 16 ]

44 голосов
/ 11 июля 2013

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

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

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
42 голосов
/ 17 мая 2011

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

18 голосов
/ 07 марта 2014

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

14 голосов
/ 19 января 2015

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

4 голосов
/ 02 августа 2013

Добавьте эту зависимость в ваш 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>
4 голосов
/ 04 мая 2011

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

<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>

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

3 голосов
/ 29 сентября 2012

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

2 голосов
/ 21 ноября 2017

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

Поэтому я добавил зависимость от junit без области тестирования, и это решило проблему:

pom.xmlпроекта test-util:

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

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

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <scope>test</scope>
</dependency>
2 голосов
/ 13 июня 2017

Мой случай был простым упущением.

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

<project>
<!-- Other elements -->
    <dependencies>
    <!-- Other dependencies-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>
<project>
2 голосов
/ 22 февраля 2017

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

...