質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Play Framework

Play Frameworkは、現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

Q&A

解決済

1回答

633閲覧

scala playframework ScalikeJDBC モデルにapplyメソッドを追加するとコンパイルエラーが発生

norun07

総合スコア8

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Play Framework

Play Frameworkは、現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

Play Framework 2

Play Framework 2はPlayのメジャーバージョンです。現代の web アプリケーション開発に必要なコンポーネント及び API を統合した生産性の高い Java と Scala の web アプリケーションフレームワークです。

0グッド

0クリップ

投稿2020/07/17 07:04

編集2020/07/22 14:24

現在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 //追加

何卒ご教授の程よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiino

2020/08/09 03:55

> applyメソッドを追加するとコンパイルエラーが発生します。 エラーが発生したときのエラー文はどのような内容でしたでしょうか。 私の環境でバージョンなどを合わせた状態、かつ該当の apply をコメントアウトしない状態で ソースコードをコンパイルしてみましたが、正常にコンパイル成功できました。 文法上も特に問題もなさそうに思いますが、どこかに差分がないか気になっています。 あと、今回は関係ないと思うのですが、 JDK のバージョンが「1.8.0_251」と記載されていますが、 sbt のバージョンでは「[process_args] java_version = '14'」となっていて、 Java 14 を使用しているようにみえました。 実行に使われているのはどちらかも教えていただければと思います。
norun07

2020/08/09 07:17

質問への回答誠にありがとうございます。 おっしゃる通りでsbtのバージョンに問題がありました。 バージョンを11にしたところ問題なくコンパイルされました。
guest

回答1

0

自己解決

sbtのjavaバージョンを11に変更

投稿2020/08/09 07:17

norun07

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問