Ошибка Stackoverflow при использовании Apache Jmeter Core

Я новичок в Gradle. Я использую свой Gradle со скриптом kotlin dsl. Когда я выполняю с помощью

gradle bootRun

Затем он выдает ошибку StackoverFlow для log4J.

Исключение в потоке «основной» java.lang.StackOverflowError в java.lang.reflect.InvocationTargetException.(InvocationTargetException.java:72) в sun.reflect.GeneratedMethodAccessor1.invoke(неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl. 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)

Как только я прокомментирую implementation( "org.apache.jmeter:ApacheJMeter_core:5.0") из скрипта сборки, он не выдаст никакой ошибки, что мне делать? Пожалуйста помоги.

Сборка.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"
}

Основной забавный файл

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)
    }
}

person Community    schedule 22.12.2018    source источник


Ответы (1)


Если вы перечислите зависимости вашего проекта, вы увидите, что

Итак, вы страдаете от формы Jar Hell. Вы не можете надежно использовать 2 разные версии одного и того же JAR в одном приложении в порядке загрузки классов в CLASSPATH — большой вопросительный знак. Теоретически вы можете управлять этим с помощью пользовательского загрузчика классов, однако для вашего проекта это может оказаться излишним.

Проще всего было бы просто удалить зависимость implementation("org.apache.commons:commons-collections4:4.2") и переписать затронутый код для использования Синтаксис Commons Collections 3.

В качестве альтернативы вам придется пересмотреть способ использования JMeter в своем приложении и перейти на один из альтернативных вариантов исполнения JMeter.

person Dmitri T    schedule 24.12.2018