在Bazel中依赖并测试Maven管理的JAR包,需结合外部依赖管理和构建规则。以下是完整解决方案:
Bazel通过rules_jvm_external
或rules_jvm
等规则支持Maven依赖,无需手动下载JAR包。测试时需确保依赖传递性正确且作用域(如test
)被正确处理。
使用rules_jvm_external
拉取Maven依赖:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# 添加rules_jvm_external
http_archive(
name = "rules_jvm_external",
sha256 = "...", # 替换为最新版本SHA
strip_prefix = "rules_jvm_external-4.5",
url = "https://github.com/bazelbuild/rules_jvm_external/archive/4.5.zip",
)
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
artifacts = [
"junit:junit:4.13.2", # 测试依赖示例
"org.mockito:mockito-core:3.12.4",
"com.google.guava:guava:31.0.1", # 主代码依赖示例
],
repositories = [
"https://repo1.maven.org/maven2",
],
)
假设项目结构如下:
project/
├── src/
│ ├── main/
│ └── test/
├── BUILD
BUILD文件示例:
# 主代码库(依赖Guava)
java_library(
name = "main_lib",
srcs = glob(["src/main/**/*.java"]),
deps = [
"@maven//:com_google_guava_guava",
],
)
# 测试目标(依赖JUnit和Mockito)
java_test(
name = "my_test",
srcs = glob(["src/test/**/*.java"]),
deps = [
":main_lib",
"@maven//:junit_junit",
"@maven//:org_mockito_mockito_core",
],
test_class = "com.example.MyTest", # 替换为实际测试类
)
bazel test //:my_test
maven_install
中指定版本或排除冲突:maven_install
中指定版本或排除冲突:testonly
依赖。没有搜到相关的文章