Gradle Kotlin DSL - Скрипт сборки завершается с ошибкой, если java .sourceCompatibility определено в родительском модуле, но сборка успешна при добавлении в дочерний модуль - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь настроить новый репозиторий для многомодульного приложения springBoot с использованием gradle (Kotlin DSL для сценариев сборки)

В рамках того же самого я пытаюсь объявить общую c конфигурацию и зависимости необходимо для всех подпроектов. При этом я пытаюсь определить sourceCompatility для всех дочерних проектов в блоке subprojects родительского build.gradle.kts файла

Когда я пытаюсь скомпилировать свой проект с указанной выше конфигурацией, сборка не выполняется с следующее исключение

* What went wrong:
Extension with name 'java' does not exist. Currently registered extension names: [ext]

Но если я перенесу строку java.sourceCompatibility = org.gradle.api.JavaVersion.VERSION_11 в файл build.gradle.kts дочернего модуля, то он будет успешно компилироваться и приложение будет работать, как ожидалось.

Я не могу понять то, что мне здесь не хватает. Пожалуйста, помогите мне понять это.

Родитель build.gradle.kts

buildscript {
    repositories {
        mavenCentral()
    }
}

plugins {
    id("java")
    id("idea")
    id("war")
    id("io.spring.dependency-management") version "1.0.9.RELEASE"
}

subprojects {
    group = "com.company.example"
    version = "0.0.1"

    java.sourceCompatibility = org.gradle.api.JavaVersion.VERSION_11

    repositories {
        mavenCentral()
        maven { url = uri("http://nexus.pentaho.org/content/groups/omni/") }
    }

    apply() {
        plugin("java")
        plugin("idea")
        plugin("io.spring.dependency-management")
    }

    dependencies {
        implementation("io.jsonwebtoken:jjwt-api:0.10.7")
        implementation("io.jsonwebtoken:jjwt-impl:0.10.7")
        implementation("com.auth0:java-jwt:3.10.3")

        implementation(group= "org.mockito", name= "mockito-core", version= "3.1.0")

        implementation(group= "javax.inject", name= "javax.inject", version= "1")
        implementation(group= "org.springframework", name= "spring-context", version= "5.2.6.RELEASE")
        implementation(group= "org.springframework.security", name= "spring-security-core", version= "4.2.3.RELEASE")

        implementation(group= "com.google.protobuf", name= "protobuf-java", version= "3.12.1")
        implementation("com.google.api.grpc:proto-google-common-protos:1.16.0")
        implementation("com.google.api.grpc:grpc-google-longrunning-v1:0.1.8")
        implementation(group= "org.apache.commons", name= "commons-lang3", version= "3.7")
        implementation(group="com.google.guava", name= "guava", version= "29.0-jre")
        implementation(group= "commons-io", name= "commons-io", version= "2.7")

        testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1")
        testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.3.1")
    }
}

tasks.getByName<Test>("test") {
    useJUnitPlatform()
}

Ребенок build.gradle.kts

buildscript {
    repositories {
        mavenCentral()
    }
}

plugins {
    id("org.springframework.boot") version "2.3.0.RELEASE"
}

//java.sourceCompatibility = org.gradle.api.JavaVersion.VERSION_11

dependencies {
    
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-web")

}

val jar by tasks.getting(Jar::class) {
    manifest {
        attributes["Main-Class"] = "com.company.example.module.ExampleApplication"
    }

    from(sourceSets.main.get().output)

    dependsOn(configurations.runtimeClasspath)
    from({
        configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
    })
}

settings.gradle.kts для проекта:

rootProject.name = "project_name"
include(":module_name")

PS: Тоже пробовал использовать

configure<JavaPluginConvention>{
    sourceCompatibility = org.gradle.api.JavaVersion.VERSION_11
}

Но наблюдается такая же закономерность. В этом случае выдается ошибка

* What went wrong:
Extension of type 'JavaPluginConvention' does not exist. Currently registered extension types: [ExtraPropertiesExtension]

1 Ответ

0 голосов
/ 23 июня 2020
buildscript {
    repositories {
        mavenCentral()
    }
}

plugins {
    id("java")
    id("idea")
    id("war")
    id("io.spring.dependency-management") version "1.0.9.RELEASE"
}

subprojects {
    group = "com.company.example"
    version = "0.0.1"

    // Changed the position of the apply block from below the
    // source captibility to above 
    apply {
        plugin("java")
        plugin("idea")
        plugin("io.spring.dependency-management")
    }

    java.sourceCompatibility = org.gradle.api.JavaVersion.VERSION_11

    repositories {
        mavenCentral()
        maven { url = uri("http://nexus.pentaho.org/content/groups/omni/") }
    }

    dependencies {
        implementation("io.jsonwebtoken:jjwt-api:0.10.7")
        implementation("io.jsonwebtoken:jjwt-impl:0.10.7")
        implementation("com.auth0:java-jwt:3.10.3")

        implementation(group= "org.mockito", name= "mockito-core", version= "3.1.0")

        implementation(group= "javax.inject", name= "javax.inject", version= "1")
        implementation(group= "org.springframework", name= "spring-context", version= "5.2.6.RELEASE")
        implementation(group= "org.springframework.security", name= "spring-security-core", version= "4.2.3.RELEASE")

        implementation(group= "com.google.protobuf", name= "protobuf-java", version= "3.12.1")
        implementation("com.google.api.grpc:proto-google-common-protos:1.16.0")
        implementation("com.google.api.grpc:grpc-google-longrunning-v1:0.1.8")
        implementation(group= "org.apache.commons", name= "commons-lang3", version= "3.7")
        implementation(group="com.google.guava", name= "guava", version= "29.0-jre")
        implementation(group= "commons-io", name= "commons-io", version= "2.7")

        testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1")
        testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.3.1")
    }
}

tasks.getByName<Test>("test") {
    useJUnitPlatform()
}
...