【问题标题】:AspectJ + Gradle + Lombok does not workAspectJ + Gradle + Lombok 不起作用
【发布时间】:2015-09-30 08:44:48
【问题描述】:

在 ANT 中对此有解决方案,但我们如何使用 gradle 来实现呢?是否可以通过编译后编织来做到这一点。意思是用 lombok 编译以获取所有生成的 delombok 代码,然后在这个生成的 delombok 代码上编织方面而不是 aspectJ 将其清除?

下面的这些 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

谢谢你, 塞泽尔

【问题讨论】:

    标签: gradle aspectj lombok compile-time-weaving


    【解决方案1】:

    实际上这个问题已经很老了,但是由于遇到了同样的问题,我还是想分享我的解决方案。

    我找到的最佳解决方案是this。事实上,Gradle 中没有对 AspectJ 的内置支持,并且现有的插件(例如,Gradle AspectJ 插件)不适用于 Lombok。所以解决方案是在你的代码中手动启用编译时编织。 为 Java 8 准备好的 gradle.build 是这样的

    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,此外所有不必要的东西都被删除了。

    【讨论】:

    • 我试过你的方法,但是构建就像永远一样卡在这里> Task :compileJava
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2014-11-12
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多