使用Lombok的@Builder注释时出现Javadoc“找不到符号”错误

yun*_*dus 9 java javadoc maven lombok maven-javadoc-plugin

我有一堂课,如下所示:

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

    /** My custom builder.*/
    public static FooBuilder builder(String _param){
        return builder().param(_param);
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

Dav*_*ins 18

Lombok 实际上能够填充部分定义的构建器类,因此您可以声明足够的构建器以使 Javadoc 满意,然后将其保留。无需德龙博克。

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

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

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

    public static class FooBuilder {}

}
Run Code Online (Sandbox Code Playgroud)

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


yun*_*dus 11

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

lombok不能涵盖所有工具。例如,lombok无法插入在Java源代码上运行的javadoc...。Delombok仍然允许您将lombok与这些工具一起使用,方法是将Java代码预处理为具有所有lombok转换的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>
Run Code Online (Sandbox Code Playgroud)

  • 默认的delombok.`outputDirectory`是`${project.build.directory}/ generated-sources/delombok`,所以你只需要在maven-javadoc-plugin中指定 (5认同)