相关疑难解决方法(0)

编写自定义Lombok Annotation处理程序

我想编写自定义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.jar的内容
  • 将.SCL.lombok文件重命名为.class
  • 将生成的目录添加到编译类路径中

另外,为了能够使用我的自定义处理程序,我需要创建一个包含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)

java lombok

26
推荐指数
1
解决办法
2393
查看次数

我可以使用 Lombok @Builder 传递父类作为参数吗?

我想创建一个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,是否有一个构建器可以让我创建一个ChildParent和缺失值作为参数传递的实例?

如果我可以写一些类似的东西会更容易:

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)

java lombok

8
推荐指数
2
解决办法
6354
查看次数

如何导入 lombok JavacAnnotationHandler 进行自定义注释?

我正在尝试遵循此堆栈溢出答案来创建我自己的自定义注释。但是我无法导入JavacAnnotationHandler. 我查看了 lombok 1.18.2 jar,它包含的文件是:lombok/javac/JavacAnnotationHandler.SCL.lombok

我怎样才能将它导入到我的java类中?

java annotation-processing lombok

1
推荐指数
1
解决办法
1454
查看次数

标签 统计

java ×3

lombok ×3

annotation-processing ×1