1

我在使用 buck gen_rule 时遇到问题。

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

但是当我用一个gen_rule包装这个jar文件,命名为sqldelight_devDebug,并将它添加到我的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 文件,它将 SQL 文件编译src/*/sqldelight/成 dir 中的 Java 文件/Users/piasy/src/OkBuck/app/build/okbuck/sqldelight,为了让 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',
    ],
)
4

1 回答 1

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',
    ],
)
于 2016-08-06T19:41:04.960 回答