我正在编写一个构建后工具,用于在 bazel 构建后合成 Maven pom 文件。我正在使用方面来收集有关各个目标的相关信息。
其中一项功能涉及向相关 pom 文件添加外部jar 依赖项。
假设我们的工作区包含以下目标:
maven_jar(
name = "com_google_guava_guava",
artifact = "com.google.guava:guava:19.0",
)
Run Code Online (Sandbox Code Playgroud)
我们的BUILD文件之一包含一个以guava作为依赖项的目标
scala_library(
name = "somename",
srcs = glob(["*.scala"]) + glob(["*.java"]),
deps = [
"@com_google_guava_guava//jar:file" ,
],
Run Code Online (Sandbox Code Playgroud)
在这个目标的一方面,如何检索maven_jar的属性,特别是artifact?
(我能得到的最接近的是:
[InputFileConfiguredTarget(@com_google_guava_guava//jar:guava-19.0.jar)]
Run Code Online (Sandbox Code Playgroud)
使用ctx.rule.attr.srcs)
我可能可以只解析工作区外部 jar目标并获取从名称到工件的映射作为混合解决方案,
但更优雅的解决方案是让方面自行提供工件。是否可以?
作为我们创建 bazel-maven 转换互操作工具(从更细粒度的 bazel jar 创建 maven 大小的 jar)的努力的一部分,需要创建源 jar。
对于java_binary目标,有一种使用-src.jar后缀创建它的机制
例如,对于java_binary名为的目标foo,运行bazel build //:foo-src.jar
但是,对java_library名为bar我的目标使用相同的机制,我得到:
ERROR: no such target '//:bar-src.jar': target 'bar-src.jar' not declared in package '' (did you mean 'libbar-src.jar'?) defined by /Users/.../java_project/BUILD.
是否有另一种机制java_library?