使用Apache Jmeter Core时发生堆栈溢出错误



我是Gradle的新手。我正在使用我的gradle与kotlin-dsl脚本。当我使用执行时

gradle引导运行

然后它抛出log4J 的StackaoverFlow错误

线程"main"java.lang.StackOverflowError中出现异常java.lang.reflect.IInvocationTargetException。(InvocationTargetException.java:72)位于sun.reflect.GeneratedMethodAccessor1.invoke(未知源)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于java.lang.reflect.Method.ioke(Method.java:498)org.apache.logging.log4j.util.StackLocator.getCallerClass(StackLocator.java:110)在org.apache.logging.log4j.util.StackLocator.getCallerClass(StackLocator.java:123)在org.apache.logging.log4j.util.StackLocatorUtil.getCallerClass(StackLocatorUtil.java:55)

当我从构建脚本中评论实现("org.apache.jmeter:ApacheJMeter_core:5.0")时,它不会抛出任何错误,我该怎么办?请帮忙。

建筑等级.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
java
kotlin("jvm") version "1.3.11"
"kotlin-spring"
id("org.springframework.boot") version "2.1.1.RELEASE"
}
group = "org.kayd"
version = "1.0-DEV"
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation(kotlin("reflect"))
implementation("org.apache.commons:commons-collections4:4.2")
implementation("org.springframework.boot:spring-boot-starter:2.1.1.RELEASE")
implementation( "org.apache.jmeter:ApacheJMeter_core:5.0")
//    implementation("org.apache.jmeter:ApacheJMeter_java:5.0")
//    implementation( "org.apache.jmeter:ApacheJMeter_http:5.0")
//    implementation( "org.antlr:antlr:3.1.3")
//    implementation( "org.json:json:20180813")
testCompile("junit", "junit", "4.12")
}
configure<JavaPluginConvention> {
sourceCompatibility = JavaVersion.VERSION_1_8
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}

主趣味文件

package org.kayd
import org.springframework.boot.Banner
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.runApplication
@EnableConfigurationProperties
@SpringBootApplication
open class StartApplication
fun main(args: Array<String>) {
runApplication<StartApplication>(*args) {
setBannerMode(Banner.Mode.OFF)
setLogStartupInfo(true)
}
}

如果列出您的项目依赖项,您将看到

  • org.apache.jmeter:ApacheJMeter_core:5.0commons-collections:commons-collections:3.2.2具有传递依赖性
  • 它又与您的org.apache.commons:commons-collections4:4.2发生冲突

所以你正在遭受一种罐子地狱的折磨。您不能在一个应用程序中可靠地使用同一JAR的两个不同版本,因为CLASSPATH中加载类的顺序是一个很大的问号。从理论上讲,您可以使用自定义类加载器来控制这一点,但这对您的项目来说可能有些过头了。

最简单的方法是删除implementation("org.apache.commons:commons-collections4:4.2")依赖项,并重新编写受影响的代码以使用Commons Collections 3语法。

或者,您将不得不重新考虑在应用程序中使用JMeter的方式,并选择一种替代的JMeter执行选项。

相关内容

  • 没有找到相关文章

最新更新