SonarQube 6.7.2 Maven构建失败:无法存储报告源文件
解决Maven结合SonarQube构建时的"Operation not permitted"错误
我刚接触SonarQube,第一次在项目里用它,用Maven构建的时候碰到了下面的权限错误,折腾了好久没搞定,求帮忙:
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar (default-cli) on project channels: Unable to store file source in the report: /home/zeeshan/xyz/Project/Bitbucket/channels/target/sonar/scanner-report/source-178.txt (Operation not permitted) -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar (default-cli) on project channels: Unable to store file source in the report at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213) at org.apache.maven.cli.MavenCli.main(MavenCli.java:157) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to store file source in the report at org.sonarsource.scanner.maven.bootstrap.ScannerBootstrapper.execute(ScannerBootstrapper.java:65) at org.sonarsource.scanner.maven.SonarQubeMojo.execute(SonarQubeMojo.java:108) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 19 more Caused by: java.lang.IllegalStateException: Unable to store file source in the report at org.sonar.scanner.report.SourcePublisher.publish(SourcePublisher.java:52) at org.sonar.scanner.report.ReportPublisher.generateReportFile(ReportPublisher.java:149) at org.sonar.scanner.report.ReportPublisher.execute(ReportPublisher.java:130) at org.sonar.scanner.phases.PublishPhaseExecutor.publishReportJob(PublishPhaseExecutor.java:73) at org.sonar.scanner.phases.PublishPhaseExecutor.executeOnRoot(PublishPhaseExecutor.java:55) at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:93) at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:180) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121) at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:288) at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:283) at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:261) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121) at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48) at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121) at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:121) at org.sonar.batch.bootstrapper.Batch.doExecuteTask(Batch.java:116) at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:71) at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)
问题分析
这个错误的核心是当前运行Maven的用户没有权限写入指定的SonarQube扫描报告目录,也就是/home/zeeshan/xyz/Project/Bitbucket/channels/target/sonar/scanner-report/,系统返回"Operation not permitted"明确指向了权限问题。
解决步骤
按优先级从高到低尝试下面的方法:
检查并修复目录权限
先看看目标目录的权限情况,执行命令:ls -ld /home/zeeshan/xyz/Project/Bitbucket/channels/target/sonar/scanner-report/确保当前用户(比如你用的
zeeshan)对这个目录有读写权限。如果权限不够,直接修改权限:chmod -R u+rw /home/zeeshan/xyz/Project/Bitbucket/channels/target/sonar/如果是目录所有者不对,就修改归属:
sudo chown -R zeeshan:zeeshan /home/zeeshan/xyz/Project/Bitbucket/channels/target/sonar/清理旧缓存后重新构建
有时候旧的SonarQube缓存文件可能残留权限问题,先清理整个target目录:mvn clean然后再重新运行SonarQube扫描:
mvn sonar:sonar检查系统安全工具限制
如果是Linux系统,SELinux或者AppArmor这类安全工具可能会阻止Maven写入目录。可以临时关闭SELinux测试:sudo setenforce 0如果测试后能正常运行,记得不要一直关闭SELinux,最好配置对应的规则允许Maven访问该目录,具体可以参考系统文档添加自定义规则。
升级SonarQube Maven插件版本
你当前用的3.4.0.905版本比较老旧了,可能存在一些已知的权限处理问题。建议升级到最新的稳定版,在项目的pom.xml里修改插件配置:<plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.10.0.2594</version> <!-- 可以去SonarQube官网查最新稳定版 --> </plugin>修改后重新执行扫描命令试试。
内容的提问来源于stack exchange,提问作者Zeeshan
相关产品推荐
相关产品推荐

