Set*_*zer 7 aspectj compile-time-weaving gradle lombok
ANT中有一个关于此问题的解决方案,但我们如何通过gradle实现这一目标?是否可以通过编译后编织来实现.意思是用lombok编译来获取所有生成的delombok代码,然后在这个生成的delombok代码上编织方面而不是aspectJ擦除它?
以下这些SO帖子似乎没有任何关于如何解决这个问题的决定?
Lombok无法与AspectJ一起使用? 使用AspectJ + Lombok的Gradle + RoboBinding不兼容
DiscussionThread http://aspectj.2085585.n4.nabble.com/AspectJ-with-Lombok-td4651540.html
谢谢Setzer
实际上这个问题已经很老了,但是由于遇到了同样的问题,我无论如何都想分享我的解决方案。
我发现的最好的解决方案是这样的。实际上,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
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在上面提到的文章中找到其他说明。这里给出的 build.gradle 是本文中给出的 build.gradle 的更新版本,允许使用 Java 8 和 AspectJ 版本 1.8.9,此外所有不必要的东西都被删除了。
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |