Почему" не удалось найти неявную " ошибку в Scala + Intellij + ScalaTest + Scalactic, но не из sbt

у меня этот код работа 100% от sbt , выполняя sbt test но бросьте ошибку компиляции в IntelliJ Idea.

import org.scalatest.{BeforeAndAfter, FunSuite, GivenWhenThen}

class SimpleTest extends FunSuite with GivenWhenThen with BeforeAndAfter {
  test("Simple Test") {
    Given("Why this error?")
    assert("ok" === "ok")
  }
}

ошибка:

Error:(5, 10) could not find implicit value for parameter pos: org.scalactic.source.Position
    Given("Why this error?")
Error:(5, 10) not enough arguments for method Given: (implicit pos: org.scalactic.source.Position)Unit.
Unspecified value parameter pos.
    Given("Why this error?")
Error:(6, 11) could not find implicit value for parameter prettifier: org.scalactic.Prettifier
    assert("ok" === "ok")
Error:(6, 11) macro applications do not support named and/or default arguments
    assert("ok" === "ok")
Error:(6, 11) not enough arguments for macro method assert: (implicit prettifier: org.scalactic.Prettifier, implicit pos: org.scalactic.source.Position)org.scalatest.Assertion.
Unspecified value parameters prettifier, pos.
    assert("ok" === "ok")
Error:(4, 23) could not find implicit value for parameter pos: org.scalactic.source.Position
  test("Simple Test") {

после обновления и перезагрузки, как предложил:

Error:(6, 11) exception during macro expansion: 
java.lang.NoSuchMethodError: org.scalactic.BooleanMacro.genMacro(Lscala/reflect/api/Exprs$Expr;Ljava/lang/String;Lscala/reflect/api/Exprs$Expr;)Lscala/reflect/api/Exprs$Expr;
    at org.scalatest.AssertionsMacro$.assert(AssertionsMacro.scala:34)
    assert("ok" === "ok")

Я использую:

IntelliJ IDEA 2016.3.2
Build #IU-163.10154.41, built on December 21, 2016

scalaVersion := "2.11.0",
"org.scalactic" %% "scalactic" % "3.0.1" % "test",
"org.scalatest" %% "scalatest" % "3.0.1" % "test"

заметки: - Используя File -> Invalidate Caches / Restart не устраняет проблему - Пример, который воспроизводит ошибку: пример в Github

5 ответов


обходные внизу Ответ. ;)

эта проблема связана с этим списком ошибок:

проблема в том, что в проекте есть зависимости, которые используют, используя тестовую область, другие версии scalatest и scalactic.

идея IntelliJ смешивание области компиляции и области тестирования, но SBT работает правильно. Команда IntelliJ Idea заявила в ошибке, что они работают в этом.

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

Примечания:

@justin-kaeser назначен и работает, чтобы исправить это. Thx!

много улучшений, связанных с плагином Scala в этом последнем превью.

пример для воспроизведения ошибки:https://github.com/angelcervera/idea-dependencies-bug

Несколько Обходных Путей:

  1. удалить проблемные зависимости из структуры проекта - > модули
  2. исключить библиотеки в sbt.
  3. используйте ту же версию.
  4. попробуйте с последним EAP:https://www.jetbrains.com/idea/nextversion/

возможно, некоторые зависимости транзитивно включают несовместимые версии Scalactic или Scalatest в области компиляции, которые также включены в область тестирования.

вы можете проверить это в структуре проекта на вкладке Параметры проекта / модули / зависимости и проанализировать его более подробно с помощью sbt-dependency-graph плагин.

СБТ выполняет выселения зависимость, IntelliJ не (вопрос), которая может вызвать дополнительные проблемы при компиляции из IDE. Если sbt-dependency-graph показывает, что конфликтующие версии вытесняются, то это, вероятно, экземпляр этой проблемы.

обходной путь: когда вы найдете оскорбительную транзитивную зависимость, исключите ее из корневой зависимости в своей сборке.sbt. Например:

"org.apache.spark" %% "spark-core" % "2.1.0" % "provided" exclude("org.scalatest", "scalatest_2.11")

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

could not find implicit value for parameter prettifier: org.scalactic.Prettifier

устранение :

In IntelliJ press Ctrl+Alt+Shift+S -> Modules -> Dependencies -> Search for 
org.scalactic:3.0.0.jar (Test scope) and most probably there would be 
another version as 2.x.x in compile scope. Right click on 2.x.x and select 
EDIT and then choose the 3.0.0 version in compile scope, and apply new 
settings.

P.S. Depending on your case there may be only one entry but make sure you 
use 3.0.0 in compile scope to get rid of that weird error.

У меня была аналогичная проблема.

для меня, самый простой способ решить эту проблему, просто удалением .idea папка и повторный импорт проекта.


как говорится в выпуск 170, это может быть проблема с путаница зависимости spark-testing-base.

убедитесь, что вы не смешиваете зависимость.

у меня были следующие зависимости

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.11" % "2.1.0",
  "org.apache.spark" % "spark-sql_2.11" % "2.1.0",
  "org.apache.spark" % "spark-streaming_2.11" % "2.1.0",
  "org.apache.spark" % "spark-mllib_2.11" % "2.1.0",
  "com.holdenkarau" %% "spark-testing-base" % "2.1.0_0.8.0" % "test",
  "org.scalatest" % "scalatest_2.11" % "2.1.0" % "test",
  "edu.stanford.nlp" % "stanford-corenlp" % "3.8.0",
  "edu.stanford.nlp" % "stanford-corenlp" % "3.8.0" classifier "models"
)

и когда я пытался запустить тестовые классы, я получал

Error:(32, 14) could not find implicit value for parameter pos: org.scalactic.source.Position test("lsi"){ Error:(32, 14) not enough arguments for method test: (implicit pos: org.scalactic.source.Position)Unit. Unspecified value parameter pos. test("lsi"){ ..........

затем я меняю в зависимости

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.11" % "2.2.0",
  "org.apache.spark" % "spark-sql_2.11" % "2.2.0",
  "org.apache.spark" % "spark-streaming_2.11" % "2.2.0",
  "org.apache.spark" % "spark-mllib_2.11" % "2.2.0",
  "com.holdenkarau" %% "spark-testing-base" % "2.2.0_0.8.0" % "test",
  "org.scalatest" % "scalatest_2.11" % "2.2.2" % "test",
  "edu.stanford.nlp" % "stanford-corenlp" % "3.8.0",
  "edu.stanford.nlp" % "stanford-corenlp" % "3.8.0" classifier "models"
)

повторно импортирован мой проект (как чистый и пакет не работал)

и тестовые классы.