Java 在gradle中执行或构建子项目之前,如何执行任务?
在gradle中执行或构建子项目之前,如何执行任务 我有一个多项目构建,在根项目中有以下build.gradleJava 在gradle中执行或构建子项目之前,如何执行任务?,java,gradle,Java,Gradle,在gradle中执行或构建子项目之前,如何执行任务 我有一个多项目构建,在根项目中有以下build.gradle apply plugin: 'java' apply plugin: 'com.google.protobuf' protobuf { protoc { // Download from repositories artifact = 'com.google.protobuf:protoc:3.10.0' } plugins { g
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任务,因为我的子项目依赖于protobuf任务生成的java文件。那么我如何才能做到这一点呢?我不想在每个子项目中都有protobuf任务,我只想在根项目中立即执行,但在编译子项目之前。我为此创建了一个示例项目。根项目称为“protobuffer”,它有两个子项目,如下所示:
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")
}
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>())
}
}
}
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}")
}
}
}
}
java项目
原型
“proto”项目包含java项目的proto文件。proto project的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")
}
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>())
}
}
}
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}")
}
}
}
}
根项目的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")
}
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>())
}
}
}
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}")
}
}
}
}