无法使Coverity Scan工作(Windows和Travis上的Java / Kotlin / Gradle 3.3)

更新:请参阅Caleb答案中的解决方案

我正在努力使Coverity为我的构建工作,但迄今为止没有成功。

首先是细节:

  • 我的项目运行的工厂Java库(没有网络或花哨的容器),很少编译的依赖,使用Gradle
  • 生产代码是用Java和Kotlin编写的
  • 完整的项目在github上可用: https : //github.com/ddimtirov/nuggets
  • 在Coverity上扫描: https ://scan.coverity.com/projects/ddimtirov-nuggets ? tab = project_settings
  • 我的开发环境是Windows 10,Java 1.8.0_92,Gradle 3.3,CMD shell(虽然我也试过Cygwin和Mingw Bash)
  • 还有Travis在Linux上构建

我开始从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

说明页面上的“解决构建失败”指向论坛索引页面,根本没有任何帮助: 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 – “系统无法执行指定的程序”。

出现此问题是因为使用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”命令提到的问题是用户错误; prepend命令不是一个单独的命令来运行,它是出于实用目的。

有几件事要注意,因为阅读我们的文档是成功使用我们的工具的关键:

  1. Kotlin 支持。
  2. 为您的平台使用适当的二进制文件是必需的 (所以在64位平台上使用win32二进制文件通常不起作用)。
Interesting Posts