SonarQube - 临时目录不可写

SonarQube - Temp directory is not writable

我正在安装 SonarQube v5.0.1。

我是 运行 Windows Server 2012 64 位,Java 1.8 64 位,以及 SonarQube windows-x86-64 包装器。

SonarQube 不断抛出以下错误:

WrapperSimpleApp: Encountered an error running main: java.lang.IllegalStateException: Temp directory is not writable: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\
java.lang.IllegalStateException: Temp directory is not writable: C:\Windows\system32\config\systemprofile\AppData\Local\Temp\
    at org.sonar.process.MinimumViableSystem.checkWritableDir(MinimumViableSystem.java:60)
    at org.sonar.process.MinimumViableSystem.checkWritableTempDir(MinimumViableSystem.java:52)
    at org.sonar.process.MinimumViableSystem.check(MinimumViableSystem.java:45)
    at org.sonar.application.App.main(App.java:113)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: The system cannot find the path specified
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createTempFile(Unknown Source)
    at org.sonar.process.MinimumViableSystem.checkWritableDir(MinimumViableSystem.java:57)
    ... 9 more
<-- Wrapper Stopped

为什么 SonarQube 一直尝试写入 C:\Windows\System32\config\systemprofile\AppData\Local 而不是 C:\Windows\SysWOW64\config\systemprofile\AppData\Local?

为了消除以前安装中的这个错误,我必须在 C:\Windows\System32\config\systemprofile\AppData\Local 和 fiddle 中创建一个临时文件夹,并使用 read/write 设置和/或权限让 SonarQube 停止抱怨。

更新: 这是个大问题,因为我无法将 SonarQube 作为 Windows 服务启动。奇怪的是我已经安装了 SonarQube 并且 运行 作为 Windows 服务。今天把服务停了,现在又不能启动服务了。我已将 Temp 文件夹的权限设置为非只读,以便每个人都拥有完全控制权(这并不理想,我知道...)

仍然,Temp 错误阻止 SonarQube 启动。

与之前的消息相同 :您能否确认您安装了 Java 64 位版本,因为它看起来是 32 位版本。

安装后尝试启动服务时,我的声纳日志中出现了同样的错误。

我 JAVA_HOME 和 x64 都已正确设置。

我通过 将已安装服务的 'Log On As' 更改为 'NETWORK SERVICE'(没有密码)来解决上面日志中的问题,然后启动了服务。默认情况下,它已将登录身份设置为本地系统。

可能另一件值得一提的事情是,如果您是第一次设置 SonarQube,最好在安装服务之前让网站正常运行,否则调试会有点麻烦。

这也可以通过将 java.io.tmpdir java 属性 设置为可写目录来解决。 例如,在 conf/wrapper.conf 更改

wrapper.java.additional.1=-Djava.awt.headless=true

wrapper.java.additional.1=-Djava.awt.headless=true -Djava.io.tmpdir=E:/sonarqube-5.1/temp

我今天在 sonarqube 5.6 和 Windows Server 2008 R2 上遇到了同样的问题。以上对我都不起作用,但解决问题的方法是定义一个指向另一个临时目录的 系统变量 TMPDIR,例如C:\TMP

我在 运行 一些声纳分析时遇到了同样的错误。 原来在 wrapper.conf 中我不得不添加

set.TMPDIR=c:/tmp

现有 tmp 目录的路径,当然需要重新安装服务 (UninstallNTService.bat / InstallNTService.bat)

如果是Windows(特别是Windows 10),删除temp文件夹下的文件[sonar文件夹下]和运行 startSonar.bat 。它应该有效。