Почему" не удалось найти неявную " ошибку в 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
Несколько Обходных Путей:
- удалить проблемные зависимости из структуры проекта - > модули
- исключить библиотеки в sbt.
- используйте ту же версию.
- попробуйте с последним 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"
)
повторно импортирован мой проект (как чистый и пакет не работал)
и тестовые классы.