build.sbt
私が書いたプラグインのファイルには、次の2行があります。
scroogeThriftDependencies in Compile := Seq("shared_2.10")
mappings in (Compile,packageBin) ~= { (ms: Seq[(File, String)]) =>
ms filter { case (file, toPath) =>
!toPath.startsWith(s"shared")
}
}
ただし、ビルドにScrooge プラグインも含まれている場合にのみ、これを実行したいと考えています。これはどのように達成できますか?
以下のアプローチを試しましたが、うまくいきませんでした。
lazy val onlyWithScrooge = taskKey[Unit]("Executes only if the Scrooge plugin is part of the build")
onlyWithScrooge := {
val structure: BuildStructure = Project.extract(state.value).structure
val pluginNames = structure.units.values.map { un => un.unit.plugins.detected }
pluginNames.foreach(
plugins => {
plugins.plugins.modules.foreach {
plugin =>
if (plugin._1 == "com.twitter.scrooge.ScroogeSBT") {
// i get here at least
scroogeThriftDependencies in Compile := Seq("shared_2.10")
mappings in (Compile,packageBin) ~= { (ms: Seq[(File, String)]) =>
ms filter { case (file, toPath) =>
!toPath.startsWith(s"shared")
}
}
}
}
}
)
}
(scroogeGen in Compile) <<= (scroogeGen in Compile) dependsOn onlyWithScrooge