如何在SBT中解析自己的测试工件?

时间:2013-03-08 09:40:18

标签: scala sbt

我的一个项目将提供一个jar包,应该用于其他几个项目中的单元测试。到目前为止,我设法让sbt生成objects-commons_2.10-0.1-SNAPSHOT-test.jar并将其发布到我的存储库中。

但是,我找不到告诉sbt在其他项目中将该工件与测试范围一起使用的方法。

在我的build.scala中添加以下依赖项将不会加载测试工件。

"com.company" %% "objects-commons" % "0.1-SNAPSHOT",
"com.company" %% "objects-commons" % "0.1-SNAPSHOT-test" % "test",

我需要的是将默认的.jar文件用作编译和运行时依赖项,将-test.jar用作我的测试范围中的依赖项。但不知何故,sbt从不试图解决测试罐。

3 个答案:

答案 0 :(得分:16)

如何使用测试工件

要在发布主工件时启用发布测试工件,您需要添加到库的build.sbt:

publishArtifact in (Test, packageBin) := true

发布您的工件。至少应该有两个JAR:objects-commons_2.10.jar和objects-commons_2.10-test.jar。

要在运行时使用库并在测试范围内使用测试库,请将以下行添加到主应用程序的build.sbt中:

libraryDependencies ++= Seq("com.company" % "objects-commons_2.10" % "0.1-SNAPSHOT"
    , "com.company" % "objects-commons_2.10" % "0.1-SNAPSHOT" % "test" classifier "tests" //for SBT 12: classifier test (not tests with s)
)

第一个条目加载运行时库,第二个条目强制“tests”工件仅在测试范围内可用。

我创建了一个示例项目:

git clone git@github.com:schleichardt/stackoverflow-answers.git --branch so15290881-how-do-i-resolve-my-own-test-artifacts-in-sbt

或者您可以直接在github中查看the example

答案 1 :(得分:1)

你的问题是,sbt认为你的两个罐子是相同的工件,但有不同的版本。它需要"最新的",即0.1-SNAPSHOT,并忽略0.1-SNAPSHOT测试。这与您所看到的行为相同,例如,您有0.1-SNAPSHOT和0.2-SNAPSHOT。

我不知道这两个罐子里面有什么,但是如果你想要它们都在类路径上,这就是你想要做的事情,那么你需要更改名称正如Kazuhiro建议的那样,测试工件对象 - 公共 - 测试。这似乎对你来说应该很容易,因为你自己已经把它放在了回购中。

答案 2 :(得分:-1)

如果您像这样更改name,它将正常工作。

"com.company" %% "objects-commons" % "0.1-SNAPSHOT",
"com.company" %% "objects-commons-test" % "0.1-SNAPSHOT" % "test",