Как выполнить задачу перед выполнением или сборкой подпроектов в Gradle? - PullRequest
0 голосов
/ 31 января 2020

Как выполнить задачу перед выполнением или сборкой подпроектов в Gradle?

У меня многопроектная сборка со следующим build.gradle в root проекте

apply plugin: 'java'
apply plugin: 'com.google.protobuf'

protobuf {

   protoc {
    // Download from repositories
    artifact = 'com.google.protobuf:protoc:3.10.0'
   }

   plugins {
      grpc {
        artifact = 'io.grpc:protoc-gen-grpc-java:1.23.0'
      }
   }

   generateProtoTasks {
      ofSourceSet('main')*.plugins {
        grpc {}
      }
   }
}

tasks.withType(JavaCompile) {
  dependsOn 'protobuf'
}

allprojects {

}

subprojects {

}

Я хочу, чтобы задачи protobuf выполнялись в первую очередь перед компиляцией любого из подпроектов, потому что мои подпроекты зависят от сгенерированных java файлов из задачи protobuf. так как я могу этого достичь? Я не хочу, чтобы в каждом подпроекте была задача protobuf, я просто хочу сделать это сразу в проекте root, но до компиляции подпроектов.

1 Ответ

1 голос
/ 06 февраля 2020

Я создал пример проекта для этого. Проект root называется ' protobuffer ' и имеет два подпроекта:

  • java -проект

' proto содержит файлы прототипа для проекта java. Файл проекта build.gradle.kts выглядит следующим образом:

import com.google.protobuf.gradle.*

plugins {
    id ("com.google.protobuf")
}

tasks.check { dependsOn("generateProto") }

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.6.1"
    }

    generatedFilesBaseDir = File(project(":java-project").projectDir.toString(), "src").toString()
}

dependencies {
    implementation("com.google.protobuf:protobuf-java:3.6.1")
}

Root проекта build.gradle.kts * 1026 Файл * выглядит следующим образом:

import com.google.protobuf.gradle.GenerateProtoTask
plugins {
    java
    id ("com.google.protobuf") version ("0.8.8") apply false
}

allprojects {
    repositories {
        mavenCentral()
        maven {
            url = uri("https://plugins.gradle.org/m2/")
        }
    }
}

subprojects {
    apply(plugin="java")
    apply(plugin="idea")

    if (name != "proto") {
        tasks.withType<JavaCompile> {
            dependsOn(project(":proto").tasks.withType<GenerateProtoTask>())
        }
    }
}

Файл settings.gradle.kts в проекте root выглядит следующим образом:

rootProject.name = "protobuffer"
include("proto")
include("java-project")


pluginManagement {
    repositories {
        mavenLocal()
        maven {
            url = uri("https://plugins.gradle.org/m2/")
        }
    }

    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == "com.google.protobuf") {
                useModule("com.google.protobuf:protobuf-gradle-plugin:${requested.version}")
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...