Ошибка Stackru при использовании Apache Jmeter Core
Я новичок в Gradle. Я использую свой gradle со сценарием kotlin dsl. Когда я выполняю, используя
gradle bootRun
Тогда это выдает ошибку StackoverFlow для log4J
Исключение в потоке "main" java.lang.StackruError в java.lang.reflect.InvocationTargetException.(InvocationTargetException.java:72) в sun.reflect.GeneratedMethodAccessor1.invoke(Неизвестный источник) в sun.reflect.Dein Java:43) на java.lang.reflect.Method.invoke(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") из сценария сборки, она не выдаст ошибку, что мне делать? Пожалуйста помоги.
Build.Gradle.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"
}
Основной Fun файл
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)
}
}
1 ответ
Если вы перечислите свои зависимости проекта, вы увидите, что
org.apache.jmeter:ApacheJMeter_core:5.0
имеет транзитивную зависимость отcommons-collections:commons-collections:3.2.2
- который в свою очередь сталкивается с вашим
org.apache.commons:commons-collections4:4.2
Таким образом, вы страдаете от формы Jar Hell. Вы не можете надежно использовать 2 разные версии одного и того же JAR в одном приложении, так как порядок загрузки классов в CLASSPATH - это большой вопросительный знак. Теоретически вы можете управлять этим с помощью пользовательского загрузчика классов, однако это может быть излишним для вашего проекта.
Самый простой будет просто удалить ваш implementation("org.apache.commons:commons-collections4:4.2")
зависимость и переписать затронутый код для использования синтаксиса Commons Collections 3.
В качестве альтернативы вам придется пересмотреть способ использования JMeter в своем приложении и перейти к одному из альтернативных вариантов выполнения JMeter.