最近在使用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. 深入理解CSS绝对定位absolute

    前面的话 前面已经介绍了定位的偏移和层叠,例子中大量的应用了绝对定位.因为相较于相对定位和固定定位,绝对定位在实际中应用频率更高.应用场景更广泛.本文将介绍使用绝对定位时的具体细节 定义 当元素绝对定 ...

  2. 华为5G在印度被禁

    前段时间,澳大利亚政府以“担心外国渗透”为由,决定禁止华为为建设新的5G网络提供设备.这让大家不禁猜测,难道华为的5G真的被国外市场禁入了? 对此,华为表达出了极大的失落感,并在一份声明中称,“政府告 ...

  3. BZOJ3526[Poi2014]Card——线段树合并

    题目描述 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的卡片了!第i个熊孩子会交换c[i]和d[i]两个位置上的卡片. ...

  4. WordPress发送注册用户设置密码邮件提示:您的密码重设链接无效,请在下方请求新链接

    1.修改WP根目录下的 wp-login.php文件将 $message .= '<' . network_site_url("wp-login.php?action=rp&k ...

  5. MT【1】终点在球面上的向量

    解答: 评:最小值在Q为球心时取到,体现数学对称性的美!

  6. Leetcode 50.Pow(x,n) By Python

    实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 ...

  7. Leetcode 66.加一 By Python

    思路 如果单独操作最后一个元素,令其加一,满十进一,会挺麻烦的,要分情况. 所以我的思路是将list还原到字符串,再变成数值,直接+1,然后再还原到list.详见代码 代码 class Solutio ...

  8. 学习Spring Boot:(二十一)使用 EhCache 实现数据缓存

    前言 当多次查询数据库影响到系统性能的时候,可以考虑使用缓存,来解决数据访问新能的问题. SpringBoot 已经为我们提供了自动配置多个 CacheManager 的实现,只要去实现使用它就可以了 ...

  9. 【转】stm32CubeMx上移植自己的printf()和scanf()函数

    要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中.重定向是指用户可以自己重写C 的库函数,当连接器检查到用户编写了与C 库函数相同名字的函数 ...

  10. bypy 用法

    因为服务器上爬取到的40个G的数据采用http,ftp,scp传输到本地效果不太理想.找资料就看到了bypy,利用百度云存储解决这个问题,解决了服务器带宽有限的问题. pip install bypy ...