このコードはsbtから100%動作し、sbt test
を実行していますが、IntellijIdeaでコンパイルエラーをスローします。
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の例
応答の下部にある回避策。 ;)
この問題は、このバグのリストに関連しています。
問題は、テストスコープを使用して、他のバージョンのscalatestおよびscalacticを使用しているプロジェクトに依存関係があることです。
IntelliJ Ideaはコンパイルスコープとテストスコープを混合していますが、SBTは正しく機能しています。 IntelliJ Ideaチームは、BUGで、これに取り組んでいると述べました。
現在のところ、私の回避策は、他のライブラリがテストに使用しているのと同じ古いバージョンに移行しています。
@ justin-kaeserが割り当てられ、これを修正するために取り組んでいます。どうも!
その最新のプレビューのScalaプラグインに関連する多くの改善。
エラーを再現する例: https://github.com/angelcervera/idea-dependencies-bug
一部の依存関係は、互換性のないバージョンのScalacticまたはScalatestをコンパイルスコープに一時的に含めている可能性があります。これらもテストスコープに含まれています。
これは、[プロジェクト設定]/[モジュール]/[依存関係]タブの[プロジェクト構造]で確認し、 sbt-dependency-graph プラグインを使用してより詳細に分析できます。
ただし、SBTは、IntelliJが実行しない依存関係の削除を実行します( issue )。これにより、IDEからコンパイルするときに追加の問題が発生する可能性があります。 sbt-dependency-graphが、競合するバージョンが削除されたことを示している場合、それはおそらくこの問題のインスタンスです。
回避策:問題のある推移的な依存関係を見つけたら、build.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.
issue 17 で述べたように、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"
)
_
プロジェクトを再インポートしました(クリーンでパッケージが機能しなかったため)
そして、テストクラスに合格しました。
同様の問題がありました。
私にとって、これを解決する最も簡単な方法は、.idea
フォルダーを削除してプロジェクトを再インポートすることでした。
また、プロジェクトのJDKがJDK 8に設定されていることを確認してください。 Scalaは、現在IntelliJのデフォルトであるJDK11と互換性がありません。
同じことがMavenでも起こりました。
私はすべてがうまくいくプロジェクトを持っていました。最新のIntelliJアップグレード後、JDK設定を忘れました。私は答えのすべてのステップを実行しましたが、どれも役に立ちませんでした。最後の手段として、IntelliJを最初から再インストールし、クリーンなリポジトリ(.ideaフォルダーまたは.imlファイルなし)をチェックアウトしましたが、...役に立ちませんでした。その後、プロジェクトを再度セットアップしているときに、JDK 11に気づきました。ベルが鳴り、JDK 8が追加され、そこに行きます。テストは再び緑色になります。