首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"play test“类路径与"sbt test”类路径不同

"play test“类路径与"sbt test”类路径不同
EN

Stack Overflow用户
提问于 2013-07-31 17:25:52
回答 1查看 807关注 0票数 4

情景:我想在Jenkins Server上为我的Play!2.0应用程序执行JUnit测试用例。要在服务器上构建和测试我的应用程序,我想使用SBT (命令序列为:clean compile test)。

问题:与Jenkins无关,命令play test使用与命令java -jar "sbt-launch.jar" test不同的类路径(这两个命令在我的play项目的根目录中执行,两个命令使用相同的SBT0.12.2版)。我的测试用例可以使用play test编译,但是使用java -jar "sbt-launch.jar" test编译器会抱怨缺少一些JUnit类(例如org.junit.rules.TestWatcher)。

分析:命令show test:full-classpath显示类路径确实不同:

play test类路径包含:Attributed(<playhome>\repository\local\junit\junit-dep\4.10\jars\junit-dep.jar)

java -jar "sbt-launch.jar test类路径包含:Attributed(<userhome>\.ivy2\cache\junit\junit-dep\jars\junit-dep-4.8.2.jar)

问:如何确保java -jar "sbt-launch.jar test使用与play test相同的类路径?

Build.scala:

代码语言:javascript
复制
import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

val appName         = "my app"
val appVersion      = "1.0-SNAPSHOT"

val appDependencies = Seq(
    // Play framework dependencies
    javaCore, javaJdbc, javaEbean,
    // Add your project dependencies here
    "com.typesafe" %% "play-plugins-mailer" % "2.1.0",
    "com.feth" %% "play-authenticate" % "0.2.5-SNAPSHOT",
    "org.mongodb" % "mongo-java-driver" % "2.10.1",
    "com.embedly" % "embedly-api" % "0.1.5",
    "org.mockito" % "mockito-all" % "1.9.5",
    "org.mongojack" % "mongojack" % "2.0.0-RC5",
    "commons-io" % "commons-io" % "2.3"
)

val main = play.Project(appName, appVersion, appDependencies).settings(
    resolvers += Resolver.url("play-easymail (release)", url("http://joscha.github.com/play-easymail/repo/releases/"))(Resolver.ivyStylePatterns),
    resolvers += Resolver.url("play-easymail (snapshot)", url("http://joscha.github.com/play-easymail/repo/snapshots/"))(Resolver.ivyStylePatterns),

    resolvers += Resolver.url("play-authenticate (release)", url("http://joscha.github.com/play-authenticate/repo/releases/"))(Resolver.ivyStylePatterns),
    resolvers += Resolver.url("play-authenticate (snapshot)", url("http://joscha.github.com/play-authenticate/repo/snapshots/"))(Resolver.ivyStylePatterns)
)
}
EN

回答 1

Stack Overflow用户

发布于 2014-02-12 22:58:49

play脚本重新连接sbt以使用本地JUnit文件存储库,以及您所使用的任何远程服务器。这就是下载量如此之大的原因。默认情况下,Ivy不会将本地文件复制到其本地缓存中,因为它假定这些文件是稳定的。

因此,您看到的是下载文件的sbt脚本与具有自己的本地repo的Play脚本,后者优先于下载的文件。

现在有趣的部分是关于版本控制。Ivy有有趣的版本冲突解决方案。

如果您粘贴并查看target/resolution-cache/reports目录,您可能会深入了解这两个命令之间的差异,以及为什么选择一个而不是另一个。我的猜测是有一个动态版本范围,它在本地存储库中查找play脚本,但没有找到较新版本的junit-dep。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17966515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档