Ошибка Stackoverflow при использовании Apache Jmeter Core - PullRequest
0 голосов
/ 22 декабря 2018

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

gradle bootRun

, тогда выдается ошибка StackoverFlow для log4J

Исключение в потоке "main" java.lang.StackOverflowError в java.lang.reflect.InvocationTargetException. (InvocationTargetException.java:72) в sun.reflect.GeneratedMethodAccessor1.invoke (Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.Met.java.jjМетоды: 123) at 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"
}

Файл Main 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 Ответ

0 голосов
/ 24 декабря 2018

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

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

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

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

...