sonarQube解决sonar.java.binarie必填参数的问题

简介: 新版的sonarQube在扫描java代码的时候,要求sonar-project.properties里sonar.java.binaries字段必须填写。这个sonar.java.binaries是“指向包含与源文件对应的已编译字节码文件的目录”,一般来说,maven框架的话,是target/classes。但是!问题来了,有的时候,我们的代码静态扫描是在还没有编译之前就开始的。例如我们从Jenkins的pipeline里定义了git 拉取代码,然后直接执行SonarQube analysis。并不进行编译。这样我们的Jenkins里是会报错的。那我们该如何处理呢?

问题阐述

新版的sonarQube在扫描java代码的时候,要求sonar-project.properties里sonar.java.binaries字段必须填写。这个sonar.java.binaries是“指向包含与源文件对应的已编译字节码文件的目录”,一般来说,maven框架的话,是target/classes。

但是!问题来了,有的时候,我们的代码静态扫描是在还没有编译之前就开始的。例如我们从Jenkins的pipeline里定义了git 拉取代码,然后直接执行SonarQube analysis。并不进行编译。这样我们的Jenkins里是会报错的。那我们该如何处理呢?

解决方案

1.错误的解决方案:网上流行的是去sonarQube的plugins下面的sonar-java替换成4.10版本。但是,这样做其实是不对的,这样会引发其他的不兼容报错

2.正确的解决方案是:先生成一个空的目录,然后把sonar-project.properties指向这个目录。这样就能避免这个错误。下面提供一段pipeline,以供参考

Talk is cheap,show me the code

stage('create empty folder') {
            steps {
                sh "mkdir /tmp/empty"
                sh "echo -e 'sonar.java.binaries=/tmp/empty' >> ./sonar-project.properties"
            }
        }
stage('SonarQube analysis') {
    steps {
        script {
            def scannerHome = tool 'sonarqubescanner4.0'
            withSonarQubeEnv('sonar') { // If you have configured more than one global server connection, you can specify its name
                sh "${scannerHome}/bin/sonar-scanner"
            }
        }
    }
}
目录
相关文章
|
17天前
|
Java
解析Java线程池:参数详解与执行流程
解析Java线程池:参数详解与执行流程
18 1
|
5天前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
8 0
|
2月前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
62 3
|
17天前
|
Java 编译器
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
Java健壮性 Java可移植性 JDK, JRE, JVM三者关系 Java的加载与执行原理 javac编译与JAVA_HOME环境变量介绍 Java中的注释与缩进 main方法的args参数
19 1
|
21天前
|
Java 编译器
Java中可变长参数的使用代码和方法
Java中可变长参数的使用代码和方法
23 7
|
5天前
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
10 0
|
14天前
|
缓存 监控 Java
Java中的虚拟机参数配置详解
Java中的虚拟机参数配置详解
|
17天前
|
Java API 数据处理
Java Bean参数验证:深入探索javax.validation.constraints注解
Java Bean参数验证:深入探索javax.validation.constraints注解
17 0
|
17天前
|
存储 Java
Java线程池参数详解及其示例
Java线程池参数详解及其示例
14 0
|
18天前
|
IDE Java Linux
在Maven中设置JVM系统参数及Java应用调试实例
在Maven中设置JVM系统参数及Java应用调试实例
23 0