将Dagger2与Lombok一起使用

时间:2018-05-16 02:50:18

标签: dagger-2 lombok dagger

有没有人使用Dokger2的Lombok 1.16?

我目前的代码如下:

@AllArgsConstructor(onConstructor = @__(@Inject))
public class JuiceMaker {
    private final Apple apple;

错误是:

JuiceMaker cannot be provided without an @Inject constructor or from an @Provides-annotated method.

如果没有Lombok注释,这实际上是有效的,所以:

public class JuiceMaker {
    private final Apple apple;
    @Inject
    public JuiceMaker(Apple apple){
        this.apple = apple
    }
}

作品

3 个答案:

答案 0 :(得分:0)

问题在于,当匕首注释处理器寻找@Inject构造函数时,它们不是lombok生成的。一种解决方案可能是释放源代码,然后对其进行编译。但是我个人还没有这样做。

答案 1 :(得分:0)

这是我的答案here的复制粘贴版本:

这不是似乎已解决的问题的直接答案,但可作为将来搜索者的参考:

如果您使用Dagger(或其他工具)来处理

之类的注释
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.7.0</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.15</version>
          </path>
        </annotationProcessorPaths>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    ....
  </plugins>
</build>

您必须在此处添加lombok作为路径,例如

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.7.0</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.15</version>
          </path>

          <!-- SOLUTION --> 
          <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
          </path>


        </annotationProcessorPaths>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    ....
  </plugins>
</build>

但是您仍然必须将lombok列为提供的依赖项;)

答案 2 :(得分:0)

我正在尝试解决它,但不幸的是,我仍然没有做到。

到目前为止,我已经取得了以下进展(在Gradle中):使用Ant任务作为函数,并将源代码生成到某些构建文件夹中,之后匕首处理器可能会在其中找到该文件夹​​。但是我承认这种方式可能会很尴尬。

以下代码段尝试以与项目无关的方式使用lombok.jar中当前使用的ant任务。

CustomAADAppRoleStatelessAuthFilter

,最后尝试将生成的代码附加到Dagger可以扫描的其他位置。

AADAuthenticationFilterAutoConfiguration

我当前正在使用Gradle版本6.0.1和lombok 1.18.10。我不确定它是否向后兼容。