我有一堂课,如下所示:
@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):JavaDocs报表生成中发生错误:
[错误]退出代码:1-/home/workspace/foo/src/main/java/com/foo/Foo.java:34:错误:找不到符号
[错误]公共静态FooBuilder构建器(String _param)
[错误] ^
[错误]符号:FooBuilder类
[错误]位置:Foo类
答案 0 :(得分:5)
为了解决此问题,我必须使用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>
答案 1 :(得分:2)
Lombok实际上能够填充部分定义的构建器类,因此您可以声明足够的构建器以使Javadoc满意并保留它。无需delombok。
以下在这种情况下对我有用:
@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 {}
}
旁注::您实际上可以使用此技术来添加一些客户构建器方法,因此具有一定的优势。我喜欢在有收藏集时重载构建器方法,因此可以一次添加一个。可能已经有一些技术可以做到这一点,但是很高兴知道您可以手动改进构建器。
答案 2 :(得分:0)
更新
如果你使用 maven-javadoc-plugin 3.2.0+ 你可以这样配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<doclint>none</doclint>
</configuration>
</plugin>
doclint
配置将使 javadoc 插件不再抛出错误。它还将禁用 lint,但如果您同意,这可能是最好的方法,而不是 delombok。
如果您使用任何 CI 工具来构建和编译您的项目,您可以创建一个单独的作业来检查 javadoc lint。
对我来说,在构建中禁用 lint 并不是一件坏事。 Javadoc 很重要,但不应因为我使用 Lombok 而阻止我构建应用程序。