首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parceler和Lombok不一起工作?

Parceler和Lombok不一起工作?
EN

Stack Overflow用户
提问于 2016-05-31 10:22:48
回答 3查看 1.9K关注 0票数 3

对于我的android应用程序,我使用parceler库和lombok库。

下面是我们班的注释:

代码语言:javascript
复制
@Table
@ToString
@Getter
@NoArgsConstructor
@Parcel
public class MyClass {

然而,在gradle构建过程中,Parceler抱怨没有默认的空构造函数。那么,这是否意味着它不承认@NoArgsConstructor注释,这两个注释根本就不能一起工作?因为,例如,SugarORM与它没有任何问题。还是我只是遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-31 23:19:10

这涉及到Lombok如何向类添加代码。Lombok使用Java注释处理器中的已知诡计向类添加代码。这个添加的代码在批注处理器循环期间对Parceler是不可见的,并且使Parceler不知道添加的no-args构造函数。

我建议手动添加no-args构造函数,用@ParcelConstructor注释现有的构造函数(假设您有),或者考虑使用具有@Parcelable注释的lombok叉格里西

我们最近遇到了一个问题:https://github.com/johncarl81/parceler/issues/177

票数 4
EN

Stack Overflow用户

发布于 2018-01-05 12:49:07

编辑:在我做了一些清理之后,初始解决方案失败了,而且,它也不适用于Proguard。请参阅下面更新的解决方案。

为了解决这个问题,我必须创建自己的自定义注释处理器。这个处理器的目的是确保Lombok和Parceler所使用的处理器的顺序。

下面是我解决这个问题所遵循的步骤:

步骤1

在根项目下创建一个新的Java模块。将其命名为任意名称,例如parceler-lombok,使用您选择的任何类名/包。

步骤2

将lombok和Parceler注释类作为依赖项添加到新模块,并设置源代码兼容性。

代码语言:javascript
复制
//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/services

步骤4

在上面的目录中创建一个名为javax.annotation.processing.Processor的文件。

步骤5

编辑该文件,并添加以下行。

代码语言:javascript
复制
lombok.launch.AnnotationProcessorHider$AnnotationProcessor
lombok.launch.AnnotationProcessorHider$ClaimingProcessor
org.parceler.ParcelAnnotationProcessor

这是模块中可用的所有注释处理器的声明。顺序显示,Lombok注释处理器应该在parceler之前加载

步骤6

现在我们有了“自定义注释处理器”,回到应用程序的build.gradle文件中的主应用程序模块中,执行以下操作:

  • 删除lombok依赖项(annotatorProcessor,提供或编译)指令
  • 删除parceler annotationProcessor依赖项(即org.parceler:parceler),保持原样的API依赖项。
  • 现在将自定义注释处理器添加为依赖项。
  • 最后,确保Java1.7的兼容性

见下面的片段:

代码语言:javascript
复制
//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')
}

使用提供确保注释处理器类不与您的应用程序捆绑在一起。

以下文章非常有用:

票数 1
EN

Stack Overflow用户

发布于 2017-05-15 17:49:43

在构建空对象的静态方法上使用@ParcelFactory:

代码语言:javascript
复制
@Builder
public class MyClass {
    @ParcelFactory
    static MyClass fromParcel() {
        return builder().build();
    }
}

这个技巧可以与Jackson和其他库一起使用,除了构造函数之外,还允许您注释静态工厂方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37543057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档