依赖 Ivy 中另一个项目的测试工件(在 sbt 中)
Depend on test artifact of another project in Ivy (in sbt)
我们在将一个第三方项目的测试工件添加到另一个项目的 Ivy test
conf 时遇到问题。
我们无法表达以下依赖关系:myprj-common/test -> framework-app-base/test
使用 Ivy(在 sbt 构建中)。
项目 framework-app-base
有 src/main/scala
,它在 Ivy 仓库中生成 jars/framework-app-base-0.0.123-SNAPSHOT.jar
和 src/test/scala
,生成 tests/framework-app-base-0.0.123-SNAPSHOT-test.jar
例如,有一个实用程序 class /framework-app-base/src/test/scala/com/myco/fmwk/framework/base/test/util/TestUtility.scala
,它最终在 ${user.home}/.ivy2/repo/com.myco.fmwk.framework/framework-app-base/tests/framework-app-base-0.0.123-SNAPSHOT-test.jar
。
我们 myprj-common/src/test/scala
的代码使用 class TestUtility
,这在 IDE.
中运行良好
当我们尝试 运行 sbt 构建 (sbt clean update compile test
) 时,编译工作正常,但测试失败,因为 TestUtility
未找到。
当我们在sbt中show test:dependency-classpath
时,我们看到主神器在class路径中,但测试神器不在:
jars/framework-app-base-0.0.123-SNAPSHOT.jar
在 class 路径中
tests/framework-app-base-0.0.123-SNAPSHOT-test.jar
不在 class 路径中
我们已尝试如下所示指定依赖项,但没有任何区别:
<dependency org="com.myco.fmwk.framework" name="framework-app-base" rev="0.0.+" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)" />
<dependency org="com.myco.fmwk.framework" name="framework-app-base" rev="0.0.+" m:classifier="test" conf="test->test(*)" />
我们如何表达这种依赖?
项目 myprj-common
和 framework-app-base
不在同一个多项目中,因此 myprj-common
只能依赖于 framework-app-base
生成的 JAR。换句话说,不可能将 .dependsOn()
添加到 build.sbt
(AFAIK)。
我们最终在 build.sbt 内将依赖规范转换为 sbt 语法。为了表达对测试工件的依赖,我们使用
"com.myco.fmwk.framework" % "framework-app-base" % "0.0.+" % "compile->test;test->test" classifier "" classifier "test"
这意味着我们分别添加到类路径framework-app-base-0.0.123-SNAPSHOT
和framework-app-base-0.0.123-SNAPSHOT-test.jar.jar
。
也许这可以使用 Ivy 文件以类似的方式完成,但我们希望所有构建规范都以单一格式表示。
我们在将一个第三方项目的测试工件添加到另一个项目的 Ivy test
conf 时遇到问题。
我们无法表达以下依赖关系:myprj-common/test -> framework-app-base/test
使用 Ivy(在 sbt 构建中)。
项目 framework-app-base
有 src/main/scala
,它在 Ivy 仓库中生成 jars/framework-app-base-0.0.123-SNAPSHOT.jar
和 src/test/scala
,生成 tests/framework-app-base-0.0.123-SNAPSHOT-test.jar
例如,有一个实用程序 class /framework-app-base/src/test/scala/com/myco/fmwk/framework/base/test/util/TestUtility.scala
,它最终在 ${user.home}/.ivy2/repo/com.myco.fmwk.framework/framework-app-base/tests/framework-app-base-0.0.123-SNAPSHOT-test.jar
。
我们 myprj-common/src/test/scala
的代码使用 class TestUtility
,这在 IDE.
当我们尝试 运行 sbt 构建 (sbt clean update compile test
) 时,编译工作正常,但测试失败,因为 TestUtility
未找到。
当我们在sbt中show test:dependency-classpath
时,我们看到主神器在class路径中,但测试神器不在:
jars/framework-app-base-0.0.123-SNAPSHOT.jar
在 class 路径中
tests/framework-app-base-0.0.123-SNAPSHOT-test.jar
不在 class 路径中
我们已尝试如下所示指定依赖项,但没有任何区别:
<dependency org="com.myco.fmwk.framework" name="framework-app-base" rev="0.0.+" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)" />
<dependency org="com.myco.fmwk.framework" name="framework-app-base" rev="0.0.+" m:classifier="test" conf="test->test(*)" />
我们如何表达这种依赖?
项目 myprj-common
和 framework-app-base
不在同一个多项目中,因此 myprj-common
只能依赖于 framework-app-base
生成的 JAR。换句话说,不可能将 .dependsOn()
添加到 build.sbt
(AFAIK)。
我们最终在 build.sbt 内将依赖规范转换为 sbt 语法。为了表达对测试工件的依赖,我们使用
"com.myco.fmwk.framework" % "framework-app-base" % "0.0.+" % "compile->test;test->test" classifier "" classifier "test"
这意味着我们分别添加到类路径framework-app-base-0.0.123-SNAPSHOT
和framework-app-base-0.0.123-SNAPSHOT-test.jar.jar
。
也许这可以使用 Ivy 文件以类似的方式完成,但我们希望所有构建规范都以单一格式表示。