sbt로 개발할 때 가장 주의할 점은 '개행 문자'(\r\n 또는 \n)이다. 

sbt는 민감해서 개행 문자가 없거나 필요없는 곳에 있으면 에러를 발생한다.


예 1)

개행 문자로 구분을 지어야 하는데, 아래처럼 구분이 안될 때 에러 발생 

scalaVersion := "2.11.2"

libraryDependencies ++= Seq(

  jdbc,

  anorm,

  cache,

  ws

)



예 2) 개행 문자가 없어야 하는데, 중간에 있는 경우 - 에러 발생 (그러나 주석을 달면 에러 발생은 되지 않음)


libraryDependencies ++= Seq(

  "com.typesafe" % "config" % "1.2.1"


)





sbt 샘플 예제 (build.sbt)



name := """google-dequeue"""


version := "1.0-SNAPSHOT"


lazy val root = (project in file(".")).enablePlugins(PlayScala)


scalaVersion := "2.11.2"


libraryDependencies ++= Seq(

  jdbc,

  anorm,

  cache,

  ws

)


libraryDependencies ++= Seq(

  "com.typesafe" % "config" % "1.2.1",

  "ch.qos.logback" % "logback-classic" % "1.1.2"

  "com.rabbitmq" % "amqp-client" % "2.8.1",

  "commons-io" % "commons-io" % "2.4",

  "org.apache.httpcomponents" % "httpclient" % "4.3.5",

  "com.google.guava" % "guava" % "18.0",

  "com.rabbitmq" % "amqp-client" % "2.8.1",

  "org.msgpack" %% "msgpack-scala" % "0.6.11"

)



Posted by '김용환'
,

bad symbolic reference to scala.ScalaObject encountered in class file 'xxx.class' 에러는 scala.sbt 내에서 정의된 dependency에서 충돌이 날 때 발생한다.


문제 해결을 하려면, scala version과 잘 맞는 library를 쓰거나, library dependency에서의 관계를 잘 정리해야 한다. (사실상, 버전을 잘 수정하는 방법밖에 없고, 능숙해지는 수밖에 없다~~ 하하;;;;)



play.PlayExceptions$CompilationException: Compilation error[bad symbolic reference to scala.ScalaObject encountered in class file 'Logging.class'.

Cannot access type ScalaObject in package scala. The current classpath may be

missing a definition for scala.ScalaObject, or Logging.class may have been compiled against a version that's

incompatible with the one found on the current classpath.]

at play.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]

at play.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]

at scala.Option.map(Option.scala:145) ~[scala-library-2.11.2.jar:na]

at play.PlayReloader$$anon$1$$anonfun$play$PlayReloader$$anon$$taskFailureHandler$1.apply(PlayReloader.scala:235) ~[na:na]

at play.PlayReloader$$anon$1$$anonfun$play$PlayReloader$$anon$$taskFailureHandler$1.apply(PlayReloader.scala:230) ~[na:na]

[warn] play - No application found at invoker init

Posted by '김용환'
,

scala 설치하기

scala 2014. 11. 28. 17:19

scala를 이용한 두가지 방법이 있다. 

그냥 scala를 설치하거나 scala typesafe activator를 설치하는 것이다.


1번 그냥 설치
$ brew install scala



2번 typesafe activator 이용


아니면, 다운로드 싸이트(http://www.scala-lang.org/download/)에서 Typesafe Activator를 다운받는다. 

zip을 풀어 $ ./activator ui 를 실행한다.


현재(2014.11.28)는 activator 1.2.0 기반이며, scala 2.10.2 이다.

(참고로.. scala 언어의 특징이 계속 변경되기 때문에 항상 버전을 신경써야 한다. )


사용방법은 https://typesafe.com/platform/getstarted 에 있다.

웹에서 간단하게 테스트해볼 수 있으며, ide에 연동할 수 있다. 





3. scala ide 


eclipse, intellij idea에서 scala 플러그인를 설치한다. 



- scala 플러그인 설치
- File-New Project-SBT-project name 만들기
- 만약 src/main/scala 디렉토리가 안생겼으면, 해당 디렉토리를 만들고 마우스 오른쪽 버튼을 눌러 “Mark directory as..”-Sources Root 로 설정

- 로컬  scala, jdk  설정
(참조 : http://stackoverflow.com/questions/25201365/whats-the-reason-for-errorcannot-determine-java-vm-executable-in-selected-jdk)
- 우측 탭의 SBT 플러그인의 SBT tasks를 실행후의 상단의 refresh 버튼을 누른다. (다음에도 dependency 추가하고 나서 lib 다운로드를 할 때에도 유용하다.)



4. play2 - scala (with intellij) 이용


(현재 이 방식 이용중)


(따라해도 무의미하다.. sorm은 더이상 유지보수 되지 않고, 에러 발생해서 play 2.1에만 쓰고, 상위 버전에서는 더이상 쓰지 못하는 예제이다. http://stackoverflow.com/questions/26213733/sorm-h2-db-for-play-framework-scala-nosuchmethoderror)

Posted by '김용환'
,