java - 有没有办法获得 `Exec` 依赖工件?

标签 java gradle

所以,这是我的困境。我正在使用 gradle 进行构建,需要生成一些 protobuf 类。我知道有一个插件可以做到这一点,但它只适用于 gradle 2.12+,这使得我的构建速度比我正在使用的(2.8)慢两倍以上,所以我不想升级。

我做了一个这样的任务:

task protoc << {    
  exec {
    commandLine = ['protoc', "--proto_path", "${projectDir}/src/main/proto", "--java_out", "src/gen/main/java"] + protoFiles
  }
}

它可以工作......但现在我必须告诉每个想要构建的人首先安装protoc。 这里有一个maven Artifact :https://mvnrepository.com/artifact/com.google.protobuf/protoc 这显然提供了可执行文件,但我不知道如何告诉 gradle 下载它然后执行。我知道如何为 javaexec 执行此操作,但不知道如何为非 java 可执行文件执行此操作。

我可以在这里使用一些魔法咒语吗?

最佳答案

我认为它应该有效:

plugins {
  id "com.google.osdetector" version "1.3.1"
}

repositories {
  jcenter()
}

configurations {
  protoc    
}

dependencies {
  protoc "com.google.protobuf:protoc:3.1.0:${osdetector.classifier}@exe"
}

task executeProtoc(type: Exec) {
  executable configurations.protoc.singleFile
  args "--proto_path", "${projectDir}/src/main/proto"
  args "--java_out", "src/gen/main/java"
  args protoFiles
}

关于java - 有没有办法获得 `Exec` 依赖工件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41273675/

相关文章:

java - 如何避免需要在 CXF 或 JAX-WS 生成的 Web 服务客户端中指定 WSDL 位置?

properties - Gradle/Groovy 属性

android - Android Studio小写 Assets 文件夹中包含的文件夹名称

gradle - 使用 Gradle 的 Kotlin 脚本配置获取属性的正确方法

eclipse - 将 gradle 父项目添加到现有的 eclipse 多模块项目中

java - 使用计时器倒计时暂停和恢复

java - 递归 Java 与 Python

java - 如何防止 GXT 中显示空上下文菜单

java - 如何使用Javafx将TextField设置在顶部?

jenkins - 用于在Android Studio项目中构建的管道脚本