Sonarqube 扫描仪错误 DirectoryNotEmptyException

Posted

技术标签:

【中文标题】Sonarqube 扫描仪错误 DirectoryNotEmptyException【英文标题】:Sonarqube scanner error DirectoryNotEmptyException 【发布时间】:2018-12-17 23:26:49 【问题描述】:

我在 Citrix 远程计算机上使用 sonarqube 扫描仪。在扫描期间,代码分析完成并被压缩。但是在上传这个压缩文件时,我得到了java.nio.file.DirectoryNotEmptyException,但没有任何东西上传到sonarqube 服务器。

请注意,扫描仪适用于小型项目。它不仅适用于大型项目。我的sonarqube 版本是 7.2.1。同样的事情发生在 6.7 LTS 版本中。但它在 5.6 LTS 版本中运行良好。

我尝试在sonar-scanner.properties 文件中设置sonar.ws.timeout=9000 以增加时间。这不起作用。

错误信息是:

INFO: 7 files had no CPD blocks
INFO: Calculating CPD for 521 files
INFO: CPD calculation finished
INFO: Analysis report generated in 4886ms, dir size=15 MB
INFO: Analysis reports compressed in 3769ms, zip size=4 MB
ERROR: Failed to delete temp folder
java.nio.file.DirectoryNotEmptyException: C:\codeAnalyzer\bhatk\.scannerwork\.sonartmp
        at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProv
ider.java:266)
        at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSyst
emProvider.java:108)
        at java.nio.file.Files.deleteIfExists(Files.java:1165)
        at org.sonar.api.utils.internal.DefaultTempFolder$DeleteRecursivelyFileV
isitor.postVisitDirectory(DefaultTempFolder.java:121)
        at org.sonar.api.utils.internal.DefaultTempFolder$DeleteRecursivelyFileV
isitor.postVisitDirectory(DefaultTempFolder.java:110)
        at java.nio.file.Files.walkFileTree(Files.java:2688)
        at java.nio.file.Files.walkFileTree(Files.java:2742)
        at org.sonar.api.utils.internal.DefaultTempFolder.clean(DefaultTempFolde
r.java:97)
        at org.sonar.api.utils.internal.DefaultTempFolder.stop(DefaultTempFolder
.java:106)
        at org.sonar.scanner.analysis.AnalysisTempFolderProvider.stop(AnalysisTe
mpFolderProvider.java:61)
        at org.picocontainer.DefaultPicoContainer.stopAdapters(DefaultPicoContai
ner.java:1048)
        at org.picocontainer.DefaultPicoContainer.stop(DefaultPicoContainer.java
:803)
        at org.sonar.core.platform.ComponentContainer.stopComponents(ComponentCo
ntainer.java:165)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer
.java:124)
        at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48)
        at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:
81)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentC
ontainer.java:136)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer
.java:122)
        at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContain
er.java:132)
        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.exec
ute(BatchIsolatedLauncher.java:46)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(Iso
latedLauncherProxy.java:60)
        at com.sun.proxy.$Proxy0.execute(Unknown Source)
        at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner
.java:171)
        at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.j
ava:128)
        at org.sonarsource.scanner.cli.Main.execute(Main.java:111)
        at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
        at org.sonarsource.scanner.cli.Main.main(Main.java:61)

INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE  
INFO: ------------------------------------------------------------------------
INFO: Total time: 3:27.575s
INFO: Final Memory: 60M/2882M
INFO: -----------------------------------------------------------------------
ERROR: Error during SonarQube Scanner execution
ERROR: Fail to request http://localhost:9000/api/ce/submit?projectKey=my:project
&projectName=My%20project
ERROR: Caused by: timeout
ERROR: Caused by: Socket closed
ERROR:
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging
.

【问题讨论】:

如果停止 SonarQube,删除 .sonartmp 文件夹的内容并重新启动会怎样? 在引发异常后,.sonartmp 文件夹的内容最终会被删除。分析的压缩文件夹是.sonartmp的内容。 可能是防病毒软件锁定了 zip 文件进行扫描?我在某处读到,如果系统有防病毒软件,声纳可能无法正常工作 【参考方案1】:

继承自OkHttp库默认10s writeTimeout导致的错误。虽然 readTimeout 可以通过 sonar.ws.timeout 参数配置,但 writeTimout 当前不可配置。在某些情况下,取决于分析报告的大小和/或您的基础设施设置,10 秒不足以上传导致套接字超时错误和 DirectoryNotEmptyException 的分析报告。我已经实施了一个修复并将其提交给 SonarSource github:https://github.com/SonarSource/sonarqube/pull/3252/files

【讨论】:

以上是关于Sonarqube 扫描仪错误 DirectoryNotEmptyException的主要内容,如果未能解决你的问题,请参考以下文章

Sonarqube 扫描错误,行超出范围?

SonarQube 扫描仪执行错误 [Windows - Linux Master-Slave]

SonarQube 扫描仪失败并出现“不在 git 工作树内”错误

詹金斯错误中的声纳扫描仪与任何配置的安装不匹配

SonarQube v8.2 错误:扫描简单 .net 代码时(javax.xml.parsers.SAXParserFactory 等...)

詹金斯 - sonarQube 问题 ||声纳扫描仪插件