Java 由未包含在编译过程中的 genrule 生成的文件
Java file generated by a genrule not included into compiling procedure
我在 buck gen_rule 用法中遇到问题。
我有一个名为 SqlDelightBin 的可执行 jar 文件,它可以生成 Java 个源文件,在 gradle 构建过程中,会有一个 gradle 任务到 运行 这个 jar 文件和生成的 Java 文件可以正确编译。
但是当我用一个名为 sqldelight_devDebug 的 gen_rule 包装这个 jar 文件并将其添加到我的 android_library 的 deps 列表中时,尽管这个 gen_rule 运行s正常,但是生成的Java文件没有在本次编译中编译,所以生成的class找不到,当我再次运行buck build命令时,成功了。
我的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',
)
它是 运行 jar 文件,它将 src/*/sqldelight/
中的 SQL 个文件编译成 /Users/piasy/src/OkBuck/app/build/okbuck/sqldelight
目录中的 Java 个文件,并让 BUCK 思考这个 genrule 成功了,我们用 SQL 文件列表创建 $OUT
文件。
我的android_library是:
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',
],
)
如果要使用 sqldelight_devDebug
目标生成的文件作为源,请将该目标名称添加到 srcs
,如下所示:
android_library(
name = 'src_devDebug',
srcs = [
':sqldelight_devDebug',
] + glob([
'src/main/java/**/*.java',
'src/dev/java/**/*.java',
]),
# other params
deps = [
# other deps
],
visibility = [
'PUBLIC',
],
)
我在 buck gen_rule 用法中遇到问题。
我有一个名为 SqlDelightBin 的可执行 jar 文件,它可以生成 Java 个源文件,在 gradle 构建过程中,会有一个 gradle 任务到 运行 这个 jar 文件和生成的 Java 文件可以正确编译。
但是当我用一个名为 sqldelight_devDebug 的 gen_rule 包装这个 jar 文件并将其添加到我的 android_library 的 deps 列表中时,尽管这个 gen_rule 运行s正常,但是生成的Java文件没有在本次编译中编译,所以生成的class找不到,当我再次运行buck build命令时,成功了。
我的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',
)
它是 运行 jar 文件,它将 src/*/sqldelight/
中的 SQL 个文件编译成 /Users/piasy/src/OkBuck/app/build/okbuck/sqldelight
目录中的 Java 个文件,并让 BUCK 思考这个 genrule 成功了,我们用 SQL 文件列表创建 $OUT
文件。
我的android_library是:
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',
],
)
如果要使用 sqldelight_devDebug
目标生成的文件作为源,请将该目标名称添加到 srcs
,如下所示:
android_library(
name = 'src_devDebug',
srcs = [
':sqldelight_devDebug',
] + glob([
'src/main/java/**/*.java',
'src/dev/java/**/*.java',
]),
# other params
deps = [
# other deps
],
visibility = [
'PUBLIC',
],
)