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


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

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

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

15 60

15 ответов:

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

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

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

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

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

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

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

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

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

добавьте эту зависимость в свой pom.xml file:

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>

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

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

я помещаю объявление зависимости 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>

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

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

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

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

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

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

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

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

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

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

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

enter image description here

чтобы решить эту проблему, ниже строки добавляются в dependencies раздел в сборке уровня приложения.градля.

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.

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

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

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

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

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

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