2014-10-31 5 views
0

Я получаю следующую ошибку компиляции, используя HList от Slick2.0. Большую часть времени я получаю эту ошибку, но иногда я не получаю эту ошибку. Также обратите внимание, что я использую Scala IDE 3.0.3, и я не получаю никаких ошибок в Eclipse (что странно). Я даже пытался закрыть все процессы виртуальной машины Java перед запуском sbt clean compile, до сих пор я получаю ту же ошибку компиляции, хотя периодически:Scala Compiler 2.10.4 не удается скомпилировать модель HList с использованием Slick 2.0, но иногда она работает. Зачем?

$ sbt clean compile 
[info] Resolving org.scoverage#scalac-scoverage-plugin_2.10;0.99.5 ... 
[info] Done updating. 
[error] ...../app/models/example/Up.scala:77: type mismatch; 
[error] found : Option[scala.slick.collection.heterogenous.HCons[Long,scala.slick.collection.heterogenous.HCons[Option[java.sql.Timestamp],scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HCons[Boolean,scala.slick.collection.heterogenous.HNil.type]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] 
[error] required: Option[scala.slick.collection.heterogenous.syntax.::[Long,scala.slick.collection.heterogenous.syntax.::[Option[java.sql.Timestamp],scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.syntax.::[Boolean,scala.slick.collection.heterogenous.HNil.type]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] 
[error]   Up.unapply _ 
[error]    ^
[error] one error found 
[error] (compile:compile) Compilation failed 
[error] Total time: 20 s, completed 31 Oct, 2014 9:20:31 PM 

Файл в вопросе app/models/example/Up.scala является, как показано ниже:

package models.example 

import play.api.db.slick.Config.driver.simple._ 
import scala.slick.lifted.Tag 
import scala.slick.collection.heterogenous._ 
import java.sql.Timestamp 


class Up(
    val id: Long, val createdDate: Option[Timestamp], val c2: Boolean, 
    val c3: Boolean, val c4: Boolean, val c5: Boolean, val c6: Boolean, 
    val c7: Boolean, val c8: Boolean, val c9: Boolean, val c10: Boolean, 
    val c11: Boolean, val c12: Boolean, val c13: Boolean, val c14: Boolean, 
    val c15: Boolean, val c16: Boolean, val c17: Boolean, val c18: Boolean, 
    val c19: Boolean, val c20: Boolean, val c21: Boolean, val c22: Boolean, 
    val c23: Boolean, val c24: Boolean, val c25: Boolean, val c26: Boolean, 
    val c27: Boolean, val c28: Boolean, val c29: Boolean, val c30: Boolean, 
    val c31: Boolean, val c32: Boolean, val c33: Boolean, val c34: Boolean, 
    val c35: Boolean, val c36: Boolean, val c37: Boolean, val c38: Boolean, 
    val c39: Boolean, val c40: Boolean, val c41: Boolean, val c42: Boolean, 
    val c43: Boolean, val c44: Boolean, val c45: Boolean, val c46: Boolean) 

object Up { 
    def apply(
    id: Long, createdDate: Option[Timestamp], 
    c2: Boolean, c3: Boolean, c4: Boolean, c5: Boolean, 
    c6: Boolean, c7: Boolean, c8: Boolean, c9: Boolean, c10: Boolean, 
    c11: Boolean, c12: Boolean, c13: Boolean, c14: Boolean, c15: Boolean, 
    c16: Boolean, c17: Boolean, c18: Boolean, c19: Boolean, c20: Boolean, 
    c21: Boolean, c22: Boolean, c23: Boolean, c24: Boolean, c25: Boolean, 
    c26: Boolean, c27: Boolean, c28: Boolean, c29: Boolean, c30: Boolean, 
    c31: Boolean, c32: Boolean, c33: Boolean, c34: Boolean, c35: Boolean, 
    c36: Boolean, c37: Boolean, c38: Boolean, c39: Boolean, c40: Boolean, 
    c41: Boolean, c42: Boolean, c43: Boolean, c44: Boolean, c45: Boolean, 
    c46: Boolean 
) = new Up(
    id, createdDate, 
    c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, 
    c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, 
    c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, 
    c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, 
    c46 
) 

    def unapply(x: Up) = { 
    val data = x.id :: 
    x.createdDate :: 
    x.c2 :: x.c3 :: x.c4 :: x.c5 :: x.c6 :: x.c7 :: x.c8 :: x.c9 :: x.c10 :: 
    x.c11 :: x.c12 :: x.c13 :: x.c14 :: x.c15 :: x.c16 :: x.c17 :: x.c18 :: x.c19 :: 
    x.c20 :: x.c21 :: x.c22 :: x.c23 :: x.c24 :: x.c25 :: x.c26 :: x.c27 :: x.c28 :: 
    x.c29 :: x.c30 :: x.c31 :: x.c32 :: x.c33 :: x.c34 :: x.c35 :: x.c36 :: x.c37 :: 
    x.c38 :: x.c39 :: x.c40 :: x.c41 :: x.c42 :: x.c43 :: x.c44 :: x.c45 :: x.c46 :: 
    HNil 

    Option[data.type](data) 
    } 
} 

class Ups(tag: Tag) extends Table[Up](tag, "ups") { 
    def * = (
    id :: createdDate :: 
     c2 :: c3 :: c4 :: c5 :: c6 :: c7 :: c8 :: c9 :: c10 :: c11 :: c12 :: c13 :: 
     c14 :: c15 :: c16 :: c17 :: c18 :: c19 :: c20 :: c21 :: c22 :: c23 :: c24 :: 
     c25 :: c26 :: c27 :: c28 :: c29 :: c30 :: c31 :: c32 :: c33 :: c34 :: c35 :: 
     c36 :: c37 :: c38 :: c39 :: c40 :: c41 :: c42 :: c43 :: c44 :: c45 :: c46 :: 
     HNil).shaped <> (
    { 
     case x => Up(
     x(0), x(1), x(2), 
     x(3), x(4), x(5), x(6), x(7), x(8), x(9), x(10), x(11), x(12), x(13), 
     x(14), x(15), x(16), x(17), x(18), x(19), x(20), x(21), x(22), x(23), x(24), 
     x(25), x(26), x(27), x(28), x(29), x(30), x(31), x(32), x(33), x(34), x(35), 
     x(36), x(37), x(38), x(39), x(40), x(41), x(42), x(43), x(44), x(45), x(46) 
     ) 
    }, 
     { 
      Up.unapply _ 
     }) 

    def id = column[Long]("id", O.PrimaryKey, O.AutoInc, O.NotNull) 
    def createdDate = column[Option[Timestamp]]("created_date") 
    def c2 = column[Boolean]("c2") 
    def c3 = column[Boolean]("c3") 
    def c4 = column[Boolean]("c4") 
    def c5 = column[Boolean]("c5") 
    def c6 = column[Boolean]("c6") 
    def c7 = column[Boolean]("c7") 
    def c8 = column[Boolean]("c8") 
    def c9 = column[Boolean]("c9") 
    def c10 = column[Boolean]("c10") 
    def c11 = column[Boolean]("c11") 
    def c12 = column[Boolean]("c12") 
    def c13 = column[Boolean]("c13") 
    def c14 = column[Boolean]("c14") 
    def c15 = column[Boolean]("c15") 
    def c16 = column[Boolean]("c16") 
    def c17 = column[Boolean]("c17") 
    def c18 = column[Boolean]("c18") 
    def c19 = column[Boolean]("c19") 
    def c20 = column[Boolean]("c20") 
    def c21 = column[Boolean]("c21") 
    def c22 = column[Boolean]("c22") 
    def c23 = column[Boolean]("c23") 
    def c24 = column[Boolean]("c24") 
    def c25 = column[Boolean]("c25") 
    def c26 = column[Boolean]("c26") 
    def c27 = column[Boolean]("c27") 
    def c28 = column[Boolean]("c28") 
    def c29 = column[Boolean]("c29") 
    def c30 = column[Boolean]("c30") 
    def c31 = column[Boolean]("c31") 
    def c32 = column[Boolean]("c32") 
    def c33 = column[Boolean]("c33") 
    def c34 = column[Boolean]("c34") 
    def c35 = column[Boolean]("c35") 
    def c36 = column[Boolean]("c36") 
    def c37 = column[Boolean]("c37") 
    def c38 = column[Boolean]("c38") 
    def c39 = column[Boolean]("c39") 
    def c40 = column[Boolean]("c40") 
    def c41 = column[Boolean]("c41") 
    def c42 = column[Boolean]("c42") 
    def c43 = column[Boolean]("c43") 
    def c44 = column[Boolean]("c44") 
    def c45 = column[Boolean]("c45") 
    def c46 = column[Boolean]("c46") 
} 

object Ups { 
    val ups = TableQuery[Ups] 
    def get(id: Long)(implicit session: Session): Option[Up] = {ups.where(_.id === id).firstOption} 
} 

Я думал, что это может быть из-за ошибки в компиляторе Scala - https://issues.scala-lang.org/browse/SI-8146

Итак, я обновился до Scala 2.10.4, но все же получаю ошибки компиляции.

Содержание build.sbt:

name := "play-sample" 

version := "0.1-SNAPSHOT" 

scalaVersion in ThisBuild := "2.10.4" 

libraryDependencies ++= Seq(
    jdbc, 
    anorm, 
    cache, 
    "org.webjars" %% "webjars-play" % "2.2.0", 
    "org.webjars" % "bootstrap" % "3.1.1", 
    "com.nulab-inc" %% "play2-oauth2-provider" % "0.7.1", 
    "com.typesafe.play" %% "play-slick" % "0.6.1", 
    "mysql" % "mysql-connector-java" % "5.1.18", 
    "org.xerial" % "sqlite-jdbc" % "3.7.2" 
) 

play.Project.playScalaSettings 

instrumentSettings 

Что я делаю неправильно?

Как это исправить?

ответ

0

У меня была аналогичная проблема. Я использовал HList в этом проекте, и я понял, что это вызвано тем, что процесс компиляции в Eclipse «сталкивался» с компиляцией, выпущенной SBT.

Просто попробуйте закрыть Eclipse и скомпилировать свой проект через SBT и посмотреть, что произойдет.

Я попытался составить ваш проект на Scala 2.10.4 и Scala 2.11.2, и у меня не было проблем. Если вы добавите свой «build.sbt», может оказаться полезным обращение к вашим «libraryDependencies».

+0

Я понял, что я попытался закрыть все процессы JVM, включая Eclipse. Тем не менее, я иногда вижу эту ошибку. Также я просто добавил файл 'build.sbt'. Спасибо за ваш ответ. – tuxdna

+0

Я попытался скомпилировать против play-slick 0.8.0, который использует slick 2.1.x. Я не знаю, ограничены ли вы по определенной причине до 0,6.1. Попробуйте развернуть проект и перейти на более позднюю версию, чтобы узнать, что произойдет. Вам также потребуется обновить игру. – Max

+0

Я нашел решение. Пожалуйста, проверьте мой ответ. – tuxdna

0

Я сообщил об этой проблеме here, поэтому для записи я нашел решение.

Мне пришлось переопределить настройки воспроизведения и установить Scala-2.10.4 в качестве компилятора. Это как build.sbt выглядит сейчас:

play.Project.playScalaSettings 

name := "play-sample" 

version := "0.1-SNAPSHOT" 

scalaVersion := "2.10.4" 

libraryDependencies ++= Seq(
    jdbc, 
    anorm, 
    cache, 
    "org.webjars" %% "webjars-play" % "2.2.0", 
    "org.webjars" % "bootstrap" % "3.1.1", 
    "com.nulab-inc" %% "play2-oauth2-provider" % "0.7.1", 
    "com.typesafe.play" %% "play-slick" % "0.6.1", 
    "mysql" % "mysql-connector-java" % "5.1.18", 
    "org.xerial" % "sqlite-jdbc" % "3.7.2" 
) 

instrumentSettings 

Он показал мне SCALA версию 2.10.3

[play-sample] $ scalaVersion 
[info] 2.10.3 

Тогда я обновленное build.sbt

[play-sample] $ scalaVersion 
[info] 2.10.4 

А теперь компилируется нормально, без любые ошибки.