Reputation: 173
I faced with situation described further. I have a SBT project with traditional catalog structure in which I would like to use this library. Problem occurring when I try to parse the string directly in the program.
import io.github.facaiy.math.expression.MathExp
object SampleApp extends App {
val str = "1 + 5 / 2"
val ex = MathExp.parse(str)
val output = ex.eval(Map[String, Double]())
println(output)
}
I'm getting error with message
sbt:StackOvTest> run
[info] Packaging /home/kost/Prog/MyDev/Scala/StackOvTest/target/scala-2.12/stackovtest_2.12-0.1.0.jar ...
[info] Done packaging.
[info] Running SampleApp
[error] (run-main-1) java.lang.NoClassDefFoundError: scala/util/parsing/combinator/JavaTokenParsers
[error] java.lang.NoClassDefFoundError: scala/util/parsing/combinator/JavaTokenParsers
[error] at java.lang.ClassLoader.defineClass1(Native Method)
[error] at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
[error] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
[error] at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
[error] at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
[error] at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
[error] at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
[error] at java.security.AccessController.doPrivileged(Native Method)
[error] at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[error] at io.github.facaiy.math.expression.compiler.MathExpCompiler$.apply(MathExpCompiler.scala:13)
[error] at io.github.facaiy.math.expression.MathExp$.parse(MathExp.scala:14)
[error] at SampleApp$.delayedEndpoint$SampleApp$1(SampleApp.scala:6)
[error] at SampleApp$delayedInit$body.apply(SampleApp.scala:3)
[error] at scala.Function0.apply$mcV$sp(Function0.scala:34)
[error] at scala.Function0.apply$mcV$sp$(Function0.scala:34)
[error] at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
[error] at scala.App.$anonfun$main$1$adapted(App.scala:76)
[error] at scala.collection.immutable.List.foreach(List.scala:389)
[error] at scala.App.main(App.scala:76)
[error] at scala.App.main$(App.scala:74)
[error] at SampleApp$.main(SampleApp.scala:3)
[error] at SampleApp.main(SampleApp.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] at java.lang.reflect.Method.invoke(Method.java:498)
[error] at sbt.Run.invokeMain(Run.scala:93)
[error] at sbt.Run.run0(Run.scala:87)
[error] at sbt.Run.execute$1(Run.scala:65)
[error] at sbt.Run.$anonfun$run$4(Run.scala:77)
[error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:10)
[error] at sbt.TrapExit$App.run(TrapExit.scala:252)
[error] at java.lang.Thread.run(Thread.java:748)
[error] Caused by: java.lang.ClassNotFoundException: scala.util.parsing.combinator.JavaTokenParsers
[error] at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[error] at java.lang.ClassLoader.defineClass1(Native Method)
[error] at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
[error] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
[error] at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
[error] at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
[error] at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
[error] at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
[error] at java.security.AccessController.doPrivileged(Native Method)
[error] at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[error] at io.github.facaiy.math.expression.compiler.MathExpCompiler$.apply(MathExpCompiler.scala:13)
[error] at io.github.facaiy.math.expression.MathExp$.parse(MathExp.scala:14)
[error] at SampleApp$.delayedEndpoint$SampleApp$1(SampleApp.scala:6)
[error] at SampleApp$delayedInit$body.apply(SampleApp.scala:3)
[error] at scala.Function0.apply$mcV$sp(Function0.scala:34)
[error] at scala.Function0.apply$mcV$sp$(Function0.scala:34)
[error] at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
[error] at scala.App.$anonfun$main$1$adapted(App.scala:76)
[error] at scala.collection.immutable.List.foreach(List.scala:389)
[error] at scala.App.main(App.scala:76)
[error] at scala.App.main$(App.scala:74)
[error] at SampleApp$.main(SampleApp.scala:3)
[error] at SampleApp.main(SampleApp.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] at java.lang.reflect.Method.invoke(Method.java:498)
[error] at sbt.Run.invokeMain(Run.scala:93)
[error] at sbt.Run.run0(Run.scala:87)
[error] at sbt.Run.execute$1(Run.scala:65)
[error] at sbt.Run.$anonfun$run$4(Run.scala:77)
[error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:10)
[error] at sbt.TrapExit$App.run(TrapExit.scala:252)
[error] at java.lang.Thread.run(Thread.java:748)
[error] java.lang.RuntimeException: Nonzero exit code: 1
[error] at sbt.Run$.executeTrapExit(Run.scala:124)
[error] at sbt.Run.run(Run.scala:77)
[error] at sbt.Defaults$.$anonfun$bgRunTask$5(Defaults.scala:1168)
[error] at sbt.Defaults$.$anonfun$bgRunTask$5$adapted(Defaults.scala:1163)
[error] at sbt.internal.BackgroundThreadPool.$anonfun$run$1(DefaultBackgroundJobService.scala:366)
[error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] at scala.util.Try$.apply(Try.scala:209)
[error] at sbt.internal.BackgroundThreadPool$BackgroundRunnable.run(DefaultBackgroundJobService.scala:289)
[error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] at java.lang.Thread.run(Thread.java:748)
[error] (Compile / run) Nonzero exit code: 1
[error] Total time: 1 s, completed May 25, 2018 6:13:01 PM
in the case of configuring library via build.sbt, which is as follows:
name := "StackOvTest"
version := "0.1.0"
scalaVersion := "2.12.3"
libraryDependencies += "io.github.facaiy" % "math-expression-parser" % "0.0.1"
Also, I tried to download the appropriate jar-file containing this library and put that archive into the StackOvTest/lib directory, but I'm still getting the same error. I noticed some messages regarding scala parser combinators. Even after adding
libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.7"
nothing makes it work. What I am doing wrong?
Upvotes: 0
Views: 310
Reputation: 37852
Looks like the library you're trying to use does not have a compatible Scala 2.12 jar available in public maven repository, see here.
That means that SBT imports the version of that library that expects Scala 2.11 to be used, so it fails when looking up classes that exist there and do not exist in 2.12.
Usually you'd use SBT's %%
symbol to fetch the "right" version of a library (the one using the Scala version used in your build):
"io.github.facaiy" %% "math-expression-parser" % "0.0.1"
And indeed in this case, if you use this in a Scala 2.12 project, you'll see that SBT can't find a matching version:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: io.github.facaiy#math-expression-parser_2.12;0.0.1: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
You don't have any easy solutions here, either use Scala 2.11 in your project, or you'll have to try compiling the sources of that library using Scala 2.12 yourself.
Upvotes: 2