编写自定义龙目岛注释处理程序
我想编写自定义龙目岛注释处理程序。我知道 http://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html。但是当前的龙目岛 jar 文件不包含许多.class文件,而是名为 .相反,SCL.lombok。
我发现,.SCL.lombok文件是.class文件,Lombok的构建脚本在生成jar文件时确实重命名了它们,ShadowClassLoader能够加载这些类 - 首字母缩略词SCL似乎来自此。这样做的原因似乎只是为了“避免使用基于SCL的jar污染任何项目的命名空间。IDE中的自动完成器不会建议除了实际的公共API之外的任何东西。
我只能通过以下方式编译我的自定义处理程序
- 打开龙目岛的内容.jar
- 重命名 .SCL.龙目岛文件到.class
- 将生成的目录添加到编译类路径
此外,为了能够使用我的自定义处理程序,我需要创建一个新的胖罐,其中包含龙目岛类和我的自定义处理程序。自定义 lombok 类装入器基本上可以防止在其他多个 jar 中添加自定义处理程序。
这是延长龙目岛的唯一途径吗?还是我错过了什么?
我正在使用以下构建脚本
apply plugin: 'java'
repositories {
jcenter()
}
configurations {
lombok
compileOnly
}
def unpackedAndRenamedLombokDir = file("$buildDir/lombok")
task unpackAndRenameLombok {
inputs.files configurations.lombok
outputs.dir unpackedAndRenamedLombokDir
doFirst {
mkdir unpackedAndRenamedLombokDir
delete unpackedAndRenamedLombokDir.listFiles()
}
doLast {
copy {
from zipTree(configurations.lombok.singleFile)
into unpackedAndRenamedLombokDir
rename "(.*)[.]SCL[.]lombok", '$1.class'
}
}
}
sourceSets {
main {
compileClasspath += configurations.compileOnly
output.dir(unpackedAndRenamedLombokDir, builtBy: unpackAndRenameLombok)
}
}
tasks.compileJava {
dependsOn unpackAndRenameLombok
}
dependencies {
compile files("${System.properties['java.home']}/../lib/tools.jar")
compile "org.eclipse.jdt:org.eclipse.jdt.core:3.10.0"
compile 'javax.inject:javax.inject:1'
lombok 'org.projectlombok:lombok:1.16.6'
compileOnly files(unpackedAndRenamedLombokDir)
}