【发布时间】:2016-10-31 06:15:44
【问题描述】:
我正在尝试将 Maven 项目迁移到 Bazel,但遇到了 Datanucleus 增强方面的问题。
jar-file 构建完成后,Datanucleus 会查看其中并进行一些字节码操作以增强可持久化的类。在 Bazel 中执行此操作的方法是定义一条规则,该规则采用 java_library 规则的 *.jar 输出并创建库的新增强版本。
我遇到的问题是,对于我的规则,我需要来自外部库的 datanucleus-core 包。当我尝试通过$(location //third_party:datanucleus_core) 从genrule 访问它时,它指向一个没有类的jar:
(genrule) cmd = "echo $(location //third_party:datanucleus_core)"
bazel-out/local-fastbuild/bin/third_party/liborg_datanucleus_datanucleus_core.jar
(genrule) cmd = "jar tf $(location //third_party:datanucleus_core)"
META-INF/
META-INF/MANIFEST.MF
Bazel 在genrule 中从$(location //third_party:datanucleus_core) 解析的jar 文件仅包含具有以下内容的META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Created-By: blaze
我尝试使用java_binary 规则将正确的datanucleus_core.jar 添加到类路径中,但Datanucleus 就地增强了我的库并且无法将其更改写入磁盘(重写规则的输入文件)。此外,java_binary 规则不应该用于构建。
所以问题是在运行 Datanucleus 实用程序的 Bazel 中增强 jar 库的最佳方法是什么,该实用程序作为 Maven 存储库中的第三方依赖项提供?
Bazel 构建标签:0.3.2-homebrew,操作系统:OS X El Capitan (10.11.6),java:1.8.0_92
更新
Datanucleus 依赖声明:
# WORKSPACE
maven_jar(
name = "org_datanucleus_datanucleus_core",
artifact = "org.datanucleus:datanucleus-core:5.0.3",
)
# third_party/BUILD
java_library(
name = "org_datanucleus_datanucleus_core",
visibility = ["//visibility:public"],
exports = ["@org_datanucleus_datanucleus_core//jar"],
)
(在我的问题中,我将 org_datanucleus_datanucleus_core 缩短为 datanucleus_core)
【问题讨论】:
-
没有增强过程会增强类IN A JAR。如果这就是你正在做的......你必须解包,增强,打包它们。
标签: datanucleus bazel