我想構建一個相對獨立的發佈包(假設它是一個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中的信息,但我不知道我是否重新發明輪子?
謝謝,肖恩