Jdk 10から11に切り替えようとして、どのライブラリーがこの例外を呼び出すのか把握できません。
Caused by: org.gradle.api.GradleException: failed to read class file ../../SomeTestFile.class
...
...
Caused by: Java.lang.UnsupportedOperationException
at org.objectweb.asm.ClassVisitor.visitNestMemberExperimental(ClassVisitor.Java:248)
at org.objectweb.asm.ClassReader.accept(ClassReader.Java:651)
at org.objectweb.asm.ClassReader.accept(ClassReader.Java:391)
at org.gradle.api.internal.tasks.testing.detection.AbstractTestFrameworkDetector.classVisitor(AbstractTestFrameworkDetector.Java:124)
次のbuild.gradle
でgradle wrapper(v4.10.2)を使用しています。
buildscript {
ext {
springBootVersion = '2.0.5.RELEASE'
schemaDownloadVersion = '1.6'
generateAvroVersion = '0.14.2'
}
repositories {
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
maven { url "http://packages.confluent.io/maven/" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("gradle.plugin.com.amit.plugin.download-registry:registry-schema-download-plugin:${schemaDownloadVersion}")
classpath("com.commercehub.gradle.plugin:gradle-avro-plugin:${generateAvroVersion}")
}
}
apply plugin: 'Java'
apply plugin: 'jacoco'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.amit.plugin.download-registry'
apply plugin: 'com.commercehub.gradle.plugin.avro'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 11
repositories {
mavenCentral()
}
ext {
springCloudVersion = 'Finchley.RELEASE'
jaxbVersion = '2.3.0'
activationVersion = '1.1.1'
jmockitVersion = '1.43'
lombokVersion = '1.18.2'
}
jacoco {
toolVersion = '0.8.2'
}
dependencies {
compile('org.springframework.cloud:spring-cloud-starter-oauth2')
compile("javax.xml.bind:jaxb-api:${jaxbVersion}")
compile("com.Sun.xml.bind:jaxb-core:${jaxbVersion}")
compile("com.Sun.xml.bind:jaxb-impl:${jaxbVersion}")
compile("javax.activation:activation:${activationVersion}")
compileOnly("org.projectlombok:lombok:${lombokVersion}")
testCompile("org.jmockit:jmockit:${jmockitVersion}")
testCompile('org.springframework.boot:spring-boot-starter-test') {
exclude(group: 'org.mockito')
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
...
この問題の調査では、gradle自体、lombokおよびjmockitがasm
ライブラリを使用しているため、おそらくこの例外が発生する可能性があることがわかりました。誰かがこの例外を呼び出すライブラリを答えてくれますか?
[〜#〜] update [〜#〜]
私は同じ問題についての記事を見つけました: https://matsumana.info/blog/2018/09/25/gradle-with-jdk11/ ここでgradleの問題を指している https://github.com/gradle/gradle/issues/512 つまり、gradleはまだサポートしていないことを意味しますJava 11まだ?
Java 11に ネストベースのアクセス が追加されたため、 [〜#〜] asm [〜#〜] などのバイトコード記述APIを更新して、クラスファイルの変更をサポートする必要がありました。 。
ASMの6.2.1バージョンでそのメソッドのソースコードを見る( これはgradleが使用しているようです ):
@Deprecated
public void visitNestMemberExperimental(final String nestMember) {
if (api < Opcodes.ASM7_EXPERIMENTAL) {
throw new UnsupportedOperationException();
}
if (cv != null) {
cv.visitNestMemberExperimental(nestMember);
}
}
必要なAPIレベルは7で、現在ベータ版です。依存関係を更新する前に、ASM 7のリリースバージョンを待っていると思います。
Gradleバージョン4.10.3もそれを解決しているようです。
このエラーに直面しました。私のgradleファイルは1.7 jdkで構成されており、プロジェクト設定では1.8 jdkを参照していました。だから私はgradleファイルをsourceCompatibility = 1.8に変更しましたtargetCompatibility = 1.8