【问题标题】:How do I set the classpath when using the ScalaTest runner使用 ScalaTest 运行器时如何设置类路径
【发布时间】: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


    【解决方案1】:

    以下是使用Runner 运行测试套件的方法:

    Compile tests with SBT and package them to be run later

    这里是如何轻松地将多个 jar 文件添加到您的类路径:

    Run scala console with play 2.2 jars

    【讨论】:

      【解决方案2】:

      获取所有依赖项的类路径:

      DEPS=$(sbt --error "export compile:dependencyClasspath")
      

      然后运行测试:

      java -cp "<path to scalatest.jar>":$DEPS org.scalatest.tools.Runner -R target
      

      其中&lt;path to scalatest.jar&gt; 类似于/home/user/project/.ivy2/cache/org.scalatest/scalatest_2.11/bundles/scalatest_2.11-2.2.6.jar

      是的,您可以使用java,而不是scala,因为$DEPS 已经包含所有Scala 库。

      【讨论】:

      • 这很有帮助!我们的 build.sbt 文件管理多个项目,因此我从您的导出命令中获得了多行输出,我正在为我们的单元测试执行此操作,所以我最终不得不将此命令用于项目 xyz:sbt --error "export xyz/test:dependencyClasspath"跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      相关资源
      最近更新 更多