我不断收到构建错误,表示我正在使用预览功能(切换表达式):
Service.java:28: error: patterns in switch statements are a preview feature and are disabled by default.
case CalssA sr -> sr.getMeterReadings();
^
(use --enable-preview to enable patterns in switch statements)
我在build.gradle中明确表示我想使用Java 17。Switch表达式在Java 14中发布了。
这是我的
gradle.properties
、settings.gradle
和build.gradle
:
quarkusPluginVersion=3.0.1.Final
quarkusPlatformArtifactId=quarkus-bom
quarkusPluginId=io.quarkus
quarkusPlatformGroupId=io.quarkus.platform
quarkusPlatformVersion=3.0.1.Final
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
mavenLocal()
}
plugins {
id "${quarkusPluginId}" version "${quarkusPluginVersion}"
}
}
rootProject.name='upc'
buildscript {
repositories {
mavenCentral()
gradlePluginPortal()
mavenLocal()
}
dependencies {
classpath 'com.h2database:h2:1.4.197'
}
}
plugins {
id 'java'
id 'io.quarkus'
id 'org.flywaydb.flyway' version '9.8.1'
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
def lombok_version = '1.18.26'
def map_struct_version = '1.5.5.Final'
implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
implementation 'io.quarkus:quarkus-resteasy-reactive-qute'
implementation 'io.quarkus:quarkus-resteasy-reactive'
implementation 'io.quarkus:quarkus-resteasy-reactive-jackson'
implementation 'io.quarkus:quarkus-arc'
implementation 'io.quarkus:quarkus-flyway'
implementation 'io.quarkus:quarkus-hibernate-validator'
implementation 'io.quarkiverse.jdbc:quarkus-jdbc-sqlite:3.0.5'
implementation 'io.quarkiverse.mybatis:quarkus-mybatis:2.0.0'
implementation 'org.jboss.logging:jboss-logging'
implementation "org.mapstruct:mapstruct:${map_struct_version}"
implementation 'com.google.guava:guava:31.1-jre'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.14.2'
compileOnly "org.projectlombok:lombok:${lombok_version}"
annotationProcessor "org.projectlombok:lombok:${lombok_version}"
annotationProcessor "org.mapstruct:mapstruct-processor:${map_struct_version}"
testCompileOnly "org.projectlombok:lombok:${lombok_version}"
testAnnotationProcessor "org.projectlombok:lombok:${lombok_version}"
testAnnotationProcessor "org.mapstruct:mapstruct-processor:${map_struct_version}"
testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'
}
group 'org.acanthite'
version '0.1'
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
test {
systemProperty 'java.util.logging.manager', 'org.jboss.logmanager.LogManager'
}
compileJava {
options.encoding = 'UTF-8'
options.compilerArgs += [
'-parameters',
'-Amapstruct.defaultComponentModel=cdi',
'-Amapstruct.defaultInjectionStrategy=constructor'
]
}
compileTestJava {
options.encoding = 'UTF-8'
options.compilerArgs += [
'-parameters',
'-Amapstruct.defaultComponentModel=cdi',
'-Amapstruct.defaultInjectionStrategy=constructor'
]
}
我做错了什么?还有其他地方需要指定Java版本吗?
我已经知道出了什么问题了。
Gradle 和 quarkus 都很好并且工作完美。
问题是我没有使用
switch expressions
而是使用switch pattern matching
,它看起来很相似,但却是完全不同的东西。这是 Java 17 中的预览功能。不过,有一个编译器标志 --enable-preview
可以在某种程度上适用于非测试构建,但在运行测试时会失败。请参阅此问题:https://github.com/quarkusio/quarkus/issues/10472