it-roy-ru.com

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

Я пытаюсь построить простой 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 эксперты. Я не понял, что делать.

66
Arthur Huxley

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

39
Arthur Huxley

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

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

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
42
Renato Lochetti

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

16
oak

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

14
Manishankar Parameswaran

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

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

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

4
FrVaBe

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

3
Steer360

Добавьте эту зависимость в ваш файл 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>
3
tokhi

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

2
mljrg

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

Я поместил объявление зависимостей 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
White hawk

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

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

1
LConrad

У меня была похожая проблема с компиляцией моего кода в 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 где-нибудь в пути к классам. Надеюсь, что это альтернативное решение полезно для людей. Я достиг этого решения после перехода по ссылке Артура выше.

1
BrionS

Изменение версии джунита исправило это для меня. Похоже, версия 3.8.1 не работает в моем случае. Исправлена ​​ошибка при изменении на 4.12

0
Vamsi Vegesna

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

 enter image description here

Для решения этой проблемы в раздел dependencies на уровне приложения build.gradle добавлены следующие строки.

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

Затем Gradle build сообщил следующее предупреждение. 

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'
    }
}
0
MNS

Найдите одно решение для этой ошибки, если у вас есть код в src/main/Java Utils

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