Gradle: How to add a custom task after compilation but before packaging files into a Jar?

14,221

Finally figured out the way to do it!

task instrument(type: JavaExec) {
    //your instrumentation task steps here
}
compileJava.doLast {
    tasks.instrument.execute()
}
jar {
    //whatever jar actions you need to do
}

Hope this can prevent others from being stuck on this problem for days :)

Share:
14,221

Related videos on Youtube

Hongyi Li
Author by

Hongyi Li

UC Berkeley Computer Science grad. Previously worked as a software engineer and a technical program manager.

Updated on July 21, 2022

Comments

  • Hongyi Li
    Hongyi Li almost 2 years

    My build.gradle is currently:

    project(':rss-middletier') {
        apply plugin: 'java'
    
        dependencies {
            compile project(':rss-core')
            compile 'asm:asm-all:3.2'
            compile 'com.sun.jersey:jersey-server:1.9.1'
            compile group: 'org.javalite', name: 'activejdbc', version: '1.4.9'
        }
    
        jar {
            from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
                exclude "META-INF/*.SF"
                exclude "META-INF/*.DSA"
                exclude "META-INF/*.RSA"
            }
            manifest { attributes 'Main-Class': 
    'com.netflix.recipes.rss.server.MiddleTierServer' }
        }
    }
    

    But rather than packaging these compiled classes into a jar directly, I'd like to instrument them first by running the following task:

    task instrument(dependsOn: 'build', type: JavaExec) {
        main = 'org.javalite.instrumentation.Main'
        classpath = buildscript.configurations.classpath
        classpath += project(':rss-middletier').sourceSets.main.runtimeClasspath
        jvmArgs '-DoutputDirectory=' + project(':rss-middletier').sourceSets
            .main.output.classesDir.getPath()
    }
    

    Only after I have instrumented these classes, I will then want to package them into a JAR file. Is there a way so that I can do this instrumentation before the packaging?

    Thanks a lot!!!