发现一sonar-runner bug

最近在使用sonar-runner做代码扫描,

在windows环境运行多模块的扫描ok,但是在linux上sonar-runner扫描多模块报错;

先贴sonar-project.properties配置

#required metadata
#projectKey项目的唯一标识,不能重复 

sonar.projectKey=testuser
sonar.projectName=testuser
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module,javascript-module,html-module  

# Java module
java-module.sonar.projectName=Java Module
java-module.sonar.language=java
# .表示projectBaseDir指定的目录
java-module.sonar.sources=.
java-module.sonar.projectBaseDir=src/main/java
sonar.binaries=classes

# JavaScript module
javascript-module.sonar.projectName=JavaScript Module
javascript-module.sonar.language=js
javascript-module.sonar.sources=js
javascript-module.sonar.projectBaseDir=src/main/webapp 

# Html module
html-module.sonar.projectName=Html Module
html-module.sonar.language=web
html-module.sonar.sources=pages
html-module.sonar.projectBaseDir=src/main/webapp

windows环境运行sonar-runner扫描ok,

但是linux上怎么也不成功,报错

从报错可以看出,这是在扫描java-module时没有找到/app/mujup/local/testsonar/testsonar/src/main/java路径,但事实是我linux上有这个路径并且是java代码的路径

于是去分析sonar的源码(ProjectReactorBuilder.calss)

private void defineChildren(ProjectDefinition parentProject)
    {
        Properties parentProps = parentProject.getProperties();
        if (parentProps.containsKey("sonar.modules")) //解析子模块
        {
            String arr$[] = Utils.getListFromProperty(parentProps, "sonar.modules");//获得sonar.modules的元素
            int len$ = arr$.length;
            for (int i$ = 0; i$ < len$; i$++)//循环,java-module,js-module,html-module
            {
                String module = arr$[i$];
                Properties moduleProps = extractModuleProperties(module, parentProps);//获得每个子模块的properties文件
                ProjectDefinition childProject = loadChildProject(parentProject, moduleProps, module);//加载子模块
                checkUniquenessOfChildKey(childProject, parentProject);
                defineChildren(childProject);
                parentProject.addSubProject(childProject);
            }

        }
    }
private ProjectDefinition loadChildProject(ProjectDefinition parentProject, Properties moduleProps, String moduleId)
    {
        setProjectKeyAndNameIfNotDefined(moduleProps, moduleId);
        File baseDir;
        if (moduleProps.containsKey("sonar.projectBaseDir"))//检查子模块的java-module.sonar.projectBaseDir=src/main/java
        {       //parentProject.getBaseDir()是当前项目的根路径,这个方法是获得子模块的绝对路径        //baseDir是子模块的绝对路径,也就是报错的/app/mujup/local/testsonar/testsonar/src/main/java
            baseDir = getFileFromPath(moduleProps.getProperty("sonar.projectBaseDir"), parentProject.getBaseDir());       //报错代码位置,,这个方法里判断baseDir是否是文件夹,明明是文件夹却返回了异常,百思不得骑姐
            setProjectBaseDir(baseDir, moduleProps, moduleId);
            try
            {
                if (!parentProject.getBaseDir().getCanonicalFile().equals(baseDir.getCanonicalFile()))
                    tryToFindAndLoadPropsFile(baseDir, moduleProps, moduleId);
            }
            catch (IOException e)
            {
                throw new IllegalStateException("Error when resolving baseDir", e);
            }
        } else
        if (moduleProps.containsKey("sonar.projectConfigFile"))
        {
            baseDir = loadPropsFile(parentProject, moduleProps, moduleId);
        } else
        {
            baseDir = new File(parentProject.getBaseDir(), moduleId);
            setProjectBaseDir(baseDir, moduleProps, moduleId);
            tryToFindAndLoadPropsFile(baseDir, moduleProps, moduleId);
        }
        checkMandatoryProperties(moduleProps, MANDATORY_PROPERTIES_FOR_CHILD);
        validateDirectories(moduleProps, baseDir, moduleId);
        mergeParentProperties(moduleProps, parentProject.getProperties());
        prefixProjectKeyWithParentKey(moduleProps, parentProject.getKey());
        return defineProject(moduleProps, parentProject);
    }
private static void setProjectBaseDir(File baseDir, Properties childProps, String moduleId)
    {
        if (!baseDir.isDirectory())
        {       //报错--Caused by: java.lang.IllegalStateException: The base directory of the module ‘java-module‘        //does not exist: /app/mujup/local/testsonar/testsonar/src/main/java
            throw new IllegalStateException((new StringBuilder()).append("The base directory of the module ‘").append(moduleId).append("‘ does not exist: ").append(baseDir.getAbsolutePath()).toString());
        } else
        {
            childProps.put("sonar.projectBaseDir", baseDir.getAbsolutePath());
            return;
        }
    }

猜想:

试过把子模块的java-module.sonar.projectBaseDir=src/main/java换成src;src/main均不行

