# How to have a task tell compileJava to dependsOn(this)?

**URL:** <https://discuss.gradle.org/t/how-to-have-a-task-tell-compilejava-to-dependson-this/3869>\
**Category:** Old Forum Archive\
**Created:** [February 25, 2014, 10:58pm UTC](https://discuss.gradle.org/t/how-to-have-a-task-tell-compilejava-to-dependson-this/3869 "2014-02-25T22:58:00Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Monty\_Zukowski](https://avatars.discourse-cdn.com/v4/letter/m/858c86/32.png) [@Monty\_Zukowski](https://discuss.gradle.org/u/Monty_Zukowski)\
**Post date:** [February 25, 2014, 10:58pm UTC](https://discuss.gradle.org/t/how-to-have-a-task-tell-compilejava-to-dependson-this/3869/1 "2014-02-25T22:58:00Z")

</div>

I’m trying to DRY up this code. Specifically, I’d like class AntlrTask to automatically call something like:

```gradle
compileJava {
    dependsOn this
    source this.generatedJavaFiles
}

```

However, if I just put that block into my AntlrTask definition it complains. How can I say that compileJava dependsOn all of the AntlrTasks?

Sample code below:

```gradle
dependencies {
    antlr2 ':antlr:2.7.7'
    antlr3 ':antlr-tool:3.0', ':antlr-runtime:3.0.1', ':antlr:2.7.7', ':stringtemplate:3.2'
    antxr
':antxr:0.9.0'
}
  task generateMappingParser(type: AntlrTask) {
    generatedJavaFiles = [file(destinationDir+"MappingParser.java")]
    grammarSources = [file(destinationDir+'mapping.antxr')]
    antlrTool = 'com.javadude.antxr.Tool'
    toolClasspath = configurations.antxr
}
  task generateChoreoParser(type: AntlrTask) {
    generatedJavaFiles = [file(destinationDir+"ChoreoParser.java")]
    grammarSources = [file(destinationDir+'choreo.antxr')]
    antlrTool = 'com.javadude.antxr.Tool'
    toolClasspath = configurations.antxr
}
  task generateExpressionParser(type: AntlrTask) {
    generatedJavaFiles = [file(destinationDir+"ExpressionParser.java")]
    grammarSources = [file(destinationDir+'ExpressionGrammar.g')]
    antlrTool = 'antlr.Tool'
    toolClasspath = configurations.antlr2
}
  compileJava {
    dependsOn generateMappingParser, generateChoreoParser, generateExpressionParser
    source generateMappingParser.generatedJavaFiles, generateChoreoParser.generatedJavaFiles, generateExpressionParser.generatedJavaFiles
}
  class AntlrTask extends DefaultTask {
  def destinationDir = "src/main/java/com/temboo/arcturus/choreo/"
      @OutputFiles
  def generatedJavaFiles
    @InputFiles
  def grammarSources
      def toolClasspath
  def antlrTool
      @TaskAction
  def runAntlr() {
        project.javaexec {
            main = antlrTool
            classpath = toolClasspath
            args = ["-o", "${destinationDir}", grammarSources].flatten()
        }
  }
}

```

---

<div class="post-metadata">

**Author:** ![Peter\_Niederwieser](https://avatars.discourse-cdn.com/v4/letter/p/9f8e36/32.png) [@Peter\_Niederwieser](https://discuss.gradle.org/u/Peter_Niederwieser)\
**Post date:** [February 25, 2014, 11:51pm UTC](https://discuss.gradle.org/t/how-to-have-a-task-tell-compilejava-to-dependson-this/3869/2 "2014-02-25T23:51:00Z")

</div>

```gradle
compileJava {
    dependsOn tasks.withType(AntlrTask)
}

```
