编辑:在我做了一些清洁后,初始解决方案失败了,而且它也不适用于 Proguard。请参阅下面的更新解决方案。
为了解决这个问题,我不得不创建自己的自定义注释处理器。这个处理器的想法是确保 Lombok 和 Parceler 使用的处理器的处理器顺序。
以下是我为解决此问题而采取的步骤:
第1步
在根项目下创建一个新的 Java 模块。给它起任何名字,例如parceler-lombok
,使用你选择的任何类名/包。
第2步
将 lombok 和 Parceler 注解类添加为新模块的依赖项,并设置源兼容性。
//File: parceler-lombok/build.gradle
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'org.projectlombok:lombok:1.16.16'
compile 'org.parceler:parceler:1.1.9'
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
第 3 步
在模块的主源文件夹中创建以下目录:src/main/resources/META-INF/services
第4步
在上面的目录中创建一个名为的文件javax.annotation.processing.Processor
。
第 5 步
编辑该文件,并添加以下行。
lombok.launch.AnnotationProcessorHider$AnnotationProcessor
lombok.launch.AnnotationProcessorHider$ClaimingProcessor
org.parceler.ParcelAnnotationProcessor
这是模块中所有可用注释处理器的声明。顺序显示 Lombok 注释处理器应该在 parceler 之前加载
第 6 步
现在我们有了“自定义注释处理器”,回到你的主应用程序模块,在你的 app 的 build.gradle 文件中,执行以下操作:
- 删除 lombok 依赖项(annotatorProcessor,提供或编译)指令
- 移除 parceler annotationProcessor 依赖(即
org.parceler:parceler
),保持 API 依赖不变。
- 现在将您的自定义注释处理器添加为依赖项
- 最后,确保 Java 1.7 兼容性
请参阅下面的片段:
//File: app/build.gradle
android {
//...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
//...
}
dependencies {
// ...
//Remove these ones
//provided 'org.projectlombok:lombok:1.16.16'
//annotationProcessor 'org.parceler:parceler:1.1.9'
//leave parceler API
compile 'org.parceler:parceler-api:1.1.9'
provided project(':parceler-lombok')
}
使用提供可确保注释处理器类不与您的应用程序捆绑在一起。
以下文章非常有帮助: