Написание пользовательских обработчиков аннотаций Lombok

Я хочу написать собственные обработчики аннотаций Lombok. я знаюhttp://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html, Но текущий файл jar lombok содержит не много файлов .class, а файлы с именем .SCL.lombok.

Я обнаружил, что файлы .SCL.lombok - это файлы .class, сценарий сборки Lombok переименовывает их при создании файла jar, иShadowClassLoader способен загружать эти классы - и аббревиатура SCL, кажется, происходит от этого. Кажется, причина этого в том, чтобы просто «избежать загрязнения пространства имен любого проекта с помощью jar-файлов на основе SCL. Автозаполнения в IDE НЕ будут предлагать ничего, кроме реального публичного API».

Я смог собрать свой пользовательский обработчик только

распаковка содержимого lombok.jarпереименование файлов .SCL.lombok в .classдобавление результирующего каталога в путь к классам компиляции

Кроме того, чтобы иметь возможность использовать мой пользовательский обработчик, мне нужно было создать новый толстый jar-файл, содержащий как классы lombok, так и мой пользовательский обработчик. Пользовательский загрузчик класса 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 {
    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)
}

Ответы на вопрос(1)

Ваш ответ на вопрос