使用最新版本的scala会给出java.lang.classnotfoundexception:scala.function1$class

gk7wooem  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(518)

所以我想在我的sbt项目中使用cronish库。
我的build.sbt如下所示

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

我不得不提一下 cronish_2.11 显然是因为 cronish_2.12 不存在。我正在workers.scala中运行这个项目,位于 $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"

}
}

当我使用 `sbt run` 是获取以下错误:

[error] (run-main-0) java.lang.NoClassDefFoundError: scala/Function1$class
java.lang.NoClassDefFoundError: scala/Function1$class
at scala.util.parsing.combinator.Parsers$Parser.(Parsers.scala:225)
at scala.util.parsing.combinator.RegexParsers$$anon$1.(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$.(dsl.scala:209)
at cronish.dsl.Cronish$.(dsl.scala)
at cronish.dsl.package$.string2cron(package.scala:7)
at cronish.dsl.package$.(package.scala:18)
at cronish.dsl.package$.(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.(Parsers.scala:225)
at scala.util.parsing.combinator.RegexParsers$$anon$1.(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$.(dsl.scala:209)
at cronish.dsl.Cronish$.(dsl.scala)
at cronish.dsl.package$.string2cron(package.scala:7)
at cronish.dsl.package$.(package.scala:18)
at cronish.dsl.package$.(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)

如果我换个房间我就能让它工作 `scalaVersion` 至 `2.11.x` . 但我想知道是什么导致了这个错误?在我当前的scala版本中,什么是最好的方法?
e5nszbig

e5nszbig1#

scala没有跨主要版本的二进制兼容性(2.11.x与2.12.x是不同的主要版本)。
这意味着您绝对不能在使用Scala2.12的项目中使用根据Scala2.11编译的库,抱歉。
您可能想:
通过设置 scalaVersion := "2.11.11" 等待cronish发布一个针对scala2.12编译的版本
尝试根据Scala2.12编译cronish(例如,如果您在github上托管了一个fork,那么可以通过build.sbt中的url直接依赖它)

相关问题