2017-10-31 16 views
1

SBTプロジェクトでcronishライブラリを使用します。

私build.sbtは、私はcronish_2.12が存在しないため、明示的にcronish_2.11を言及する必要があり

name := "SampleName" 
version := "1.0" 
scalaVersion := "2.12.4" 
libraryDependencies += "com.github.philcali" % "cronish_2.11" % "0.1.3" 

を次のようになります。私はscalaVersionを変更した場合

[error] (run-main-0) java.lang.NoClassDefFoundError: scala/Function1$class 
java.lang.NoClassDefFoundError: scala/Function1$class 
    at scala.util.parsing.combinator.Parsers$Parser.<init>(Parsers.scala:225) 
    at scala.util.parsing.combinator.RegexParsers$$anon$1.<init>(RegexParsers.scala:84) 
    at scala.util.parsing.combinator.RegexParsers$class.literal(RegexParsers.scala:84) 
    at cronish.dsl.Cronish$.literal(dsl.scala:209) 
    at cronish.dsl.CronParsers$class.$init$(dsl.scala:28) 
    at cronish.dsl.Cronish$.<init>(dsl.scala:209) 
    at cronish.dsl.Cronish$.<clinit>(dsl.scala) 
    at cronish.dsl.package$.string2cron(package.scala:7) 
    at cronish.dsl.package$.<init>(package.scala:18) 
    at cronish.dsl.package$.<clinit>(package.scala) 
    at workers$.main(workers.scala:8) 
    at workers.main(workers.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
Caused by: java.lang.ClassNotFoundException: scala.Function1$class 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at scala.util.parsing.combinator.Parsers$Parser.<init>(Parsers.scala:225) 
    at scala.util.parsing.combinator.RegexParsers$$anon$1.<init>(RegexParsers.scala:84) 
    at scala.util.parsing.combinator.RegexParsers$class.literal(RegexParsers.scala:84) 
    at cronish.dsl.Cronish$.literal(dsl.scala:209) 
    at cronish.dsl.CronParsers$class.$init$(dsl.scala:28) 
    at cronish.dsl.Cronish$.<init>(dsl.scala:209) 
    at cronish.dsl.Cronish$.<clinit>(dsl.scala) 
    at cronish.dsl.package$.string2cron(package.scala:7) 
    at cronish.dsl.package$.<init>(package.scala:18) 
    at cronish.dsl.package$.<clinit>(package.scala) 
    at workers$.main(workers.scala:8) 
    at workers.main(workers.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 

私はそれが仕事を得ることができます。私はそれが次のエラーを取得するsbt runをされて使用して実行すると、私は$ProjectRoot/src/main/scala

import cronish._ 
import cronish.dsl._ 

object workers { 
    def main(args: Array[String]) : Unit = { 

    val payroll: CronTask = task { 
     println("You have just been paid... Finally!") 
    } 

    payroll executes "every 5 seconds" 
    } 
} 

に位置workers.scalaでプロジェクトを実行していますよ2.11.x。しかし、私は何が原因でエラーが発生したのだろうか?私の現在のScalaバージョンでこれを動作させる最良の方法は何ですか?

答えて

2

Scalaはメジャーリリース間でバイナリ互換性がありません(2.11.xは2.12.xとは異なるメジャーリリースです)。

これは、Scala 2.12を使用するプロジェクトでは、Scala 2.11用にコンパイルされたライブラリを絶対に使用できないことを意味します。

にあなたがしたいことがあります(あなた例えばホスト場合

  • はScalaの2.12に対してcronishをコンパイルしよう
  • Scalaの2.12に対してコンパイルされたバージョンをリリースするcronishためscalaVersion := "2.11.11"
  • 待ちを設定することで、プロジェクトのダウングレードgithub上のフォーク、それはあなたのbuild.sbtのURLで直接それに依存することが可能です)