2017-09-01 17 views
0

私は比較的自己完結型のリリースパッケージを作成しようとしています(これは、tarballですが、RPM/Debになる可能性があります) jarと同様に私のコードはコンパイルされ、実行時に使用されます。Bazelでパッケージ化されたjarファイル

私はMyPackage(複数の.javaファイルを持っています)を持っていて、外部のJar AとBに直接依存しているとしましょう。Bは外部Jarに依存しています。 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暗黙の出力ターゲットが行う処理と非常によく似ています。私のエントリーポイントには「メイン」ルーチンがないので、私はそれを使うことはできないと思う。 (Google PlayのonStartを使用しています)

MyPackage/artifacts/BUILDにある情報から// MyPackage/artifacts:compile_jarsターゲットを別の形式にするオートメーションを作成することはできますが、車輪を再発明していますか?

おかげで、ショーン

答えて

1

は、私の知る限り、これを行うにubiquotousツールがありません。

私たちはまったく同じ問題を抱えていました(メインジャー、完全な推移閉包、設定ファイルなどを含むジャーボールを作成しました) - 私たちがやったのは、JarCreator (ただし、他の機能が必要なため、機能の一部を必要とせず、スカラーが好きなので最初から書きました)。

別の参考文献として、skylarkにdeploy jarを実装するrules_scala(_build_deployable)があります(おそらくネイティブルールよりもコピーが簡単になるでしょう)。

解決されているこの問題をもう一度示すヒントは、このバゼルの問題です。Add zip directory skylark action

関連する問題