我想编写自定义Lombok Annotation处理程序.我知道http://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html.但是当前的lombok jar文件不包含许多.class文件,而是包含名为.SCL.lombok的文件.
我发现,.SCL.lombok文件是.class文件,Lombok的构建脚本在生成jar文件时重命名它们,而ShadowClassLoader能够加载这些类 - 并且首字母缩略词SCL似乎来自于此.似乎这样做的原因只是"避免使用基于SCL的jar污染任何项目的命名空间.IDE中的自动完成程序除了实际的公共API之外不会提出任何建议."
我只能通过编译我的自定义处理程序
另外,为了能够使用我的自定义处理程序,我需要创建一个包含lombok类和我的自定义处理程序的新fat jar.自定义lombok类加载器实质上阻止在其他多个jar中添加自定义处理程序.
这是扩展Lombok的唯一方法吗?或者我错过了什么?
我使用以下的buildscript
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 …Run Code Online (Sandbox Code Playgroud) 我想创建一个Child传递 aParent和其他附加参数的新实例。
例如,如果我有:
public class Parent {
public String param1;
public String param2;
// many parameters
public String paramN;
}
public class Child extends Parent {
public String subValue;
}
Run Code Online (Sandbox Code Playgroud)
使用 lombok,是否有一个构建器可以让我创建一个Child将Parent和缺失值作为参数传递的实例?
如果我可以写一些类似的东西会更容易:
Parent p = Parent.builder()
.param1("a")
.param2("b")
// many parameters
.paramN("b")
.build();
Child c = Child.builder(p).subValue("c").build();
Run Code Online (Sandbox Code Playgroud) 我正在尝试遵循此堆栈溢出答案来创建我自己的自定义注释。但是我无法导入JavacAnnotationHandler. 我查看了 lombok 1.18.2 jar,它包含的文件是:lombok/javac/JavacAnnotationHandler.SCL.lombok。
我怎样才能将它导入到我的java类中?