我想构建一个相对独立的发布包(假设它是一个tar包,但可能是一个RPM/Deb),它包含我的代码(它被打包成一个jar),以及我的代码被编译并在运行时使用的jar。 (假设这些都是简单的设置)与Bazel包装相关的瓶子
我有MyPackage(它有一堆.java文件),我们说它直接取决于外部的瓶子A和B,而B取决于外部罐子C.我从maven_jars中获得A,B和C.
我已经设置了规则是这样的:
在MyPackage的/ BUILD:
java_library(
name = "MyPackage",
srcs = glob(["src/main/java/**/*.java"]),
deps = ["//MyPackage/artifacts:compile_jars"],
)
和MyPackage的/文物/ BUILD:
java_library(
name = "compile_jars",
visibility = ["//MyPackage:__pkg__"],
exports = ["libdeps_A", "libdeps_B"]
)
java_library(
name = "libdeps_A",
exports = ["@org.someone.A//jar"],
)
java_library(
name = "libdeps_B",
exports = ["@org.secondparty.B//jar", ":libdeps_C"],
)
java_library(
name = "libdeps_C",
exports = ["@org.thirdperson.C//jar"],
)
然而,内置libMyPackage .jar(按预期)不包含libdeps_ [ABC]中的文件,它只包含MyPackage的src/main/java中的.class文件。
我有另一个成功使用的规则:MyPackage把它放在我的tarball的lib/dir中。
我的问题是,如果有办法解决来自遍历// MyPackage/artifacts:compile_jars规则的文件集(jar),那么我也可以将它们放入tar归档文件中。
这看起来与java_binary的_deploy.jar隐式输出目标非常类似。但我认为我不能使用它,因为我的入口点没有“主要”例程。 (它使用onStart从谷歌播放)
我当然可以写一些自动化,将使另一种形式的/ MyPackage/artifacts:compile_jars目标出MyPackage/artifacts/BUILD中的信息,但我不知道我是否重新发明轮子?
谢谢,肖恩