I am able to automatically execute a task before compilation with:
compile in Compile <<= (compile in Compile).dependsOn(myTask)
How do I do the same but after compile?
I know I can do:
compile in Compile <<= (compile in Compile) map{x=>
// post-compile work
doFoo()
x
}
to execute arbitrary Scala code, but I need to automatically execute the target task itself when a compile event occurs
Doing something like:
val foo = TaskKey[Unit]("foo", "...")
val fooTask = foo <<= scalaInstance map {si =>
...
} dependsOn(compile in Compile)
works if I type "foo" from sbt> prompt; i.e. task is executed after compile, but the goal is to hook into compile task itself, so anytime a compilation occurs, the foo task is automatically called after compilation completes.
Is this possible, or am I going about things in the wrong way to hook into the built-in compile task?
In general, there is some task that depends on your task.
If compile
is being used to mean "compile and set things up for Grunt", then create a prepareGrunt
task that depends on compile
and myTask
and run that instead.
If myTask
should run before the project's classes and resources are used by something else, then make it a dependency of exportedProducts
. Tasks like run
and test
and tasks in dependent projects will get the exported classpath entries from that task.
The danger in "run sometime after compile" is that myTask
won't be run before the task that actually needs it. There is the triggeredBy
method on Initialize[Task[T]]
, but it is easily abused and should only be used when the output of the task is known to be used only after all tasks execute.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With