【问题标题】:How do I resolve my own test artifacts in SBT?如何在 SBT 中解决我自己的测试工件?
【发布时间】:2013-02-23 19:31:41
【问题描述】:

我的一个项目将提供一个 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 从不尝试解析测试 jar。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    如何使用测试工件

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

    【讨论】:

    • 这种方法可能无法解析测试 jar 的传递依赖。所以最好在添加publishArtifact 行之后使用officially recommended way from the documentation。如果它仍然不起作用,从 Maven 风格切换到 Ivy 风格的发布(使用 Ivy 风格的存储库)应该可以工作。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 对我不起作用。发布的工件将存储在 /com/company/objects-commons_2.10/0.1-SNAPSHOT/objects-commons_2.10‌​-0.1-SNAPSHOT-test.jar 但根据您的建议,它期望在 /com/ 找到 jar公司/objects-commons-test_2.10/0.1-SNAPSHOT/objects-commons-test_2.10-0.1-SNAPSHOT.pom 不存在。
      • 我的意思是,如果可能的话,您应该将名称从 object-commons 更改为 object-commons-test。这些库不是在你的团队控制之下吗?如果是这样,那就太糟糕了……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2015-03-29
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 2020-02-19
      • 2014-10-30
      相关资源
      最近更新 更多