jacoco - 除 /tmp 之外的其他路径中不允许使用 bazel 生成 jacoco.exec
问题描述
在我的 BUILD.bazel 中,我的 java_test 看起来像这样:
java_test(
name = "SomeServiceTest",
srcs = [
"src/test/java/com/service/SomeServiceTest.java",
],
test_class = "com.service.SomeServiceTest",
deps = [
"SomeService",
"@junit_junit//jar",
"@commons_logging_commons_logging//jar",
"@org_hamcrest_hamcrest_core//jar",
"@com_fasterxml_jackson_core_jackson_annotations//jar",
"@javax_servlet_javax_servlet_api//jar",
"@org_springframework_spring_aop//jar",
"@org_springframework_spring_beans//jar",
"@org_springframework_spring_context//jar",
"@org_springframework_spring_test//jar",
"@org_springframework_spring_web//jar",
"@org_mockito_mockito_core//jar",
"@net_bytebuddy_byte_buddy//jar",
],
size = "medium",
jvm_flags = ["-javaagent:$$workspacepath/jacocoagent-runtime.jar=destfile=$$workspacepath/jacoco.exec"]
)
我想让 jacocoagent-runtime.jar 的路径和生成 jacoco.exec 的路径是动态的,因此 jvm_flags 设置。我在下面执行 bazel 测试时定义了 $$workspacepath:
bazel test --test_output=all --action_env=workspacepath=/Users/Someone/Desktop some-service:all_tests
现在,我收到以下错误:
java.io.FileNotFoundException: /Users/Someone/Desktop/jacoco.exec (Operation not permitted)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at org.jacoco.agent.rt.internal_290345e.output.FileOutput.openFile(FileOutput.java:67)
at org.jacoco.agent.rt.internal_290345e.output.FileOutput.writeExecutionData(FileOutput.java:53)
at org.jacoco.agent.rt.internal_290345e.Agent.shutdown(Agent.java:137)
at org.jacoco.agent.rt.internal_290345e.Agent$1.run(Agent.java:54)
如果我将工作空间路径更改为 /tmp,它可以正常工作。/tmp 以外的其他路径有什么问题?
解决方案
我同意@Godin - 听起来输入路径不在沙箱中。--spawn_strategy=standalone
[1] 有帮助吗?
如果这确实是问题,那么要使用沙盒修复构建,您需要使 .jar 文件成为 .jar 操作的输入,并从 .jarjava_test
正确引用其路径jvm_flags
。
要做到这一点:
在您的工作区中创建一个新包并将 jacoco jar 复制到那里,或者将
new_local_repository
规则添加到您的WORKSPACE
文件并引用 jar 的目录并将build_file_contents
属性指定为exports_files(["jacoco-runtime.jar"])
现在您可以通过标签(例如
@jacoco//:jacoco-runtime.jar
)引用 Jacoco,您需要将其添加到java_test
规则的data
属性中最后,您需要更改
java_test
规则的jvm_flags
属性以使用 引用 jar$(location <label>)
,例如$(location @jacoco//:jacoco-runtime.jar)
[1] https://docs.bazel.build/versions/master/user-manual.html#flag--spawn_strategy
推荐阅读
- python - python 2.7套接字设置身份验证头
- python - NLTK Python TypeError:“模块”对象不可调用
- python - 批量计算给定数组与 mongodb 数据库数组之间的欧式距离
- azure-ad-b2c - 使用我们自己的登录视图进行登录,使用 Azure Ad B2C 使用 Web Api 进行移动应用程序身份验证
- scheme - 不明白这个 let-let-lambda 是如何工作的
- file - 批处理文件抖动测试
- android - Oreo:JobService 不需要 startForeground 吗?
- sql - 使用多个不断变化的 SELECT 结果执行数学运算
- javascript - 我的对象扩展运算符使用有什么问题?
- php - 需要输出到 txt 文件而不是 json 对象