2015-07-11 139 views
6

在ANT中有關於這個的解決方案,但是我們如何用gradle完成這項工作?是否可以通過編譯後編織來完成。意思是用lombok編譯得到所有生成的delombok代碼,然後在這個生成的delombok代碼上使用方面編織而不是aspectJ將它擦掉?AspectJ + Gradle + Lombok不起作用

下面這些SO帖子似乎沒有任何關於如何解決這個問題的結論嗎?

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

謝謝 Setzer

+0

*我想說的道歉 - AspectJ + Gradle + Lombok不起作用。 – Setzer

回答

0

其實,這個問題很老了,但是由於跨越了同樣的問題來到我無論如何要分享我的解決方案。

我找到的最佳解決方案是this。事實上,在Gradle中沒有對AspectJ的內置支持,現有的插件(例如Gradle AspectJ插件)不能與Lombok一起使用。所以解決方案是在你的代碼中手動編譯時織入。 一個準備去gradle.build對Java 8是該

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 
    } 
} 

你可以在article already mentioned above找到更多的解釋。這裏給出的build.gradle是本文給出的更新版本,允許使用Java 8和AspectJ 1.8.9版本,此外所有不必要的東西都將被刪除。