在应用程序开始时,我发现了三个警告:
Java HotSpot(TM) 64-Bit Server VM warning: Option AllowRedefinitionToAddDeleteMethods was deprecated in version 13.0 and will likely be removed in a future release.
Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
但它唯一的警告。不幸的是,我也遇到了错误:
ERROR i.o.javaagent.tooling.HelperInjector - Error preparing helpers while processing class org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter for spring-webflux. Failed to inject helper classes into instance org.springframework.boot.loader.LaunchedURLClassLoader@64b31700
java.lang.UnsupportedOperationException: Cannot get defined package using reflection: Unsupported class file major version 61
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2022-02-25 12:30:22.226Z ERROR i.o.javaagent.tooling.HelperInjector - Error preparing helpers while processing class reactor.blockhound.shaded.net.bytebuddy.dynamic.loading.InjectionClassLoader for classloader. Failed to inject helper classes into instance org.springframework.boot.loader.LaunchedURLClassLoader@bae47a0
java.lang.UnsupportedOperationException: Cannot get defined package using reflection: Unsupported class file major version 61
ERROR i.o.javaagent.tooling.HelperInjector - Error preparing helpers while processing class org.apache.http.impl.client.CloseableHttpClient for apache-httpclient. Failed to inject helper classes into instance org.springframework.boot.loader.LaunchedURLClassLoader@64b31700
java.lang.UnsupportedOperationException: Cannot get defined package using reflection: Unsupported class file major version 61
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection$Dispatcher$Initializable$Unavailable.getDefinedPackage(ClassInjector.java:442)
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.injectRaw(ClassInjector.java:218)
at io.opentelemetry.javaagent.tooling.HelperInjector.injectClassLoader(HelperInjector.java:205)
at io.opentelemetry.javaagent.tooling.HelperInjector.transform(HelperInjector.java:137)
at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.doTransform(AgentBuilder.java:10364)
at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:10302)
at net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.access$1600
在项目中,我使用 Azure KeyVault 和 BlockHound 与之通信。
应用程序.java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
BlockHound
.builder()
.allowBlockingCallsInside(KeyVaultClient.class.getName(), "getSecret")
.allowBlockingCallsInside(ManagedIdentityCredential.class.getName(), "getToken")
.install();
SpringApplication.run(MyApplication.class, args);
}
}
我在 IntelliJ 的 VM 选项中添加了-XX:+AllowRedefinitionToAddDeleteMethods 。我也将它添加到gradle.build文件中,但它似乎无法正常工作。
构建.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.5.10'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'pmd'
id 'checkstyle'
id 'com.github.spotbugs' version '4.7.2'
id 'com.github.ben-manes.versions' version '0.39.0'
id 'io.freefair.lombok' version '5.3.3.3'
id 'com.gorylenko.gradle-git-properties' version '2.3.1'
id 'com.coditory.integration-test' version '1.3.0'
}
apply from: 'gradle/jacoco.gradle'
apply from: 'gradle/spotbugs.gradle'
group = 'my.group'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
jar {
enabled = false
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', '2020.0.3')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom 'com.azure.spring:azure-spring-cloud-dependencies:2.13.0'
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.cloud:spring-cloud-starter'
implementation 'org.springframework.cloud:spring-cloud-starter-sleuth'
implementation 'org.zalando:logbook-spring-boot-starter:2.14.0'
implementation group: 'org.zalando', name: 'logbook-spring-boot-webflux-autoconfigure', version: '2.11.0'
implementation 'io.projectreactor.tools:blockhound:1.0.6.RELEASE'
implementation 'com.azure.spring:azure-spring-cloud-appconfiguration-config'
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'net.javacrumbs.json-unit:json-unit-assertj:2.28.0'
}
springBoot {
buildInfo()
}
lombok {
version = '1.18.20'
}
pmd {
toolVersion = '6.33.0'
ruleSets = []
ruleSetConfig = rootProject.resources.text.fromFile('config/pmd/ruleset.xml')
sourceSets = [sourceSets.main]
consoleOutput = true
ignoreFailures = true
}
checkstyle {
toolVersion = '8.41.1'
config = rootProject.resources.text.fromFile('config/checkstyle/checkstyle.xml')
showViolations = false
checkstyleTest.enabled = false
checkstyleIntegration.enabled = false
}
tasks.withType(Test) {
useJUnitPlatform()
testLogging {
events = ['passed', 'failed', 'skipped']
exceptionFormat = 'full'
}
// this one is needed for blockhound to work in tests
jvmArgs('-XX:+AllowRedefinitionToAddDeleteMethods')
}
bootRun {
// this one is needed for blockhound to work
jvmArgs('-XX:+AllowRedefinitionToAddDeleteMethods')
args = ['--spring.profiles.active=native']
}
码头工人入口点:
#!/bin/bash
exec java -Djava.security.egd=file:/dev/./urandom \
-XX:+AllowRedefinitionToAddDeleteMethods \
-XX:+UseG1GC \
-XX:MaxRAMPercentage=70 \
-XX:+PrintFlagsFinal \
-XshowSettings:vm \
-javaagent:/opt/myapp/agent.jar \
-jar /opt/myapp/myapp.jar
我正在使用:Java 17.0.2和gradle 7.3
我已经尝试将spring.profiles.active更改为native、local等。我还将项目从Java 16迁移到17,从gradle 7.1迁移到7.3,以及其他依赖项。我在2.6.4版本中遇到了springboot的问题,但可能我应该提高云依赖项的版本,但不确定它们如何相互兼容。
该解决方案运行良好,我按预期从KeyVault获取属性。
我想摆脱那些警告,但我现在没有想法。也许有人有类似的情况?