将Dagger2与Lombok一起使用

Jes*_*ica 8 lombok dagger dagger-2

有没有人将Lombok 1.16与Dagger2一起使用?

我当前的代码如下:

@AllArgsConstructor(onConstructor = @__(@Inject))
public class JuiceMaker {
    private final Apple apple;
Run Code Online (Sandbox Code Playgroud)

错误是:

JuiceMaker cannot be provided without an @Inject constructor or from an @Provides-annotated method.
Run Code Online (Sandbox Code Playgroud)

如果没有Lombok批注,这实际上可以工作,因此:

public class JuiceMaker {
    private final Apple apple;
    @Inject
    public JuiceMaker(Apple apple){
        this.apple = apple
    }
}
Run Code Online (Sandbox Code Playgroud)

作品

Ore*_*Ore 5

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

这不是对问题的直接回答,这个问题似乎已经解决了,但可以作为未来搜索者的参考:

如果您使用 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>
Run Code Online (Sandbox Code Playgroud)

您必须在此处添加 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>
Run Code Online (Sandbox Code Playgroud)

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


Phi*_*ppe 2

问题是,当 dagger 注释处理器查找@Inject构造函数时,lombok 尚未生成它们。一种解决方案可能是 delombok 源代码然后编译它。但我个人没有这样做过。