发现一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判断文件及文件夹,
有人遇到过这种情况吗?
发现一sonar-runner bug的更多相关文章
- Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- sonar runner 2.4
https://www.versioneye.com/java/org.codehaus.sonar.runner:sonar-runner-dist/2.4
- 今天测试发现qwebsocket有个bug
发现命令使用时间久了就会丢失mask,mask设置成0,而websocket协议要求客户端给服务器传东西必须带mask=1,发现确实有个bug,代码如下: 文件:src/websockets/qweb ...
- sonarqube+sonar runner分析C#代码
最近研究一个代码覆盖率和代码分析工具.遇到一些比较坑的问题,现在分享给大家. 1.Sonar介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可 ...
- 一次发现underscore源码bug的经历以及对学术界『拿来主义』的思考
事情是如何发生的 最近干了件事情,发现了 underscore 源码的一个 bug.这件事本身并没有什么可说的,但是过程值得我们深思,记录如下,各位看官仁者见仁智者见智. 平时有浏览园区首页文章的习惯 ...
- 京东商城发现了一枚Bug
我在京东上买了几本书,发现了一个BUG.. 买书的时候,我选了京东自营的书和京东其他店的书,合在一起购买,填写了开具发票. 然后,京东处理流程是,将上面一笔订单拆分成两笔,然后发票信息没有转到其他店那 ...
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...
- 菜鸡发现腾讯视频bug
腾讯视频bug 我看一个将夜,出现三生三世? 这是为啥? 发现bug,会得到奖励吗? 不会像dnf一样游戏自己的bug,然后出现伤害999,把我号封了. 我这样会被封号吗?我应该怎么做才不会被封?好慌 ...
- vs2015发现一个字符串拼接 bug
VS2015支持 字符串拼接 如下: string user="test"; int password=123; string sql=$" user={user};pa ...
- 发现一个时隐时现的bug!
在awk里可以这样使用正则: #截取 a.cn?fr= 中的1211 -]+/) > ) { fr = substr(url,RSTRART + , RLENGTH - ) } #截取 a.cn ...
随机推荐
- Markdown 文件转化为work文档
1. 电脑安装pandoc 链接:https://pan.baidu.com/s/12H5wLO0JWph5TjrbeJI6mg 密码:ssgs 下载安装包解压即可用.记得配置系统环境变量 2.命令行 ...
- ajax 调用 java webapi 多个参数(一)
最近开发 java webapi. 遇到一个问题,如果是多个参数(其中包含对象类型),我应该怎么传递? 一 先看解决方案: ajax <script> var data={ " ...
- POI 生成excel(大数据量) SXSSF
使用POI 的SXSSF (Streaming Usermodel API)生成较大的excel,同时开启压缩 import junit.framework.Assert; import org.ap ...
- 牛客国庆集训派对Day2 H 期望
小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀有卡牌不会被重复抽到.小 ...
- 聪聪和可可 HYSBZ - 1415(概率 + spfa + 记忆化dp)
Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...
- BZOJ 4556: [Tjoi2016&Heoi2016]字符串(后缀数组 + 二分答案 + 主席树 + ST表 or 后缀数组 + 暴力)
题意 一个长为 \(n\) 的字符串 \(s\),和 \(m\) 个询问.每次询问有 \(4\) 个参数分别为 \(a,b,c,d\). 要你告诉它 \(s[a...b]\) 中的所有子串 和 \(s ...
- 自学Python2.10-跳出循环(break、continue)
自学Python之路 自学Python2.10-跳出循环(break.continue) 1.跳出循环break, 跳出同层的循环 break语句可以跳出for和while的循环体. 如果你从for或 ...
- 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记
一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...
- [luogu2280][bzoj1218][HNOI2003]激光炸弹
题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置,每个目标都有 ...
- LeetCode好题汇总
最近开始刷LeetCode,准备按照专题来进行.所有的解题方案我都会放在GitHub上面,对于有价值的题目,我会重新在这里做记录,并且将解题方案贴出来,便于自己之后复习. Array 1. easy ...