[英]Scala 2.11 -> 2.12 — Unit test fails in sbt, works in IntelliJ
我有一個正在Scala 2.11下工作的項目,並且我正在升級它以使用Scala 2.12。 我有一個單元測試,當我通過sbt在命令行上運行它時,它失敗了,但是當我通過IntelliJ IDEA運行它時,它運行良好。
我得到的錯誤是:
java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
該測試是Java中的JUnit測試,它調用用Scala編寫的代碼。
單元測試中的違規行:
String paramsJson = adapter.sendReadyMessage();
sendReadyMessage
方法(也是Java)嘗試創建ReadyMessage
:
ReadyMessage rm = new ReadyMessage(timestamp);
ReadyMessage
只是一個Scala案例類
case class ReadyMessage(Timestamp: String) extends ToJson
ToJson
是一個提升JSON助手特性,它封裝了JSON生成:
import net.liftweb.json.{DefaultFormats, Serialization}
trait ToJson {
private implicit val formats = DefaultFormats
def toJson = Serialization.write(this)
}
該錯誤似乎發生在case class ReadyMessage
行上。 ToJson
塊用於上下文。
就像我說的那樣,當我從IntelliJ中運行它時,它就可以工作。 我在sbt下運行時失敗。 當它是sbt中所有測試的一部分時,它將失敗,而當我在sbt中單獨運行它時,它將失敗。
除了粘貼整個build.sbt文件之外,我不確定在此添加其他有用的信息。 似乎是某種形式的版本沖突,但我仔細檢查並更新了所有可以找到的軟件版本號。
我意識到這個問題所涉及的問題可能比通過SO合理調試可能更為復雜。 但是,即使“確保已在build.sbt中更新了XX”響應也很有幫助。
答案竟然像問題本身一樣令人討厭。
在搜索了我的構建很多小時之后,我意識到子項目中存在一個失敗的“ lib”目錄。 我打開了它,果然包含舊版本的Scala和其他一些庫。 我刪除了這些文件,並確保libraryDependencies處理了它們,現在一切構建和測試都很好。
感謝大家讓我參加“這是Scala版本不匹配”培訓。 孩子們,讓這成為一個警示性的故事。 將托管和非托管依賴項混合使用,后果自負。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.