java - Gradle Kotlin DSL - 当在 Parent 中定义 java.sourceCompatibility 时构建脚本失败,但在添加到子模块时构建成功
问题描述
我正在尝试使用 gradle 为多模块 springBoot 应用程序设置一个新的存储库(用于构建脚本的 Kotlin DSL)
作为其中的一部分,我试图声明所有子项目所需的通用配置和依赖项。在这样做时,我试图为父文件块中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]
解决方案
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()
}
推荐阅读
- typescript - eslint 给出误报
- ios - 创建自定义 UIView 或子 VC
- javascript - 为什么在我的 JS 文件中编写 JS 代码时,我的 JS 滚动功能不起作用?
- encoding - Arduino 中编码器的 X1、X2、X4 编码
- r - 使用 for 循环 R 中的列表以 rbind 元素(如果存在)
- python - 如何将 rgb 图像转换为 cmyk?
- jquery - 在jQuery中获取字符符号的HTML实体
- python - 在不知道它们的值的情况下对 Python 数字列表进行排序,而只知道它们之间的关系
- javascript - 扩展不从 integration.json 加载文件
- spring-boot - CriteriaBuilder OffsetDateTime 比较