0

在应用程序开始时,我发现了三个警告:

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.2gradle 7.3

我已经尝试将spring.profiles.active更改为nativelocal等。我还将项目从Java 16迁移到17,从gradle 7.1迁移到7.3,以及其他依赖项。我在2.6.4版本中遇到了springboot的问题,但可能我应该提高云依赖项的版本,但不确定它们如何相互兼容。

该解决方案运行良好,我按预期从KeyVault获取属性。

我想摆脱那些警告,但我现在没有想法。也许有人有类似的情况?

4

0 回答 0