当前位置: 首页 > 知识库问答 >
问题:

SonarQube+Lombok构型

壤驷经国
2023-03-14

我正在启动一个新项目,我需要使用sonarqube,我想使用lombok,我已经在Eclipse中配置了它,除了静态分析之外,所有的工作都很好。

  • 未使用的专用字段:当我有@data类时,所有字段都报告为未使用的专用字段
  • @getter(lazy=true):当我使用此批注时,我会得到已知为非空值的冗余nullcheck请参阅@getter(lazy=true)(这与编译的代码有关)。

我认为一个可能的解决方案是delombok项目,编译并运行Sonar。

Sonarqube Jira中的类似问题:

  • [codegen-lombok]错误警告提示(未使用的专用字段)
  • 提供一个新的java规则来检查未使用的私有字段,该规则将支持字节码生成(cd Lombok)
  • [Codegen-Lombok]错误警告提示

(@suppresswarnings(“pmd.unusedprivatefield”)解决方案不适用于最新的Sonarqube 4.2)

我该如何解决这个问题呢?

共有1个答案

赏阳嘉
2023-03-14

作为一种变通方法,我现在让sonar对delombok生成的代码进行分析。

我想这也不是一个完美的解决方案,因为我分析的是生成的代码,而不是开发人员实际编写的代码。但我发现它比使用@suppresswarnings、//nosonar或关闭Sonar中的规则更好。

请参阅下面的一个示例,以在Maven中实现此功能。将此添加到pom.xml中:

<properties>
    ...
    <!-- This is exposed as a workaround to do the sonar analysis in combination with delombok -->
    <src.dir>src/main/java</src.dir>
    ...
</properties>
...
<plugins>
    ...
    <plugin>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok-maven-plugin</artifactId>
        <version>${lombok-plugin.version}</version>
        <executions>
            <execution>
                <phase>verify</phase>
                <goals>
                    <goal>delombok</goal>
                </goals>
                <configuration>
                    <addOutputDirectory>false</addOutputDirectory>
                    <sourceDirectory>src/main/java</sourceDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>
    ...
</plugins>
...
<profiles>
...
<profile>
        <!-- we have to use this profile to analyse code with sonar until https://jira.codehaus.org/browse/MSONAR-70 is fixed ! -->
        <id>sonar</id>
        <properties>
            <src.dir>target/generated-sources/delombok</src.dir>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok-maven-plugin</artifactId>
                    <version>${lombok-plugin.version}</version>
                    <executions>
                        <execution>
                            <phase>verify</phase>
                            <goals>
                                <goal>delombok</goal>
                            </goals>
                            <configuration>
                                <addOutputDirectory>true</addOutputDirectory>
                                <sourceDirectory>src/main/java</sourceDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </build>
    </profile>
    ...
</profiles>
 类似资料:
  • 我有一个用Lombok的@Data注释的类,在一个gradle项目中,使用Sonarqube和Jacoco插件。 源代码可在 github 上找到 我有一个本地运行的sonarqube服务器作为docker容器运行,开始如下: 我添加了一个“lombok.config”文件,要求它添加@lombok。根据文档中的“全局配置键”部分,为其生成的代码生成注释。 我有以下声纳状态配置。 当我第一次运行s

  • 我用jacoco做报道。当我看jacoco报告时,覆盖面似乎不错。但是在Sonarqube中,覆盖率很低,因为它说来自lombok的< code>@Data注释没有被测试覆盖。 编译的类被标记为但 Sonar 不会忽略它。 如何排除分析的?

  • 我使用Gradle 4.10.2(但使用最新版本让它工作会很好)。这是我的gradle文件: 当我执行时,它会失败并出现很多错误。这些错误都是由于没有找到lombok自动生成的getter、setter等。如何解决这些错误?我看过其他关于这个问题的帖子,他们都建议将lombok依赖项添加为 使现代化 以下是我得到的几个错误: 日志应该来自注释。并且来自于在CarDto上注释的@Builder(Bu

  • @adilooze解决方案

  • 已经给出了所有的DTO@data、@noargsconstructor、@allargsconstructor,所以理想情况下所有的构造函数都应该可用。 我已经尝试用新旧版本的Spring tool suite和更改的lombok jar来构建这个项目。但同样或不同的错误仍在出现。 用STS4和STS 3.9.7尝试,3.9.8同样的问题即将到来。尝试龙目岛1.16.22、1.18.0、1.18.