javamavenjavadoclombokmaven-javadoc-plugin

Javadoc "cannot find symbol" error when using Lombok's @Builder annotation


I have a class looking as below :

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

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

I get the following error :

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.4:javadoc (default-cli) on project foo: An error has occurred in JavaDocs report generation:
[ERROR] Exit code: 1 - /home/workspace/foo/src/main/java/com/foo/Foo.java:34: error: cannot find symbol
[ERROR] public static FooBuilder builder(String _param)
[ERROR] ^
[ERROR] symbol: class FooBuilder
[ERROR] location: class Foo


Solution

  • In order to solve this issue, I have to use Lombok's delombok feature (cf : https://projectlombok.org/features/delombok).

    lombok doesn't cover all tools. For example, lombok cannot plug into javadoc ... which run on java sources. Delombok still allows you to use lombok with these tools by preprocessing your java code into java code with all of lombok's transformations already applied.

    I did this using Maven by adding the following plugins :

    <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>