Benutzerdefinierte Lombok Annotation-Handler schreiben
Ich möchte benutzerdefinierte Lombok Annotation-Handler schreiben. Ich kennehttp: //notatube.blogspot.de/2010/12/project-lombok-creating-custom.htm. Die aktuelle lombok-JAR-Datei enthält jedoch nicht viele .class-Dateien, sondern Dateien mit dem Namen .SCL.lombok.
Ich habe festgestellt, dass die .SCL.lombok-Dateien die .class-Dateien sind, das Build-Skript von Lombok sie beim Generieren der JAR-Datei umbenennt und das ShadowClassLoader ist in der Lage, diese Klassen zu laden - und das Akronym SCL scheint hieraus zu stammen. Der Grund hierfür scheint nur zu sein: "Vermeiden Sie, den Namespace eines Projekts mit einer SCL-basierten JAR-Datei zu kontaminieren. Autocompleters in IDEs schlagen nur die tatsächliche öffentliche API vor."
Ich konnte meinen benutzerdefinierten Handler nur mit @ kompiliere
inhalt der lombok.jar auspacken Umbenennen der .SCL.lombok-Dateien in .class Hinzufügen des resultierenden Verzeichnisses zum KompilierungsklassenpfadUm meinen benutzerdefinierten Handler verwenden zu können, musste ich ein neues Fettgefäß erstellen, das sowohl die Lombok-Klassen als auch meinen benutzerdefinierten Handler enthält. Der benutzerdefinierte Lombok-Klassenladeprogramm verhindert im Wesentlichen das Hinzufügen von benutzerdefinierten Handlern in anderen mehreren Jars.
Ist dies der einzige Weg, um Lombok zu erweitern? Oder vermisse ich etwas?
Ich verwende das folgende 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)
}