取决于Ivy中另一个项目的测试工件(在sbt中)

时间:2017-02-07 22:15:02

标签: scala sbt ivy

我们无法将测试工件从一个第三方项目添加到另一个项目的Ivy test conf。

我们无法表达以下依赖关系:myprj-common/test -> framework-app-base/test使用常春藤(在sbt构建中)。

项目framework-app-basesrc/main/scala,在常春藤回购中生成jars/framework-app-base-0.0.123-SNAPSHOT.jarsrc/test/scala,生成tests/framework-app-base-0.0.123-SNAPSHOT-test.jar

例如,有一个实用工具类/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的代码使用了类TestUtility,这在IDE中运行良好。

当我们尝试运行sbt build(sbt clean update compile test)时,编译工作正常,但测试失败,因为找不到TestUtility

当我们在sbt中show test:dependency-classpath时,我们发现主要工件位于类路径中,但测试工件不是:

jars/framework-app-base-0.0.123-SNAPSHOT.jar在类路径中

tests/framework-app-base-0.0.123-SNAPSHOT-test.jar不在类路径中

我们已尝试指定依赖项,如下所示,但它没有区别:

<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-commonframework-app-base不在同一个多项目中,因此myprj-common只能依赖framework-app-base生成的JAR。换句话说,无法向.dependsOn()(AFAIK)添加build.sbt

1 个答案:

答案 0 :(得分:0)

我们最终将我们的依赖规范转换为sbt语法,在build.sbt中。为了表达对测试工件的依赖性,我们使用

"com.myco.fmwk.framework" % "framework-app-base" % "0.0.+" % "compile->test;test->test" classifier "" classifier "test"

表示我们分别添加到类路径framework-app-base-0.0.123-SNAPSHOTframework-app-base-0.0.123-SNAPSHOT-test.jar.jar

也许这可以使用Ivy文件以类似的方式完成,但我们希望以单一格式表达所有构建规范。