gpt4 book ai didi

gradle - AspectJ + Gradle + Lombok 不起作用

转载 作者:行者123 更新时间:2023-12-04 12:53:18 27 4
gpt4 key购买 nike

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

下面的这些SO帖子似乎对如何解决这个问题没有任何结论?

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

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

谢谢,
塞策尔

最佳答案

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

我找到的最佳解决方案是 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 版,此外所有不必要的东西都被删除了。

关于gradle - AspectJ + Gradle + Lombok 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com