maven_jar 规则的别名 jar 目标

Aliasing jar target of maven_jar rule

我的工作区中有以下 maven_jar:

maven_jar(
    name = "com_google_code_findbugs_jsr305",
    artifact = "com.google.code.findbugs:jsr305:3.0.1",
    sha1 = "f7be08ec23c21485b9b5a1cf1654c2ec8c58168d",
)

在我的项目中,我通过 @com_google_code_findbugs_jsr305//jar 引用了它。但是,我现在想依赖引用 @com_google_code_findbugs_jsr305 而没有 jar 目标的第三方库。

我尝试查看 bindalias,但是 alias 无法在 WORKSPACE 中应用,而且 bind 似乎不允许您定义目标作为外部存储库。

我可以重命名我使用的版本,这样它就不会冲突,但这感觉像是错误的解决方案。

IIUC,您的代码需要依赖于 @com_google_code_findbugs_jsr305//jar@com_google_code_findbugs_jsr305//:com_google_code_findbugs_jsr305。不幸的是,没有任何预建规则可以为这两个目标生成 BUILD 文件,因此您基本上必须自己定义 BUILD 文件。幸运的是,@jart 已经在 the closure rule you linked to. You just need to add //jar:jar by appending a couple of lines, after line 69 中为您编写了大部分内容,添加如下内容:

repository_ctx.file(
    'jar/BUILD', 
    "\n".join([
       "package(default_visibility = '//visibility:public')"] + _make_java_import('jar', '//:com_google_code_findbugs_jsr305.jar')

这会在存储库中创建一个 //jar:jar(或等效地,//jar)目标。