SonarRunner:无法找到文件警告
SonarRunner: Unable to find file warning
我已经配置了一个 Android 示例应用程序项目以检测 Lint 错误并将它们包含到 SonarQube 服务器中。一切正常,但是当我在 AndroidManifest.xml
中明确引入错误(删除 allowBackup
行)时,sonar-runner 执行显示下一个警告:
16:33:57.681 WARN - Unable to find file C:\Code\Android\SampleApp\app\src\main\AndroidManifest.xml to report issue
路径没问题,所以不是问题。此外,当我制作 gradle lint
并写入 lint-results.xml
文件时,错误定位正确:
<issue
id="AllowBackup"
severity="Warning"
message="Should explicitly set `android:allowBackup` to `true` or `false` (it's `true` by default, and that can have some security implications for the application's data)"
category="Security"
priority="3"
summary="Missing `allowBackup` attribute"
explanation="The allowBackup attribute determines if an application's data can be backed up and restored. It is documented at http://developer.android.com/reference/android/R.attr.html#allowBackup
By default, this flag is set to `true`. When this flag is set to `true`, application data can be backed up and restored by the user using `adb backup` and `adb restore`.
This may have security consequences for an application. `adb backup` allows users who have enabled USB debugging to copy application data off of the device. Once backed up, all application data can be read by the user. `adb restore` allows creation of application data from a source specified by the user. Following a restore, applications should not assume that the data, file permissions, and directory permissions were created by the application itself.
Setting `allowBackup="false"` opts an application out of both backup and restore.
To fix this warning, decide whether your application should support backup, and explicitly set `android:allowBackup=(true|false)"`"
url="http://developer.android.com/reference/android/R.attr.html#allowBackup"
urls="http://developer.android.com/reference/android/R.attr.html#allowBackup"
errorLine1=" <application
"
errorLine2=" ^"
quickfix="studio,adt">
<location
file="C:\Code\Android\SampleApp\app\src\main\AndroidManifest.xml"
line="5"
column="5"/>
</issue>
什么可能导致此警告以及为什么 SonarQube 服务器中未显示错误?
显示此警告是因为 xml
文件未被平台索引。因此,android lint 插件会尝试报告您的问题,但无法在服务器端找到该文件。
这是应该很快解决的平台当前限制。
要解决此限制并为您的 xml
文件编制索引,您可以:
- 安装 xml 插件(这将强制索引 xml 文件)
- 如果您使用的是 SonarQube 5.1,您可以将
sonar.import_unknown_files
设置为 true。
(您也可以查看此 thread 了解更多信息)
我遇到了同样的问题。按照@benzonico 建议的解决方案进行操作,但仍然面临问题。然后我发现了我的问题。在 sonar.sources 中,我刚刚提到了 'src' 路径,但忘记了 'res' (在我的项目中,我在 src 之外有 res)。然后我将两条路径都放到 sonar.sources。然后所有 xml 文件都被索引了。谢谢@benzonico。
确实,您需要为项目的 .xml 文件编制索引:
- 将资源路径添加到 src 属性
- 确保 xml 插件安装在您的 SQ 服务器上
- 确保项目的语言设置为 java 和 xml
此时,SQ 将索引 xml 个文件,它们必须显示在仪表板中。
那么问题是你问题的'severity'属性只有"warning"。貌似sonar插件不导入warnings,只导入errors
您可能需要创建一个 lint 配置文件来覆盖默认配置,它应该如下所示:
lint.xml:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="AllowBackup" severity="error" />
</lint>
然后在 build.gradle 的 android 部分:
lintOptions {
lintConfig = file("${projectDir}/lint.xml")
showAll true
abortOnError false
...
}
[编辑] gradle 插件似乎有一个将警告视为错误的选项。我还没有测试过,但您可以尝试以下操作而不是使用自定义 lintConfig 文件
lintOptions {
warningsAsErrors true
showAll true
abortOnError false
...
}
我在SonarQube v6.0上遇到了同样的问题,我在here上找到了官方解决方案:
配置
为了在分析过程中执行规则,该功能需要 SQ 导入 XML 文件。
这可以使用两种不同的方法来完成:
1.安装 XML 插件 : XML plugin,在其他功能之上,索引 XML 文件。
2.(SQ 5.1+) 导入未知文件 : 通过设置 属性 "sonar.import_unknown_files" 为您的项目打开 import of unknown files "true"。
方法一:
仍然显示 "Unable to find file warning" 错误消息。
解决方法:
1.Like @Henry 说:将 'res' 文件夹添加到来源:sonar.sources=src, res
2.Remove sonar.language=java
来自配置,因为SQ现在支持多种语言。如果你不移除语言,SQ只会处理你移除的java files.When和运行,一些日志会输出如下:
11:06:30.781 INFO - Index files
11:06:31.016 INFO - 120 files indexed
11:06:31.029 INFO - Quality profile for java: Android Rules
11:06:31.029 INFO - Quality profile for xml: Sonar way
方法2呢?
它可以工作,但是很多未知文件将被索引。甚至包括一些png、jpg文件,SQ中的"Lines of Code"也会包含这些未知文件。所以,我真的不推荐这种方式!
我已经配置了一个 Android 示例应用程序项目以检测 Lint 错误并将它们包含到 SonarQube 服务器中。一切正常,但是当我在 AndroidManifest.xml
中明确引入错误(删除 allowBackup
行)时,sonar-runner 执行显示下一个警告:
16:33:57.681 WARN - Unable to find file C:\Code\Android\SampleApp\app\src\main\AndroidManifest.xml to report issue
路径没问题,所以不是问题。此外,当我制作 gradle lint
并写入 lint-results.xml
文件时,错误定位正确:
<issue
id="AllowBackup"
severity="Warning"
message="Should explicitly set `android:allowBackup` to `true` or `false` (it's `true` by default, and that can have some security implications for the application's data)"
category="Security"
priority="3"
summary="Missing `allowBackup` attribute"
explanation="The allowBackup attribute determines if an application's data can be backed up and restored. It is documented at http://developer.android.com/reference/android/R.attr.html#allowBackup
By default, this flag is set to `true`. When this flag is set to `true`, application data can be backed up and restored by the user using `adb backup` and `adb restore`.
This may have security consequences for an application. `adb backup` allows users who have enabled USB debugging to copy application data off of the device. Once backed up, all application data can be read by the user. `adb restore` allows creation of application data from a source specified by the user. Following a restore, applications should not assume that the data, file permissions, and directory permissions were created by the application itself.
Setting `allowBackup="false"` opts an application out of both backup and restore.
To fix this warning, decide whether your application should support backup, and explicitly set `android:allowBackup=(true|false)"`"
url="http://developer.android.com/reference/android/R.attr.html#allowBackup"
urls="http://developer.android.com/reference/android/R.attr.html#allowBackup"
errorLine1=" <application
"
errorLine2=" ^"
quickfix="studio,adt">
<location
file="C:\Code\Android\SampleApp\app\src\main\AndroidManifest.xml"
line="5"
column="5"/>
</issue>
什么可能导致此警告以及为什么 SonarQube 服务器中未显示错误?
显示此警告是因为 xml
文件未被平台索引。因此,android lint 插件会尝试报告您的问题,但无法在服务器端找到该文件。
这是应该很快解决的平台当前限制。
要解决此限制并为您的 xml
文件编制索引,您可以:
- 安装 xml 插件(这将强制索引 xml 文件)
- 如果您使用的是 SonarQube 5.1,您可以将
sonar.import_unknown_files
设置为 true。
(您也可以查看此 thread 了解更多信息)
我遇到了同样的问题。按照@benzonico 建议的解决方案进行操作,但仍然面临问题。然后我发现了我的问题。在 sonar.sources 中,我刚刚提到了 'src' 路径,但忘记了 'res' (在我的项目中,我在 src 之外有 res)。然后我将两条路径都放到 sonar.sources。然后所有 xml 文件都被索引了。谢谢@benzonico。
确实,您需要为项目的 .xml 文件编制索引: - 将资源路径添加到 src 属性 - 确保 xml 插件安装在您的 SQ 服务器上 - 确保项目的语言设置为 java 和 xml
此时,SQ 将索引 xml 个文件,它们必须显示在仪表板中。
那么问题是你问题的'severity'属性只有"warning"。貌似sonar插件不导入warnings,只导入errors
您可能需要创建一个 lint 配置文件来覆盖默认配置,它应该如下所示:
lint.xml:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="AllowBackup" severity="error" />
</lint>
然后在 build.gradle 的 android 部分:
lintOptions {
lintConfig = file("${projectDir}/lint.xml")
showAll true
abortOnError false
...
}
[编辑] gradle 插件似乎有一个将警告视为错误的选项。我还没有测试过,但您可以尝试以下操作而不是使用自定义 lintConfig 文件
lintOptions {
warningsAsErrors true
showAll true
abortOnError false
...
}
我在SonarQube v6.0上遇到了同样的问题,我在here上找到了官方解决方案:
配置
为了在分析过程中执行规则,该功能需要 SQ 导入 XML 文件。 这可以使用两种不同的方法来完成:
1.安装 XML 插件 : XML plugin,在其他功能之上,索引 XML 文件。
2.(SQ 5.1+) 导入未知文件 : 通过设置 属性 "sonar.import_unknown_files" 为您的项目打开 import of unknown files "true"。
方法一:
仍然显示 "Unable to find file warning" 错误消息。
解决方法:
1.Like @Henry 说:将 'res' 文件夹添加到来源:sonar.sources=src, res
2.Remove sonar.language=java
来自配置,因为SQ现在支持多种语言。如果你不移除语言,SQ只会处理你移除的java files.When和运行,一些日志会输出如下:
11:06:30.781 INFO - Index files
11:06:31.016 INFO - 120 files indexed
11:06:31.029 INFO - Quality profile for java: Android Rules
11:06:31.029 INFO - Quality profile for xml: Sonar way
方法2呢?
它可以工作,但是很多未知文件将被索引。甚至包括一些png、jpg文件,SQ中的"Lines of Code"也会包含这些未知文件。所以,我真的不推荐这种方式!