11

我的一个项目将提供一个 jar 包,用于在其他几个项目中进行单元测试。到目前为止,我设法让 sbt 生成 aobjects-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 从不尝试解析测试 jar。

4

3 回答 3

18

如何使用测试工件

要在发布主工件时启用发布测试工件,您需要添加到库的 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)
)

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

我创建了一个示例项目:

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

或者您可以直接在 github中查看示例。

于 2013-10-05T13:58:20.060 回答
1

您的问题是 sbt 认为您的两个 jar 是相同的工件,但版本不同。它采用“最新”,即 0.1-SNAPSHOT,并忽略 0.1-SNAPSHOT-test。这与您看到的行为相同,例如您有 0.1-SNAPSHOT 和 0.2-SNAPSHOT。

我不知道这两个罐子里有什么,但如果你希望它们都在类路径上,这就是你想要做的,那么你需要将测试工件的名称更改为对象-正如 Kazuhiro 建议的那样,commons-test。看来这对您来说应该很容易,因为您已经自己将其放入存储库中。

于 2013-03-18T22:31:37.500 回答
-2

如果您像这样更改它会正常工作name

"com.company" %% "objects-commons" % "0.1-SNAPSHOT",
"com.company" %% "objects-commons-test" % "0.1-SNAPSHOT" % "test",
于 2013-03-08T10:55:01.100 回答