我是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”)时,它不会引发任何错误,我该怎么办?请帮忙。
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"
}
答案 0 :(得分:0)
如果您list your project dependencies,您会看到
org.apache.jmeter:ApacheJMeter_core:5.0
对commons-collections:commons-collections:3.2.2
具有传递依赖org.apache.commons:commons-collections4:4.2
冲突因此,您正遭受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。