2015-07-11 15 views
6

C'è una soluzione in ANT a riguardo, ma come possiamo farlo con gradle? È possibile farlo tramite la tessitura post-compilazione. Significa compilare con lombok per ottenere tutto il codice delombok generato, quindi avere l'aspetto di tessere su questo codice delombok generato invece dell'aspetto che si sta cancellando?AspectJ + Gradle + Lombok non funziona

Questi post SO di seguito non sembrano avere nulla di conclusivo su come risolvere questo problema?

Lombok does not work with AspectJ? Gradle + RoboBinding with AspectJ + Lombok are not compatible together

DiscussionThreadhttp://aspectj.2085585.n4.nabble.com/AspectJ-with-Lombok-td4651540.html

Grazie, Setzer

+0

* Chiede scusa volevo dire - AspectJ + Gradle + Lombok non funziona. – Setzer

risposta

0

In realtà questa domanda è abbastanza vecchio, ma dal momento che un imbattuto lo stesso problema voglio condividere la mia soluzione in ogni caso.

La soluzione migliore che ho trovato è this. In realtà non esiste un supporto integrato per AspectJ in Gradle e i plugin esistenti (ad esempio, il plugin Gradle AspectJ) non funzionano con Lombok. Quindi la soluzione è quella di abilitare manualmente la tessitura in tempo reale nel tuo codice. Un pronto ad andare gradle.build per Java 8 è presente

buildscript { 
    repositories { 
     jcenter() 
     maven { url 'http://repo.spring.io/plugins-release' } 
    } 

    dependencies { 

    } 
} 

apply plugin: 'idea' // if you use IntelliJ 
apply plugin: 'java' 

ext { 
    aspectjVersion = '1.8.9' 
    springVersion = '4.2.1.RELEASE' 
} 

repositories { 
    jcenter() 
} 

configurations { 
    ajc 
    aspects 
    compile { 
     extendsFrom aspects 
    } 
} 

dependencies { 
    compile "org.aspectj:aspectjrt:$aspectjVersion" 
    compile "org.aspectj:aspectjweaver:$aspectjVersion" 

    ajc "org.aspectj:aspectjtools:$aspectjVersion" 
    aspects "org.springframework:spring-aspects:$springVersion" 
} 

def aspectj = { destDir, aspectPath, inpath, classpath -> 
    ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", 
      classpath: configurations.ajc.asPath) 

    ant.iajc(
      maxmem: "1024m", fork: "true", Xlint: "ignore", 
      destDir: destDir, 
      aspectPath: aspectPath, 
      inpath: inpath, 
      classpath: classpath, 
      source: project.sourceCompatibility, 
      target: project.targetCompatibility 
    ) 
} 

compileJava { 
    doLast { 
     aspectj project.sourceSets.main.output.classesDir.absolutePath, 
       configurations.aspects.asPath, 
       project.sourceSets.main.output.classesDir.absolutePath, 
       project.sourceSets.main.runtimeClasspath.asPath 
    } 
} 

compileTestJava { 
    dependsOn jar 

    doLast { 
     aspectj project.sourceSets.test.output.classesDir.absolutePath, 
       configurations.aspects.asPath + jar.archivePath, 
       project.sourceSets.test.output.classesDir.absolutePath, 
       project.sourceSets.test.runtimeClasspath.asPath 
    } 
} 

spiegazione supplementare si possono trovare nella article already mentioned above. Il build.gradle fornito qui è una versione aggiornata di quella fornita nell'articolo per consentire l'uso di Java 8 e AspectJ versione 1.8.9 e inoltre tutte le cose non necessarie vengono rimosse.