gpt4 book ai didi

使用存储库中的工件作为构建工具的 Gradle 任务

转载 作者:行者123 更新时间:2023-12-03 05:10:39 30 4
gpt4 key购买 nike

如何在 Gradle 任务中执行托管在存储库中的工具?

在我的具体情况下,我正在使用 Gradle 构建一个 Android 应用程序。我添加了一项任务,将一些 protobuf 数据从文本编码为二进制格式:

task encodeData {
ext.resDir = file("$buildDir/binary_proto")
def inputDir = 'text_pb'
def outputDir = "$resDir/raw"
inputs.dir inputDir
outputs.dir outputDir

doLast {
file(outputDir).mkdirs()
file(inputDir).eachFile { inputFile ->
exec {
commandLine 'sh', '-c', "protoc --encode=MyMessage src/main/proto/my_proto.proto < \
\"$inputFile\" > \"$outputDir/$inputFile.name\""
}
}
}
}

android {
applicationVariants.all { variant ->
variant.registerResGeneratingTask(encodeData, encodeData.resDir)
}
}

以上工作,但 仅当手动安装 protoc .我想改用 pre-compiled protoc on Maven Central (就像 recommended configuration of the protobuf plugin 一样)。我从 this thread 开始崇拜并到达:
repositories { mavenCentral() }

configurations {
proto_encode
}

dependencies {
proto_encode 'com.google.protobuf:protoc:3.0.0'
}

println configurations['proto_encode'].singleFile

但是,这会产生错误 Expected configuration ':app:proto_encode' to contain exactly one file, however, it contains no files. (我还尝试向依赖项添加 artifact 子句,但不确定如何设置参数)。大概我需要以某种方式告诉 Gradle,该工具将在主机上运行(作为构建过程的一部分)而不是目标(即 Android 设备),以便它知道要选择哪个版本。有什么建议么?

最佳答案

com.google.protobuf:protoc:3.0.0你告诉 Gradle 你想要带有默认(不存在)限定符的 JAR 工件。

相反,您必须告诉 Gradle 限定符以及您想要的工件。如果你G。想要 64 位 Windows 版本,您需要 windows-x86_64作为限定符和 exe作为工件类型,这将是 com.google.protobuf:protoc:3.0.0:windows-x86_64@exe .

因此,您需要确定您当前正在构建的系统,然后相应地确定限定符。然后您可以在依赖项字符串中使用该确定的限定符。

http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.google.protobuf%22%20AND%20a%3A%22protoc%22您可以查看您的依赖项存在哪些工件。

关于使用存储库中的工件作为构建工具的 Gradle 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48132338/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com