2016-11-10 62 views
0

我想創建一個SBT插件一種新的考驗。爲了簡單起見,我創建了一個小模糊測試插件,模擬在sbt docs提到的一個。SBT插件 - 自己配置類路徑不完整

我的插件類,目前看起來是這樣的:

package sbtfuzz 

import sbt._, Keys._ 

object FuzzPlugin extends sbt.AutoPlugin { 
    override def requires = plugins.JvmPlugin 
    override def trigger = allRequirements 

    object autoImport { 
    lazy val Fuzz = config("fuzz") extend(Compile) 
    } 
    import autoImport._ 

    lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
    test := { 
     println("fuzz test") 
    } 
) 
    override lazy val projectSettings = inConfig(Fuzz)(baseFuzzSettings) ++ inConfig(Fuzz)(Defaults.compileSettings) 
} 

我comaprison添加到代碼中的文檔的唯一的事情就是inConfig(Fuzz)(Defaults.compileSettings)的get任務來編譯代碼。

如果我執行sbt fuzz:compile,則編譯src/fuzz/scala中的源代碼。但是如果來源有依賴於實際的項目代碼(如所有的測試都)編譯失敗,系統因爲沒有找到的類。我想這是因爲fuzz:fullClasspath只有一個條目:

[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/fuzz-classes) 

test:fullClasspath有項目類,以及依賴於它:

[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/test-classes) 
[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/classes) 
[info] * Attributed(~/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar) 
[info] * Attributed(~/.ivy2/cache/org.scala-sbt/sbt/jars/sbt-0.13.13.jar) 
... 

這樣test:compile能夠成功編譯測試類和fuzz:compile沒有。

如何配置我的fuzz配置,如test配置的方式,包括所有項目依賴關係?

謝謝!

編輯: 我發現了一個(在我看來),而骯髒的解決方法:

lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
    fullClasspath in Fuzz ++= (dependencyClasspath in Test).value, 
    dependencyClasspath in Fuzz ++= (dependencyClasspath in Test).value, 
    ... 
) 

有了這個,我可以成功編譯我的絨毛類。有沒有更健全的方式來做到這一點?謝謝!

回答

0

對於測試配置,請使用Defaults.testSettingsDefaults.testTasks。需要注意的是爲了事項:

inConfig(Fuzz)(Defaults.testSettings ++ Defaults.testTasks ++ baseSettings) 
+0

不幸的是,它不工作,我仍然只在我的類路徑中'模糊中classes'。我改變了'autoImport'從'Test'延伸,並且改變了的項目設置爲'覆蓋懶惰VAL projectSettings = inConfig(起毛)(Defaults.testSettings ++ ++ Defaults.testTasks baseFuzzSettings)'。 – amuttsch

+0

我能想到的唯一的另一件事是調用'CONFIGS(起毛)'在項目的'build.sbt'文件。我不知道如何通過設置來做到這一點。 – jkinkead