1

我有一个 sbt 多项目设置,项目结构如下

项目父
|
|-- 客户
|
|-- 服务器

父项目是一个虚拟项目。project/MyBuild.scala 文件是这样的

  import sbt._
  import Keys._
  object MyBuild extends Build {
      lazy val root = Project(id = "parent", base = file(".")) aggregate(server, client)
      lazy val server = Project(id = "server", base = file("server"))
      lazy val client = Project(id = "client", base = file("client")) dependsOn( server )
  }

客户端和服务器是两个独立的项目,带有 testng 测试设置,它们都独立工作。

要运行 testng,我使用的是 testng 接口插件“sbt-testng-plugin”,它需要指定 testng 测试套件配置 xml。

在客户端和服务器的 build.sbt 文件中,我都指定了

testNGSuites := Seq(  "src/test/resources/testng.xml")

这样 testng 可以找到 testng.xml 来运行测试。

在父项目中,如果我输入

sbt 编译

它分别编译所有子项目(客户端和服务器)。这很好用。

但如果我输入,

sbt测试

父项目 sbt 尝试运行 testng 测试,但由于找不到文件而失败

 src/test/resources/testng.xml 

在父项目中。由于 parent 只是一个虚拟目录,并且没有

 src/test/resources/testng.xml 

因此测试失败。

现在我的问题是如何配置设置以允许子项目以及父项目运行测试?

我在想,如果我能以某种方式在子项目中设置这样的设置

 testNGSuites := Seq( base +  "src/test/resources/testng.xml")

所以 testNGSuites 对于子项目而不是父项目是绝对的。

但是由于我刚开始使用 sbt,我不确定如何在 sbt 中获取“基本”路径。

我尝试使用 baseDirectory,但它是一个设置键而不是值本身。

任何帮助将不胜感激。

谢谢

4

0 回答 0