buck gen_ruleの使用に問題があります。コンパイル手順に含まれていないgenruleによって生成されたJavaファイル
SqlDelightBinという実行可能なjarファイルがあります。これは、gradleビルドプロセス中にJavaソースファイルを生成する可能性があります。このjarファイルを実行するためのgradleタスクがあり、生成されたJavaファイルを適切にコンパイルできます。
しかし、このgen_ruleを適切に実行するが、生成されたJavaファイルはこのコンパイルラウンドでコンパイルされないため、このjarファイルをsqldelight_devDebugという名前のwrapperでラップしてandroid_libraryのdepsリストに追加すると、が見つかりませんでした。バックビルドコマンドを再度実行すると、成功します。
マイgen_ruleは次のとおりです。
genrule(
name = 'sqldelight_devDebug',
srcs = glob([
'src/*/sqldelight/**/*.sq',
]),
out = 'out',
bash = 'java -jar /Users/piasy/src/OkBuck/.okbuck/cache/c61171f7a8bee5d459102d49daecb0b6/SqlDelightBin-0.4.3.jar $SRCDIR /Users/piasy/src/OkBuck/app/build/okbuck/sqldelight && echo $SRCS > $OUT',
)
それは/Users/piasy/src/OkBuck/app/build/okbuck/sqldelight
ディレクトリにJavaファイルにsrc/*/sqldelight/
でSQLファイルをコンパイルし、BUCKこのgenruleが成功すると思わせるためにjarファイルを、実行して、我々はと$OUT
ファイルを作成しますSQLファイルリスト。
私android_libraryです:あなたがソースとしてsqldelight_devDebug
ターゲットによって生成されたファイルを使用したい場合は、このように、srcs
にそのターゲット名を追加
android_library(
name = 'src_devDebug',
srcs = glob([
'src/main/java/**/*.java',
'build/okbuck/sqldelight/**/*.java’, # the generated Java files
'src/dev/java/**/*.java',
]),
# other params
deps = [
# other deps
':sqldelight_devDebug',
],
visibility = [
'PUBLIC',
],
)
ない一部としてしかし、 "グロブ"の。私はそれが拾われないと確信しています。 'glob'の結果に追加したいでしょう。 – sdwilsh
'srcs = [':sqldelight_devDebug'] + glob(['src/main/java/**/*。java'、 'src/dev/java/**/*。java'])、'私のgenruleのbashを 'bash = 'java -jar /Users/piasy/src/OkBuck/.okbuck/cache/c61171f7a8bee5d459102d49daecb0b6/SqlDelightBin-0.4.3.jar $ SRCDIR/Users/piasy/src/OkBuck/app/buildに変更します。/okbuck/sqldelight> $ OUT '、 '、生成されたJavaファイルリストを' $ OUT'に出力します。 'buck build'を実行すると、' __src_devDebug__srcs'ファイルは '$ OUT'ファイルパスの1行を持ちます。生成されたクラスが見つからない場合でもコンパイルは失敗します。新しく追加された行は '@ $ OUT'なので再帰的に見ることができますか? – Piasy
しかし、私はこれを起こす方法を知らない、あなたの助けをありがとう! @sdwilsh – Piasy