Javadoc“找不到符号”错误,当使用龙目岛的@Builder注释

我有一个班级,如下所示:

@Data
@Builder
public class Foo {
    private String param;

    /** My custom builder.*/
    public static FooBuilder builder(String _param){
        return builder().param(_param);
    }
}

我收到以下错误:

[错误]未能在项目 foo 上执行目标 org.apache.maven.plugins:maven-javadoc-plugin:2.10.4:javadoc (default-cli) 在项目 foo 上:JavaDocs 报告生成中发生错误:
[错误] 退出代码: 1 - /home/workspace/foo/src/main/java/com/foo/foo.java:34: 错误: 找不到符号
[ERROR] 公共静态 FooBuilder builder(String _param)
[ERROR] ^
[ERROR] 符号: class FooBuilder [ERROR] 位置: class FooBuilder


答案 1

Lombok实际上能够填写一个部分定义的构建器类,因此您可以声明足够的构建器以使Javadoc满意并留在那里。无需德龙目。

在这种情况下,以下内容对我有用:

@Data
@Builder
public class Foo {
    private String param;

    /** My custom builder.*/
    public static FooBuilder builder(String _param){
        return builder().param(_param);
    }

    // Add this line and all is good
    public static class FooBuilder {}

}

旁注:您实际上可以使用此技术来添加一些客户构建器方法,因此它具有特权。我喜欢在有集合时重载生成器方法,以便一次可以处理一个项目。可能已经有一些技术可以做到这一点,但很高兴知道您可以手动改进构建器。

以下是我喜欢做的一件常见的事情:

@Builder
public class Foo {
    private final String command;
    private final List<String> params;
    private final boolean background;
    
    public static class FooBuilder {
        public FooBuilder params(final String... params) {
            this.params = Arrays.asList(params);
            return this;
        }
    }
}

在上面,构建器方法已被自定义为采用var args。另一种生成器方法仍将由龙目岛创建。params


答案 2

为了解决这个问题,我必须使用龙目岛的功能(参见:https://projectlombok.org/features/delombok)。delombok

龙目岛并不涵盖所有工具。例如,龙目岛无法插入javadoc ...在Java源代码上运行。Delombok仍然允许您将这些龙目岛与这些工具一起使用,方法是将java代码预处理为java代码,并且已经应用了龙目岛的所有转换。

我通过添加以下插件来使用Maven来做到这一点:

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>1.18.0.0</version>
    <configuration>
        <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
        <outputDirectory>${delombok.output}</outputDirectory>
        <addOutputDirectory>false</addOutputDirectory>
    </configuration>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>delombok</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <sourcepath>${delombok.output}</sourcepath>
    </configuration>
</plugin>

推荐