参考文章:Just Coding (nkcoder.github.io)
sonarqube扫描lombok注解的java代码时,总是提示Remove this unused "name" private field.
这类信息。
这是因为sonarqube在扫描代码时,不能识别Lombok的注解导致。
解决方法:
一般可以在 build 工具,如 maven/gradle 中,定义一个 goal/task,将需要的依赖包拷贝到一个指定目录,然后就可以引用了。比如使用maven-dependency-plugin
,配置如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <overWrite>false</overWrite> <outputDirectory>${project.build.directory}/libs</outputDirectory> </artifactItem> </artifactItems> <outputDirectory>${project.build.directory}/libs</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> </plugins> </build>
在 gradle 中配置如下:
task copyDependencies(type: Copy) { // from configurations.default from configurations.default.filter {it.name.startsWith("lombok")} into "${project.buildDir}/libs" }
同时在Jenkins的sonar扫描的时候,配置上sonar.java.libraries = target/libs/lombok-1.18.8.jar
。Jenkins的配置一般如下:
sonar.projectKey=cloud-app-sonar sonar.projectName=cloud-app-sonar sonar.projectBaseDir=./ sonar.java.binaries=./ sonar.branch.name=dev sonar.host.url=https://sonar.xxx.com sonar.java.libraries=./xxx/target/libs/*.jar
sonarqube在Jenkins中的配置说明:
sonar.projectkey=projectkey /* sonar平台中相对应项目的key */ sonar.projectName=sonarName /* sonar扫描完的项目名称 */ sonar.language=java /* 扫描对象的语言 */ sonar.java.source=1.8 /* 扫描java语言的版本 */ sonar.sourceFncoding=UTF-8 /* 扫描对象文件的编码 */ sonar.java.libraries= /xx.jar/ /* 项目使用的带有第三方库(jar或zip文件)的文件的都好分割路径。可以使用分隔符:sonar.java.libraries=path/tolibrary.jar,directory/**/*.jar */ sonar.source=file /* 扫描对象的路径 */ sonar.java.binaries=class /* 编译后的文件路径,包含与源文件对应的已编译字节码文件的目录的逗号分隔路径 */