难道linux中认为/app/mujup/local/testsonar/testsonar/src/main/java不是文件夹?应该没有这么挫吧。

改天试试linux判断文件及文件夹,

有人遇到过这种情况吗?

时间: 2024-07-29 12:06:28

发现一sonar-runner bug的相关文章

Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

XA中使用dblink发现的一个oracle bug

最近监控系统日志时发现出现一个新的错误信息,很奇怪,之前没有过.如下: ORA-24777:不允许使用不可移植的数据库链路. 跟踪程序进去发现是通过dblink查询某个远程库表,而且由于使用了XA分布式事务数据库连接.大家也许都知道XA有不少限制条件,之前也遇到过,都绕着走了.但是最近没有调整过程序也没有改变过dblink的配置,怎么回事呢?只能网上搜索,结果有人遇到过,说是oracle dblink改成shared就行了.个人觉得这个说法靠谱.于是现在测试系统上试了一下,果然有效. 可以为什么

菜鸡发现腾讯视频bug

腾讯视频bug 我看一个将夜,出现三生三世? 这是为啥? 发现bug,会得到奖励吗? 不会像dnf一样游戏自己的bug,然后出现伤害999,把我号封了. 我这样会被封号吗?我应该怎么做才不会被封?好慌.自己穷,还是借的别人的vip.在线等,求救. 原文地址:https://www.cnblogs.com/aoximin/p/12332460.html

sass学习笔记(一)接上个 持续学习中..(还发现个讲解的bug) sass至少我现在学的版本支持局部变量了

6.全局变量 sass暂时没有局部变量 局部定义变量会覆盖全局变量 新出!global 不过要sass 3.4版本以后        (这句呢,,我觉得是错的 开始写的时候没测试 现在发现我觉得他是有局部作用域的 具体明天问作者~ 我已经加群提问题了) 例: $font-size:12px; 设置全局 body { $font-size:14px: //覆盖掉了全局 font-size:$font-size //14 } p { font-size:$font-size; //14 这个我觉得是

发现Ubuntu一个有趣的bug

ubuntu作为linux的一个优秀的发行版,拥有很华丽炫酷的桌面,我用的小Kylin更是人性化的设计了很多对中文的良好支持. 但Ubuntu比较还是比较年轻,今天就发现了一个小bug. 首先我先用鼠标拖一个框出来,当然,由于截屏的原因,鼠标被隐藏了. 有人问了,这不是很正常么,选取一批文件的时候不都用选取框么? 那么这张呢? 大家该说了,怎么如此多的框啊... 这个bug是你在鼠标拖动一个选取框时,按下右Ctrl和右Alt之间的那个键,是一个书页形状的键,这个键有弹出右键菜单的功能. 好的,在

Sonar6.0应用之二:Sonar Web界面配置及与Runner、Scanner集成进行命令行代码分析

一.安装好了SonarQube服务端后,在其它电脑的浏览器上登陆,开始安装其它编程语言检测插件 系统已经装好的语言插件: 下载了软件项目中常用的语言:Android.CSS.Web.XML JAVA相关的:Checkstyle.Findbugs.PMD Java 静态分析工具分析对象 应用技术 Checkstyle Java 源文件,缺陷模式匹配 FindBugs 字节码,缺陷模式匹配:数据流分析 PMD Java 源代码,缺陷模式匹配 下载完分析语言规则后,重启服务 二.安装命令行分析端 so

Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

Sonar升级遇到的那些事儿

目录 背景 如何升级 如何回滚 问题解决 参考 背景 目前我们用SonarQube版本是4.0,这次准备升级到最新版本5.1, 以便支持以后的JavaScript的项目. 如何升级 我们可以直接跨越版本升级,而不需要逐个版本去升级. 1. 升级之前需要备份一下数据库, 我的是mysql, 用mysqldump这个命令即可. mysqldump -u Username -p DBScheme > Snoar_backup.sql 2. 停掉SonarQube server bin/<SYSTEM

IE下的双外边距浮动bug

最常见且最容易发现的额一个bug是IE 6和最低版本中的双外边距浮动bug.这个bug是任何浮动元素上的外边距加倍. 上面代码中,div盒子向左边浮动,设置的margin-left的值是10px.在chrome浏览器,Firefox浏览器中: 在ie6中,距离为20px: 这个bug很容易修复,就是设置元素的display属性为inline就行,元素本身是浮动,设置inline不会影响显示方式. 显示样式:

cocos2d的armature绑定到其他armature骨骼上的bug

在cocos2dx中,rmature的骨骼上可以绑定另外的armature,在我的项目中使用了该功能来完成骑乘功能,但是在使用过程发现了如下的bug,特写在这里做一下记录.</span> 首先说说cocos2dx的代码.在cocos2dx的骨骼的update函数中有如下代码用于骨骼的矩阵更新. if (_boneTransformDirty) { if (_dataVersion >= VERSION_COMBINED) { TransformHelp::nodeConcat(*_twe