无法让 Coverity Scan 工作(Java/Kotlin/Gradle 3.3 在 Windows 和 Travis 上)
Can't get Coverity Scan to work (Java/Kotlin/Gradle 3.3 on Windows and Travis)
更新:请参阅 Caleb 的回答中的解决方案
我非常努力地让 Coverity 为我的构建工作,但到目前为止收效甚微。
首先是细节:
- 我的项目是 运行 of the mill java 库(没有 web 或花哨的容器),只有很少的编译依赖项,使用 Gradle
构建
- 生产代码是用 Java 和 Kotlin
编写的
- 完整项目可在 github 上获得:https://github.com/ddimtirov/nuggets
- 在 Coverity 扫描中:https://scan.coverity.com/projects/ddimtirov-nuggets?tab=project_settings
- 我的开发环境是Windows10,Java1.8.0_92,Gradle3.3,CMDshell(虽然我也试过Cygwin和Mingw Bash)
- 还有基于 Linux
的 Travis
我首先从以下位置下载了一个包:https://scan.coverity.com/download/java/win64
然后我将 bin 目录添加到我的路径,转到我的项目根目录并 运行 以下命令。
$ set PATH=%PATH%;C:\Users\dimit\sandbox\cov-analysis\bin
$ gradlew clean
$ cov-build --dir cov-int gradlew jar
前两个按预期进行,最后一个 - 没那么多:
Coverity Build Capture (32-bit) version 8.7.0 on Windows 10 Professional, 64-bit (build 14393)
Internal version numbers: b452b3f2c8 p-lodi-push-28091.612
The system cannot execute the specified program.
[WARNING] Build command gradlew.bat jar exited with code 1. Please verify that the build completed successfully.
[WARNING] No files were emitted. This may be due to a problem with your configuration
or because no files were actually compiled by your build command.
Please make sure you have configured the compilers actually used in the compilation.
For more details, please look at:
C:/Users/dimit/sandbox/nuggets/cov-int/build-log.txt
我已将构建日志放在这里:https://gist.github.com/ddimtirov/9daa0e9f1f0954453f01fcec42ae2198
说明页面上的 "Troubleshoot build failure" 指向论坛索引页面,这根本没有帮助:https://software-community-synopsys.force.com/s/#4838
继续,我想如果我只能以某种其他方式生成数据,我可以将其上传到扫描服务并绕过这个问题。我发现 https://github.com/mjdetullio/gradle-coverity-plugin
Gradle Coverity 插件发出了数据,但是当我压缩它并上传到扫描服务时,它拒绝了错误电子邮件。
作为最后的手段,我尝试了 TravisCI 集成 - 经过几次尝试,我成功完成了它,但它似乎没有上传任何东西...
https://travis-ci.org/ddimtirov/nuggets/builds/196307253
https://scan.coverity.com/projects/ddimtirov-nuggets?tab=overview
我快要放弃了(顺便说一句,没有在线文档也无济于事)
第 1 期 - "The system cannot execute the specified program."
出现此问题是因为使用了 Windows 32 位套件来尝试捕获 Windows 64 位版本。尝试将 32 位进程附加到 64 位进程导致执行失败。
- 此处的解决方案是将 Coverity 二进制文件的位数与您平台的位数相匹配(使用 Windows 64 位套件)。
问题 2 - 无法捕获基于 Linux
构建的 TravisCI
这个问题似乎是由于 Coverity 的 Java Capture 和 ErrorProne 插件之间的不兼容造成的,构建日志中的消息证明了这一点:
WARNING: Failed load class file java/io/FileNotFoundException.class as a resource using the class loader net.ltgt.gradle.errorprone.ErrorProneCompiler$SelfFirstClassLoader@36358417
- 此处的解决方案是为 Coverity 构建禁用该插件。
变体
- 在调试该问题时,讨论了 Gradle 守护程序干扰 Coverity 的已知问题,但最终与该问题无关。
- "prepend" 命令的注意问题是用户错误;前置命令不是 运行 的单独命令,它用于实用目的。
有几点需要注意,因为阅读我们的文档对于成功使用我们的工具至关重要:
- Kotlin 不 受支持。
- 需要为您的平台使用适当的二进制文件(因此在 64 位平台上使用 win32 二进制文件通常不起作用)。
更新:请参阅 Caleb 的回答中的解决方案
我非常努力地让 Coverity 为我的构建工作,但到目前为止收效甚微。
首先是细节:
- 我的项目是 运行 of the mill java 库(没有 web 或花哨的容器),只有很少的编译依赖项,使用 Gradle 构建
- 生产代码是用 Java 和 Kotlin 编写的
- 完整项目可在 github 上获得:https://github.com/ddimtirov/nuggets
- 在 Coverity 扫描中:https://scan.coverity.com/projects/ddimtirov-nuggets?tab=project_settings
- 我的开发环境是Windows10,Java1.8.0_92,Gradle3.3,CMDshell(虽然我也试过Cygwin和Mingw Bash)
- 还有基于 Linux 的 Travis
我首先从以下位置下载了一个包:https://scan.coverity.com/download/java/win64
然后我将 bin 目录添加到我的路径,转到我的项目根目录并 运行 以下命令。
$ set PATH=%PATH%;C:\Users\dimit\sandbox\cov-analysis\bin
$ gradlew clean
$ cov-build --dir cov-int gradlew jar
前两个按预期进行,最后一个 - 没那么多:
Coverity Build Capture (32-bit) version 8.7.0 on Windows 10 Professional, 64-bit (build 14393)
Internal version numbers: b452b3f2c8 p-lodi-push-28091.612
The system cannot execute the specified program.
[WARNING] Build command gradlew.bat jar exited with code 1. Please verify that the build completed successfully.
[WARNING] No files were emitted. This may be due to a problem with your configuration
or because no files were actually compiled by your build command.
Please make sure you have configured the compilers actually used in the compilation.
For more details, please look at:
C:/Users/dimit/sandbox/nuggets/cov-int/build-log.txt
我已将构建日志放在这里:https://gist.github.com/ddimtirov/9daa0e9f1f0954453f01fcec42ae2198
说明页面上的 "Troubleshoot build failure" 指向论坛索引页面,这根本没有帮助:https://software-community-synopsys.force.com/s/#4838
继续,我想如果我只能以某种其他方式生成数据,我可以将其上传到扫描服务并绕过这个问题。我发现 https://github.com/mjdetullio/gradle-coverity-plugin
Gradle Coverity 插件发出了数据,但是当我压缩它并上传到扫描服务时,它拒绝了错误电子邮件。
作为最后的手段,我尝试了 TravisCI 集成 - 经过几次尝试,我成功完成了它,但它似乎没有上传任何东西...
https://travis-ci.org/ddimtirov/nuggets/builds/196307253 https://scan.coverity.com/projects/ddimtirov-nuggets?tab=overview
我快要放弃了(顺便说一句,没有在线文档也无济于事)
第 1 期 - "The system cannot execute the specified program."
出现此问题是因为使用了 Windows 32 位套件来尝试捕获 Windows 64 位版本。尝试将 32 位进程附加到 64 位进程导致执行失败。
- 此处的解决方案是将 Coverity 二进制文件的位数与您平台的位数相匹配(使用 Windows 64 位套件)。
问题 2 - 无法捕获基于 Linux
构建的 TravisCI这个问题似乎是由于 Coverity 的 Java Capture 和 ErrorProne 插件之间的不兼容造成的,构建日志中的消息证明了这一点:
WARNING: Failed load class file java/io/FileNotFoundException.class as a resource using the class loader net.ltgt.gradle.errorprone.ErrorProneCompiler$SelfFirstClassLoader@36358417
- 此处的解决方案是为 Coverity 构建禁用该插件。
变体
- 在调试该问题时,讨论了 Gradle 守护程序干扰 Coverity 的已知问题,但最终与该问题无关。
- "prepend" 命令的注意问题是用户错误;前置命令不是 运行 的单独命令,它用于实用目的。
有几点需要注意,因为阅读我们的文档对于成功使用我们的工具至关重要:
- Kotlin 不 受支持。
- 需要为您的平台使用适当的二进制文件(因此在 64 位平台上使用 win32 二进制文件通常不起作用)。