Допустим, у меня есть типичное фреймворковое приложение на Scala, использующее стандартную структуру папок. Я хочу запускать скомпилированные тесты на сервере CI — эти тесты находятся в папке /tests.
Когда я запускаю скалатестовый бегун, как описано здесь: http://www.scalest.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
В «целевой» папке помещаются скомпилированное приложение и тесты для игрового фреймворка. Я запускаю эту команду из корня проекта, поэтому target является допустимым путем к файлу.
Похоже, у меня есть фундаментальный пробел в моем понимании того, как работает путь к классам.
EDIT Мне удалось вручную добавить jar scala lang в путь к классам, который содержит класс продолжительности. Но как я могу добавить все банки в путь к классам? Есть ли синтаксис подстановочных знаков?
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