由genrule生成的Java文件未包含在编译过程中

时间:2016-08-06 06:28:50

标签: buck

我在降压gen_rule使用方面遇到了问题。

我有一个名为SqlDelightBin的可执行jar文件,它可以生成Java源文件,在gradle构建过程中,会有一个gradle任务来运行这个jar文件,并且生成的Java文件可以正确编译。

但是当我用一个名为sqldelight_devDebug的gen_rule包装这个jar文件,然后将它添加到我的android_library的deps列表中,虽然这个gen_rule运行正常但是生成的Java文件没有在这个编译轮中编译,所以生成的类可以找不到,当我再次运行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 dir中的Java文件,并使BUCK认为这个genrule成功,我们创建了$OUT文件SQL文件列表。

我的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',
    ],
)

1 个答案:

答案 0 :(得分:3)

如果您想使用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',
    ],
)