How to execute a task of type 'JavaExec' before compileJava

10,733

If you need to execute this class before compiling the code, you can't give it classpath = sourceSets.main.runtimeClasspath. The latter includes the compiled code, and so Gradle automatically infers runSimple.dependsOn compileJava, which together with your compileJava.dependsOn runSimple gives a cyclic task dependency. (To be precise, Gradle infers runSimple.dependsOn classes, which in turn depends on compileJava.)

Share:
10,733
amitbansalite
Author by

amitbansalite

Updated on June 15, 2022

Comments

  • amitbansalite
    amitbansalite almost 2 years

    I need to execute a java class which has a main method in it before compiling the code. This is what I have tried so far:

    task runSimple(type: JavaExec) {
        main = 'jjrom.ObjectGen'
        classpath = sourceSets.main.runtimeClasspath
        File prop1 = file(propFilePath)
        args '-sqlserver', '-force', prop1.path
        println "I'm done executing."
    }
    compileJava {
        dependsOn runSimple
    }
    

    When I execute this script with the command "gradle compileJava" , I get this error message:

    I'm done executing.

    FAILURE: Build failed with an exception.

    What went wrong: Circular dependency between the following task: :classes --- :compileJava --- :runSimple --- :classes (*)

  • shabunc
    shabunc over 3 years
    println won't be invoked after executing, your assumption is wrong.