apply plugin: 'java' configurations { ajtools aspectpath } dependencies { ajtools "org.aspectj:aspectjtools:$aspectjVersion" compile "org.aspectj:aspectjrt:$aspectjVersion" } task compileJava(overwrite: true, description: 'Compiles AspectJ Source', type: Ajc) { dependsOn processResources sourceSet = sourceSets.main inputs.files(sourceSets.main.java.srcDirs) outputs.dir(sourceSet.classesDir) aspectPath = configurations.aspectpath } task compileTestJava(overwrite: true, description: 'Compiles AspectJ Test Source', type: Ajc) { dependsOn processTestResources, compileJava, jar sourceSet = sourceSets.test inputs.files(sourceSets.test.java.srcDirs) outputs.dir(sourceSet.classesDir) aspectPath = files(configurations.aspectpath, jar.archivePath) } class Ajc extends DefaultTask { SourceSet sourceSet FileCollection aspectPath Ajc() { logging.captureStandardOutput(LogLevel.INFO) } @TaskAction def compile() { println "Running ajc ..." ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: project.configurations.ajtools.asPath) ant.iajc(classpath: sourceSet.compileClasspath.asPath, fork: 'true', destDir: sourceSet.classesDir.absolutePath, source: project.convention.plugins.java.sourceCompatibility, target: project.convention.plugins.java.targetCompatibility, aspectPath: aspectPath.asPath, sourceRootCopyFilter: '**/*.java', showWeaveInfo: 'true') { sourceroots { sourceSet.java.srcDirs.each { pathelement(location: it.absolutePath) } } } } }