在使用bazel构建时,我遇到了使用maven依赖项的问题。问题似乎是下载的jar是空的,只有清单。我已经检查过路径和版本是否正确,并且还使用了sha1以确保正确定位了正确的jar。
WORKSPACE:
maven_server(
name = "default",
url = "http://central.maven.org/maven2/
)
maven_jar(
name = "org_seleniumhq_selenium_selenium_java",
artifact = "org.seleniumhq.selenium:selenium-java:3.11.0",
sha1 = "05b50d4072e0e51779b6e9f3594106312061bfde"
)
BUILD:
package(default_visibility = ["//visibility:public"])
java_library(
name = "core",
srcs = glob(
["main/core/**/*.java"]
),
resources = glob(["test/resources/*"]),
deps = ["@org_seleniumhq_selenium_selenium_java//jar"]
)
调用“bazel build // src:core”会立即失败并出现“错误:包org.openqa.selenium不存在”,但是我可以看到selenium-java.jar是在bazel-e2e-testing中创建的/ external / org_seleniumhq_selenium_selenium_java,但同样是空的。
有关我可能做错的任何建议吗?
提前致谢
答案 0 :(得分:1)
所以,在对Bazel的工作方式进行更多调查之后,我终于找到了问题,我将在这里添加它,以防将来有人遇到同样的问题。
主要问题是传递依赖性,默认情况下maven_jar无法解析。相反,bazel提供了一个名为transitive_maven_jar的有用存储库规则,可用于解决所有传递依赖关系。此外,声明了实际的依赖关系存在问题。
就我而言,我将selenium-java声明为依赖项,但是我只使用了一个传递依赖项(selenium-api)的导入。因此,selenium-java实际上并没有被编译,因为它实际上并没有被使用。一旦我宣布selenium-api作为我的依赖,问题就解决了。
最终的工作空间:
http_archive(
name = "trans_maven_jar",
url = "https://github.com/bazelbuild/migration-tooling/archive/master.zip",
type = "zip",
strip_prefix = "migration-tooling-master",
)
load("@trans_maven_jar//transitive_maven_jar:transitive_maven_jar.bzl", "transitive_maven_jar")
transitive_maven_jar(
name = "dependencies",
artifacts = [
"org.seleniumhq.selenium:selenium-java:3.11.0",
]
)
load("@dependencies//:generate_workspace.bzl", "generated_maven_jars")
generated_maven_jars()
最终构建:
package(default_visibility = ["//visibility:public"])
java_library(
name = "core",
srcs = glob(
["main/core/**/*.java"]
),
resources = glob(["test/resources/*"]),
deps = [
"@org_seleniumhq_selenium_selenium_api//jar"
]
)
请注意,我还没有完全理解bazel是如何工作的,所以我说的部分内容可能不完全正确,在这种情况下,请告诉我,但这对我有用。