使用Apache Jmeter Core时的Stackoverflow错误

时间:2018-12-22 20:17:11

标签: spring-boot gradle kotlin jmeter gradle-kotlin-dsl

我是Gradle的新手。我正在将我的gradle与kotlin dsl脚本一起使用。当我使用

执行时
  

使bootRun分级

然后它为log4J引发StackoverFlow错误

  

线程“ main”中的异常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”)时,它不会引发任何错误,我该怎么办?请帮忙。

Build.Gradle.kts

     package ass1;

    import java.util.Arrays;


    public static void main(String[] args) {
    int []array= {12,23,-22,0,43,545,-4,-55,43,12,0,-999,-87};
    int positive= 0; 
    int negative=0 ;
    for(int i : array){
        if(i>0)
            positive++;
        else if(i<0)
            negative++;
    }
    int[] neg = new int[negative];
    int[] pos = new int[positive];
    int n = 0;
    int p = 0;
    for (int i=0;i<array.length;i++){
        if(array [i]<0){
            neg[n] = array[i];
            n++;
        }
        else if(array[i]>0){
            pos[p] = array [i];
                    p++;}

    } 
    System.out.println("Positive numbers : "+Arrays.toString(pos));
    System.out.println("Negative numbers : "+Arrays.toString(neg));
    Arrays.sort(array);


    }



  }

主要娱乐文件

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

1 个答案:

答案 0 :(得分:0)

如果您list your project dependencies,您会看到

因此,您正遭受Jar Hell形式的痛苦。您无法在一个应用程序中可靠地使用同一JAR的2个不同版本,因为CLASSPATH中已加载类的顺序是一个很大的问号。从理论上讲,您可以使用custom classloader来控制它,但是对于您的项目而言,这可能是一个过大的选择。

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

或者,您将不得不重新考虑在应用程序中使用JMeter的方式,并选择one of the alternative JMeter execution options