最近在使用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判断文件及文件夹,

有人遇到过这种情况吗?

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

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

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  2. sonar runner 2.4

    https://www.versioneye.com/java/org.codehaus.sonar.runner:sonar-runner-dist/2.4

  3. 今天测试发现qwebsocket有个bug

    发现命令使用时间久了就会丢失mask,mask设置成0,而websocket协议要求客户端给服务器传东西必须带mask=1,发现确实有个bug,代码如下: 文件:src/websockets/qweb ...

  4. sonarqube+sonar runner分析C#代码

    最近研究一个代码覆盖率和代码分析工具.遇到一些比较坑的问题,现在分享给大家. 1.Sonar介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可 ...

  5. 一次发现underscore源码bug的经历以及对学术界『拿来主义』的思考

    事情是如何发生的 最近干了件事情,发现了 underscore 源码的一个 bug.这件事本身并没有什么可说的,但是过程值得我们深思,记录如下,各位看官仁者见仁智者见智. 平时有浏览园区首页文章的习惯 ...

  6. 京东商城发现了一枚Bug

    我在京东上买了几本书,发现了一个BUG.. 买书的时候,我选了京东自营的书和京东其他店的书,合在一起购买,填写了开具发票. 然后,京东处理流程是,将上面一笔订单拆分成两笔,然后发票信息没有转到其他店那 ...

  7. VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug

    今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...

  8. 菜鸡发现腾讯视频bug

    腾讯视频bug 我看一个将夜,出现三生三世? 这是为啥? 发现bug,会得到奖励吗? 不会像dnf一样游戏自己的bug,然后出现伤害999,把我号封了. 我这样会被封号吗?我应该怎么做才不会被封?好慌 ...

  9. vs2015发现一个字符串拼接 bug

    VS2015支持 字符串拼接 如下: string user="test"; int password=123; string sql=$" user={user};pa ...

  10. 发现一个时隐时现的bug!

    在awk里可以这样使用正则: #截取 a.cn?fr= 中的1211 -]+/) > ) { fr = substr(url,RSTRART + , RLENGTH - ) } #截取 a.cn ...

随机推荐

  1. Spring AOP切点表达式用法总结

    1. 简介        面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的.通过面向对象编程,不同的模 ...

  2. linux利用CMakeLists编译程序或生成库文件

    #设置CMAKE最低版本 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #设置项目名称 SET(PROJECT_NAME Image_Test_01) #建立项目 PROJE ...

  3. ceph 安装过程

    安装依赖: yum install -y yum-utils && yum-config-manager --add-repo https://dl.fedoraproject.org ...

  4. python 模块和包

    一,模块 1,什么是模块? 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀. 但其实 import 加载的模块分为四个通用类别: 1,使用pyt ...

  5. openfalcon架构及相关服务配置详解

    一:openfalcon组件 1.falcon-agent 数据采集组件 agent内置了一个http接口,会自动采集预先定义的各种采集项,每隔60秒,push到transfer. 2.transfe ...

  6. Java 8 的 Metaspace

    Java 8 的 Metaspace https://www.cnblogs.com/xrq730/p/8688203.html 被废弃的持久代 想起之前面试的时候有面试官问起过我一个问题:Java ...

  7. MT【26】ln(1+x)的对数平均放缩

    评:1.某种程度上$ln(1+x)\ge \frac{2x}{2+x}$是最佳放缩. 2.这里涉及到分母为幂函数型的放缩技巧,但是不够强,做不了这题.

  8. 洛谷P4768 [NOI2018]归程(可持久化并查集,最短路)

    闲话 一个蒟蒻,在网络同步赛上进行了这样的表演-- T2组合计数不会,T3字符串数据结构不会,于是爆肝T1 一开始以为整个地图都有车,然后写了2h+的树套树,终于发现样例过不去 然后写可持久化并查集D ...

  9. 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)

    洛谷题目传送门 90分WA第二个点的看过来! 简要介绍一下中国剩余定理 中国剩余定理,就是用来求解这样的问题: 假定以下出现数都是自然数,对于一个线性同余方程组(其中\(\forall i,j\in[ ...

  10. 投入机器学习的怀抱?先学Python吧

    前两天写了篇文章,给想进程序员这个行当的同学们一点建议,没想到反响这么好,关注和阅读数都上了新高度,有点人生巅峰的感觉呀.今天趁热打铁,聊聊我最喜欢的编程语言——Python. 为什么要说Python ...