【发布时间】:2014-03-31 07:07:11
【问题描述】:
假设我在 Scala 中有一个使用标准文件夹结构的典型框架应用程序。我想在 CI 服务器上运行我编译的测试 - 这些测试位于 /tests 文件夹中。
当我运行 scalatest 运行器时,如下所述:http://www.scalatest.org/user_guide/using_the_runner 使用以下命令行命令:
scala -classpath /home/vagrant/.ivy2/ org.scalatest.tools.Runner -R target
我收到以下错误:
java.lang.NoClassDefFoundError: scala/concurrent/duration/Duration
at org.scalatest.tools.Runner$.<init>(Runner.scala:741
我知道它告诉我它找不到测试所需的持续时间类。我也明白这可能是因为该类不在类路径上,但我不知道如何指定要传递给运行器的类路径。
我已尝试指定“目标”的类路径,如下所示:
scala -classpath /home/vagrant/.ivy2/cache/org.scalatest/scalatest_2.10/jars/scalatest_2.10-2.0.M8.jar:target org.scalatest.tools.Runner -R target
“目标”文件夹是为播放框架放置已编译的应用程序和测试的位置。我从项目的根目录运行该命令,因此目标是有效的文件路径。
看来我对类路径的工作原理的理解存在根本性的差距。
编辑 通过手动将 scala lang jar 添加到包含持续时间类的类路径中,我取得了一些成功。但是如何将所有 jars 添加到类路径中?有通配符语法吗?
scala -classpath "/home/vagrant/.ivy2/cache/org.scalatest/scalatest_2.10/jars/scalatest_2.10-2.0.M8.jar:/home/vagrant/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.3.jar" org.scalatest.tools.Runner -R target
java.lang.IncompatibleClassChangeError: Found class scala.collection.mutable.ArrayOps, but interface was expected
【问题讨论】:
标签: java scala classpath sbt scalatest