現在Scalaで以下の環境でCRUDアプリを開発しています。
Scala 2.12.6
JDK 1.8.0_251
play
play-json
sbt 1.3.13
h2 1.4.197
ScalikeJDBC 3.2
app/models/User.scala app/models/Post.scalaにapplyメソッドを追加するとコンパイルエラーが発生します。
app/models/User.scala
scala
1package models 2 3import scalikejdbc._ 4 5case class User(id: Long, name: String) 6 7object User extends SQLSyntaxSupport[User] { 8 9 override val tableName = "user" 10 def apply(rs: WrappedResultSet): User = User(rs.long("id"), rs.string("name")) 11 12 //ここから下をコメントアウトするとコンパイルに成功する 13 def apply(u: ResultName[User])(rs: WrappedResultSet) = new User(rs.long(u.id), rs.string(u.name))
app/models/Post.scala
scala
1package models 2 3import scalikejdbc._ 4import java.time.ZonedDateTime 5 6case class Post(id: Long, 7 userId: Option[Long] = None, 8 user: Option[User] = None, 9 text: String, 10 commentCount: Int, 11 postedAt: ZonedDateTime) 12 13object Post extends SQLSyntaxSupport[Post] { 14 15 override val tableName = "post" 16 17 //ここから下をコメントアウトするとコンパイルに成功する 18 def apply(p: SyntaxProvider[Post])(rs: WrappedResultSet): Post = apply(p.resultName)(rs) 19 20 def apply(p: ResultName[Post])(rs: WrappedResultSet): Post = new Post( 21 id = rs.get(p.id), 22 userId = rs.get(p.userId), 23 text = rs.get(p.text), 24 commentCount = rs.get(p.commentCount), 25 postedAt = rs.get(p.postedAt) 26 ) 27 28 def opt(m: SyntaxProvider[Post])(rs: WrappedResultSet): Option[Post] = 29 rs.longOpt(m.resultName.id).map(_ => Post(m)(rs)) 30 31 val (u, p) = (User.syntax, Post.syntax) 32}
コントローラーにはまだ空のメソッド定義しかしていません。
app/controllers/PostController.scala
scala
1package controllers 2 3import javax.inject.{ Inject, Singleton } 4import play.api.mvc.{ AbstractController, ControllerComponents } 5import scalikejdbc._ 6import play.api.data._ 7import play.api.data.Forms._ 8import models._ 9@Singleton 10class PostController @Inject()(cc: ControllerComponents) extends AbstractController(cc) { 11 12 def index = TODO 13 14 def create = TODO 15}
sbtバージョン
[process_args] java_version = '14'
[sbt_options] declare -a sbt_options='()'
[copyRt] java9_rt = '/Users/xxxx/.sbt/0.13/java9-rt-ext-n_a_14_0_1/rt.jar'
Executing command line:
java
-Dfile.encoding=UTF-8
-Xms1024m
-Xmx1024m
-Xss4M
-XX:ReservedCodeCacheSize=128m
-Dscala.ext.dirs=/Users/xxxxx/.sbt/0.13/java9-rt-ext-n_a_14_0_1
-jar
/usr/local/Cellar/sbt/1.3.13/libexec/bin/sbt-launch.jar
プロジェクトのbuild.sbtファイルの依存関係
sbt
1version := "1.0-SNAPSHOT" 2 3lazy val microBlog = (project in file(".")).enablePlugins(PlayScala) 4 5scalaVersion := "2.12.6" 6 7lazy val defaultDependencies = { 8 val scalikeJdbcDependencies = { 9 val scalikeJdbcVersion = "3.2.3" 10 List( 11 "org.scalikejdbc" %% "scalikejdbc" % scalikeJdbcVersion, 12 "org.scalikejdbc" %% "scalikejdbc-config" % scalikeJdbcVersion, 13 "org.scalikejdbc" %% "scalikejdbc-play-initializer" % "2.6.0-scalikejdbc-3.2" 14 ) 15 } 16 17 List( 18 evolutions, jdbc, guice, 19 "com.h2database" % "h2" % "1.4.197", 20 "ch.qos.logback" % "logback-classic" % "1.2.+", 21 "org.scalatestplus.play" %% "scalatestplus-play" % "3.1.2" % Test 22 ) ++ scalikeJdbcDependencies 23} 24 25libraryDependencies ++= defaultDependencies 26 27// sbt scalafmtでコードフォーマット 28scalafmtConfig := Some(file(".scalafmt.conf")) 29scalafmtOnCompile := true // compile時に自動でコードフォーマット 30
plugins.sbtファイルの依存関係
sbt
1addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.13") 2 3addSbtPlugin("com.geirsson" % "sbt-scalafmt" % "1.5.1")
build.propertiesファイルに別のバージョンがあり、これをsbtのロードに使用されたバージョンと同じバージョンに設定しました
properties
1-sbt.version=1.1.2 //削除 2sbt.version=1.3.13 //追加
何卒ご教授の程よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー