如何让`sbt test`识别我的自定义目标?

时间:2014-10-28 21:44:39

标签: scala sbt

使用sbt 0.13.7,我在target := new File("sbt-target")文件中设置了build.sbt。这适当地设置编译器将所有类文件输出到./sbt-target/scala-2.11/{test-,}classes。没关系,但是当我调用sbt test)时,JVM无法找到我的源文件:

> test
[error] (test:executeTests) java.lang.IllegalArgumentException: Unable to load class: com.spingo.api.test.presenter.EventSummaryPresenterSpec
[error] Total time: 2 s, completed Oct 28, 2014 3:41:27 PM

(但是,它适用于sbt test:console

> test:console
[warn] Multiple resolvers having different access mechanism configured with same name 'SpinGo Releases'. To avoid conflict, Remove duplicate project resolvers (`resolvers`) or rename publishing resolver (`publishTo`).
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_05).
Type in expressions to have them evaluated.
Type :help for more information.

scala> Class.forName("com.spingo.api.test.presenter.EventSummaryPresenterSpec")
res0: Class[_] = class com.spingo.api.test.presenter.EventSummaryPresenterSpec

我大吃一惊。

我的更高目标是我试图让scala-ide使用不同的文件夹来编译工件而不是sbt。这是另一个问题,但scala-ide下的编译器会忽略<classpathentry output="..."设置。

2 个答案:

答案 0 :(得分:1)

我已经为sbt创建了一个补丁,修复了我看到的问题;另外,我已经在这里进一步深入地描述了这个问题:https://github.com/sbt/sbt/issues/1701

答案 1 :(得分:1)

我刚才有同样的问题。

您需要相对于基础项目目录设置目标目录。替换:

target := new File("sbt-target")

使用:

target := baseDirectory.value / "sbt-target"