2014-02-27 2 views
1

표준 폴더 구조를 사용하여 스칼라에 일반적인 프레임 워크 응용 프로그램이 있다고 가정 해 봅니다. 컴파일 된 테스트를 CI 서버에서 실행하고 싶습니다. 테스트는/tests 폴더에 있습니다. http://www.scalatest.org/user_guide/using_the_runner를 다음 명령 줄 명령 : 나는 다음과 같은 오류 얻을ScalaTest 러너를 사용할 때 클래스 패스를 설정하는 방법

scala -classpath /home/vagrant/.ivy2/ org.scalatest.tools.Runner -R target 

: 여기에 설명 된대로 내가 scalatest 러너를 실행하면

java.lang.NoClassDefFoundError: scala/concurrent/duration/Duration 
    at org.scalatest.tools.Runner$.<init>(Runner.scala:741 

을 나는 그것이 나에게 말하고 이해 테스트의 일부로 필요한 기간 클래스를 찾을 수 없습니다. 클래스 패스가 classpath에 없기 때문에 클래스 패스를 지정하는 방법이 없으므로 클래스 패스를 지정하는 방법이 아닐 수도 있습니다. 나는 다음과 같이 "대상"의 클래스 경로를 지정 시도

:

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 

컴파일 된 응용 프로그램 및 테스트가 플레이 프레임 워크 넣어되는 곳 "대상"폴더입니다. 타겟이 유효한 파일 경로이므로 프로젝트의 루트에서이 명령을 실행하고 있습니다.

클래스 패스가 작동하는 방식을 이해하는 데 근본적인 차이가있는 것처럼 보입니다.

EDIT 기간 클래스가 포함 된 클래스 경로에 scala lang jar를 수동으로 추가하여 약간의 성공을 거두었습니다. 하지만 classpath에 모든 jar를 어떻게 추가 할 수 있습니까? 와일드 카드 구문이 있습니까? 여기

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 

답변

1

다음을 사용하여 모든 종속 항목의 클래스 경로를 가져옵니다.

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

그리고이 테스트를 실행 :

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

<path to scalatest.jar>/home/user/project/.ivy2/cache/org.scalatest/scalatest_2.11/bundles/scalatest_2.11-2.2.6.jar 같은입니다.

예, $DEPS에 이미 Scala 라이브러리가 모두 포함되어 있기 때문에 이 아니라 java을 사용할 수 있습니다.

관련 문제