今日、.ivy キャッシュをクリアし、プロジェクトの出力ターゲットをクリーンアップしました。それ以来、SBT でテストを実行したり、Scala IDE で編集したりすると、非常に奇妙な動作をするようになりました。
以下を考えると:
package com.abc.rest
import com.abc.utility.IdTLabel
次のエラーが表示されます。
object utility is not a member of package com.abc.rest.com.abc
が 2 回繰り返されていることに注意してくださいcom.abc
。つまり、コンパイラはインポートを実行するときに現在のパッケージのコンテキストを使用しているように見えます (おそらくこれを実行するはずですが、これまで気付かなかった)。
また、パッケージcom.abc
内のどこからでもcom.abc.rest
(フル パスを使用しても) クラスにアクセスしようとすると、コンパイラは型が見つからないと文句を言います。
親パッケージのファイルを含めようとしたときにのみエラーが発生するようです。私が奇妙だと思うのは、私のコードが以前は機能していたことです。プロジェクトと ivy キャッシュをクリーンアップした後に発生し始めたので、新しいバージョンのコンパイラは以前のものよりも厳密になっている可能性があります。
私が間違っている可能性があること、またはこれをトラブルシューティングする方法についていくつかのアイデアが欲しいです。
アップデート:
最初に親クラスをインポートしてから現在のパッケージを定義することで、問題は解消されます。
import com.abc.utility.IdTLabel
import com.abs._
package com.abc.rest {
// Define classes belonging to com.abc.rest here
}
したがって、これは機能しますが、なぜ逆に機能し、その後機能しなくなったのか、そしてどうすればそれを修正できるのかを知りたいです。よく見てみると、親パッケージ内のどこにも com という名前のパッケージ、オブジェクト、または特性が見つかりませんでした。
ワークシートに関する更新:
同じパッケージに属する Scala ワークシートは同じスコープを共有します。ワークシートはサンドボックス化されていません。ワークシートはプロジェクトを見ることができ、プロジェクトはワークシートを見ることができます。したがって、ワークシート ファイル内に作成するすべての「テスト」オブジェクト、特性、およびクラスは、プロジェクトの残りの部分でも表示されます。
私は非常に多くのワークシートを持っているので、どこで問題が発生したかを確認しようとさえしませんでした.それらをすべて独自のパッケージに移動しただけで、魔法のように問題はなくなりました.
したがって、その日の教訓は次のとおりです。ワークシート内に何かを作成すると、ワークシートの外からも見えるようになります。
とにかく、この新たに発見された知識は役に立ちます。つまり、「興味深い」ものはすべてワークシート内で構築、監視、微調整でき、プロジェクトの残りの部分は実際にそれを使用できます。実際にはかなりクールです。
sbt clean
アイビーのキャッシュをクリーンアップすることで、以前は隠されていた問題がどのように浮き彫りになったかを考えるのは興味深いことですが、それはまた別の話です....