如何将sbt项目的测试范围工件添加到另一个&x27;什么是测试类路径?

如何将sbt项目的测试范围工件添加到另一个&x27;什么是测试类路径?,sbt,Sbt,有两个sbt项目:common和projectX 项目common在test范围内有一些依赖项,我想在projectX中的test类路径上看到这些依赖项,其中common作为依赖项 这是projectX中build.sbt的摘录,其中包含test->test配置映射,如中所述: 在projectX中执行test:compile时,将显示以下错误: [错误](*:更新)sbt.ResolveException:未解析的依赖项: org#common_2.10;0.1:组织中配置非公共#公共#2.1

有两个sbt项目:
common
projectX

项目
common
test
范围内有一些依赖项,我想在
projectX
中的
test
类路径上看到这些依赖项,其中
common
作为依赖项

这是
projectX
build.sbt
的摘录,其中包含
test->test
配置映射,如中所述:

projectX
中执行
test:compile
时,将显示以下错误:

[错误](*:更新)sbt.ResolveException:未解析的依赖项: org#common_2.10;0.1:组织中配置非公共#公共#2.10;0.1: “测试”。这是org#projectX#U 2.10要求的;0.0.1-快照测试


如何将project
common
中的
test
范围内的依赖项添加到project
projectX
中的
test
类路径?

我以前从未见过错误,也无法再现它,但测试工件似乎尚未发布,因为它们不是默认情况下发布的

根据:

默认情况下,发布的工件是主要的二进制jar,即jar 包含主要源和资源,以及包含 API文档。您可以为测试类添加工件, 或者您可以禁用一些主要工件

要添加所有测试工件,请执行以下操作:

publishArtifact in Test := true
> common/publishLocal
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-sources.jar ...
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-tests-sources.jar ...
[info] Done packaging.
[info] Done packaging.
[info] Updating {file:/Users/jacek/sandbox/multi-module-test-scope-25003683/}common...
[info] Wrote /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] :: delivering :: org#common_2.10;0.1 :: 0.1 :: release :: Mon Jul 28 23:00:41 CEST 2014
[info]  delivering ivy file to /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/ivy-0.1.xml
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-javadoc.jar ...
[info] Done packaging.
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1.jar ...
[info] Done packaging.
[info] Test Scala API documentation to /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/test-api...
[info] Compiling 1 Scala source to /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/test-classes...
model contains 2 documentable templates
[info] Test Scala API documentation successful.
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-tests-javadoc.jar ...
[info] Done packaging.
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-tests.jar ...
[info] Done packaging.
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/docs/common_2.10-javadoc.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/srcs/common_2.10-tests-sources.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/jars/common_2.10-tests.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/jars/common_2.10.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/srcs/common_2.10-sources.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/poms/common_2.10.pom
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/docs/common_2.10-tests-javadoc.jar
[info]  published ivy to /Users/jacek/.ivy2/local/org/common_2.10/0.1/ivys/ivy.xml
[success] Total time: 2 s, completed Jul 28, 2014 11:00:43 PM
这就是发布
测试
配置的工件应该做的

将以下内容添加到
common
项目和
publishLocal
项目的
build.sbt
,以将测试打包并发布到本地Ivy2存储库:

publishArtifact in Test := true
通过更改,您应该在
publishLocal
的日志中看到以下内容-请注意与测试相关的工件:

publishArtifact in Test := true
> common/publishLocal
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-sources.jar ...
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-tests-sources.jar ...
[info] Done packaging.
[info] Done packaging.
[info] Updating {file:/Users/jacek/sandbox/multi-module-test-scope-25003683/}common...
[info] Wrote /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] :: delivering :: org#common_2.10;0.1 :: 0.1 :: release :: Mon Jul 28 23:00:41 CEST 2014
[info]  delivering ivy file to /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/ivy-0.1.xml
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-javadoc.jar ...
[info] Done packaging.
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1.jar ...
[info] Done packaging.
[info] Test Scala API documentation to /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/test-api...
[info] Compiling 1 Scala source to /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/test-classes...
model contains 2 documentable templates
[info] Test Scala API documentation successful.
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-tests-javadoc.jar ...
[info] Done packaging.
[info] Packaging /Users/jacek/sandbox/multi-module-test-scope-25003683/common/target/scala-2.10/common_2.10-0.1-tests.jar ...
[info] Done packaging.
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/docs/common_2.10-javadoc.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/srcs/common_2.10-tests-sources.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/jars/common_2.10-tests.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/jars/common_2.10.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/srcs/common_2.10-sources.jar
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/poms/common_2.10.pom
[info]  published common_2.10 to /Users/jacek/.ivy2/local/org/common_2.10/0.1/docs/common_2.10-tests-javadoc.jar
[info]  published ivy to /Users/jacek/.ivy2/local/org/common_2.10/0.1/ivys/ivy.xml
[success] Total time: 2 s, completed Jul 28, 2014 11:00:43 PM

通过从Maven样式切换到Ivy样式的发布和解析(Ivy文件而不是pom文件,以及Ivy样式的存储库),我在没有publishLocal的情况下成功地解决了这个问题。顺便说一句,如果您使用Nexus代理,建议在Nexus中将Maven回购和Ivy回购(以及Maven Group和Ivy Group)完全分开


也就是说,我不知道为什么publishLocal会有这个问题——如果您在源项目构建文件中正确地设置了
publishArtifact
行,那么这肯定会起作用。

不幸的是,我在测试中已经设置了这个选项
publishArtifact:=true
,但它不会改变任何东西。还要注意的是,我不需要
common
的测试类——我只需要类路径就可以有它的依赖项。这件作品当然也会出版。看你的日志,我感觉你是在多模块环境下复制的。没有模块。这是两个独立的独立项目,其中
projectX
依赖于
common
。名称
multi-module-test-scope-25003683
具有误导性,因为我从一个带有
dependsOn
的多模块项目开始,然后意识到您以不同的方式使用了依赖关系。这两个项目共享目录,但它们通过本地Ivy2存储库相互依赖。至于测试类路径…您不能依赖于类路径,而是依赖于工件。因此,要在项目之间建立依赖关系,您必须依赖于它们的工件。由于
projectX
依赖于测试工件,而测试工件又依赖于其他工件,因此它们都构成了测试类路径。