我是Gradle的新手。我正在使用我的gradle与kotlin-dsl脚本。当我使用执行时
gradle引导运行
然后它抛出log4J 的StackaoverFlow错误
线程"main"java.lang.StackOverflowError中出现异常java.lang.reflect.IInvocationTargetException。(InvocationTargetException.java:72)位于sun.reflect.GeneratedMethodAccessor1.invoke(未知源)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于java.lang.reflect.Method.ioke(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")时,它不会抛出任何错误,我该怎么办?请帮忙。
建筑等级.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)
}
}
如果列出您的项目依赖项,您将看到
org.apache.jmeter:ApacheJMeter_core:5.0
对commons-collections:commons-collections:3.2.2
具有传递依赖性- 它又与您的
org.apache.commons:commons-collections4:4.2
发生冲突
所以你正在遭受一种罐子地狱的折磨。您不能在一个应用程序中可靠地使用同一JAR的两个不同版本,因为CLASSPATH中加载类的顺序是一个很大的问号。从理论上讲,您可以使用自定义类加载器来控制这一点,但这对您的项目来说可能有些过头了。
最简单的方法是删除implementation("org.apache.commons:commons-collections4:4.2")
依赖项,并重新编写受影响的代码以使用Commons Collections 3语法。
或者,您将不得不重新考虑在应用程序中使用JMeter的方式,并选择一种替代的JMeter执行选项。