【问题标题】:Can't get Coverity Scan to work (Java/Kotlin/Gradle 3.3 on Windows and Travis)无法让 Coverity Scan 工作(Windows 和 Travis 上的 Java/Kotlin/Gradle 3.3)
【发布时间】:2017-06-20 08:10:22
【问题描述】:

更新:查看 Caleb 回答中的解决方案

我正在努力让 Coverity 为我的构建工作,但到目前为止收效甚微。

首先是细节:

我首先从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

我快要放弃了(顺便说一句,没有在线文档也无济于事)

【问题讨论】:

  • 查看你发布的构建日志,执行gradlew.bat时什么也没发生,控制台似乎在说无论你试图执行什么,“系统无法执行指定的程序”(即出现来自您的构建命令,而不是 Coverity。您是否尝试过直接运行该命令以查看会发生什么?
  • 当我运行 gradlew jar 时,它会编译并构建一个 JAR。此外,如果您查看链接的 TravisCI 作业,您会发现在 linux 服务器上运行时会产生不同的输出。

标签: java gradle kotlin coverity


【解决方案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 命令不是单独运行的命令,它是为了实用目的而存在的。

【讨论】:

  • 感谢您的提示,更多关于 Coverity 如何提取信息的背景知识可能会减轻您的支持负担。请随意指出我可能错过的任何资源。我在 Windows 10 上尝试了 no-daemon - 仍然以同样不透明的方式失败 - 如果我能够看到 cpommand 标准输出或错误代码会很有用。我不确定我的 Travis CI 设置是否正确(特别是附加组件和我的构建脚本)。如果您能看一下这份工作和相关的提交,我将不胜感激:travis-ci.org/ddimtirov/nuggets/jobs/199040064
  • 我查看了 Travis 日志,发现了一些可疑的内容:“:buildSrc:compileJava UP-TO-DATE”等。 al,总构建时间为 1.59 秒。有什么实际构建的吗?
  • :buildSrc:compileJava 不会构建任何东西,:compileJava 会。请参阅此版本中的第 394 行进行比较:travis-ci.org/ddimtirov/nuggets/jobs/198719233#L394
  • 我注意到环境变量是COVERITY_SCAN_BUILD_COMMAND="${COVERITY_SCAN_BUILD_COMMAND:-./gradlew --no-daemon jar}" COVERITY_SCAN_BUILD_COMMAND_PREPEND="${COVERITY_SCAN_BUILD_COMMAND_PREPEND:-./gradlew clean}"——在这种情况下我可以看到 PREPEND 命令正在运行,但我没有看到 BUILD 命令...
  • 我怀疑那是你的问题 - 你没有运行你的完整版本,所以 Coverity 没有看到它。我相信COVERITY_SCAN_BUILD_COMMAND_PREPEND 被添加到COVERITY_SCAN_BUILD_COMMAND 之前,并且可能用于执行设置环境变量之类的操作。你能把这两个组合成一个构建命令吗?
【解决方案2】:

有几点需要注意,因为阅读我们的文档对于成功使用我们的工具至关重要:

  1. 支持 Kotlin。
  2. 需要为您的平台使用适当的二进制文件(因此在 64 位平台上使用 win32 二进制文件通常不起作用)。

【讨论】:

  • 您能否提供一个指向说明这些内容的文档的链接?
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
相关资源
最近更新 更多