blob: b5e0d3d75bbb119d07d50401745bfbe583ec4dc7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.github.autostyle.gradle.AutostyleTask
import com.github.vlsi.gradle.ide.IdeExtension
plugins {
id("java-test-fixtures")
id("build-logic.jvm-published-library")
}
dependencies {
api(projects.src.launcher)
api(projects.src.jorphan)
testImplementation(testFixtures(projects.src.jorphan))
api("bsf:bsf") {
because("protected BSFManager BSFTestElement#getManager()")
}
api("com.fifesoft:rsyntaxtextarea") {
because("JSyntaxTextArea extends RSyntaxTextArea")
}
api("net.sf.jtidy:jtidy") {
because("public static Tidy XPathUtil#makeTidyParser()")
}
api("com.thoughtworks.xstream:xstream") {
because("XStream in used in public API")
}
api("org.apache.logging.log4j:log4j-1.2-api")
api("org.apache.logging.log4j:log4j-api")
api("org.apache.logging.log4j:log4j-core") {
because("GuiLogEventAppender is using log4j-core to implement GUI-based log appender")
}
api("org.apache.logging.log4j:log4j-slf4j-impl") {
because("Both log4j and slf4j are included, so it makes sense to just add log4j->slf4j bridge as well")
}
api("org.apiguardian:apiguardian-api")
api("oro:oro") {
because("Perl5Matcher org.apache.jmeter.util.JMeterUtils.getMatcher()")
}
api("xalan:xalan") {
because("PropertiesBasedPrefixResolver extends PrefixResolverDefault")
}
api("xalan:serializer") {
because("Xalan 2.7.3 misses xalan:serializer dependency in pom.xml, see https://issues.apache.org/jira/browse/XALANJ-2649")
}
api("xml-apis:xml-apis") {
because("Xalan 2.7.3 misses xml-apis:xml-apis dependency in pom.xml, see https://issues.apache.org/jira/browse/XALANJ-2649")
}
// Note: Saxon should go AFTER xalan so xalan XSLT is used
// org.apache.jmeter.util.XPathUtilTest.testFormatXmlSimple assumes xalan transformer
api("net.sf.saxon:Saxon-HE") {
because("XPathUtil: throws SaxonApiException")
}
runtimeOnly("org.codehaus.groovy:groovy") {
because("Groovy is a default JSR232 engine")
}
arrayOf("dateutil", "datetime", "jmx", "json", "jsr223", "sql", "templates").forEach {
runtimeOnly("org.codehaus.groovy:groovy-$it") {
because("Groovy is a default JSR232 engine")
}
}
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing")
implementation("com.fasterxml.jackson.core:jackson-annotations")
implementation("com.fasterxml.jackson.core:jackson-core")
implementation("com.fasterxml.jackson.core:jackson-databind")
implementation("com.formdev:svgSalamander")
implementation("com.github.ben-manes.caffeine:caffeine")
implementation("com.github.weisj:darklaf-core")
implementation("com.github.weisj:darklaf-theme")
implementation("com.github.weisj:darklaf-property-loader")
implementation("com.github.weisj:darklaf-extensions-rsyntaxarea")
implementation("com.miglayout:miglayout-swing")
implementation("commons-codec:commons-codec") {
because("DigestUtils")
}
runtimeOnly("commons-collections:commons-collections") {
because("Compatibility for old plugins")
}
implementation("org.jetbrains.lets-plot:lets-plot-batik")
implementation("org.jetbrains.lets-plot:lets-plot-kotlin-jvm")
implementation("org.apache.commons:commons-collections4")
implementation("org.apache.commons:commons-math3") {
because("Mean, DescriptiveStatistics")
}
implementation("org.apache.commons:commons-text")
// For some reason JMeter bundles just tika-core and tika-parsers without transitive
// dependencies. So we exclude those
implementation("org.apache.tika:tika-core") {
isTransitive = false
}
runtimeOnly("org.apache.tika:tika-parsers") {
isTransitive = false
}
implementation("org.apache.xmlgraphics:xmlgraphics-commons")
implementation("org.freemarker:freemarker")
implementation("org.jodd:jodd-core")
implementation("org.jodd:jodd-props")
implementation("org.mozilla:rhino")
implementation("org.slf4j:jcl-over-slf4j")
// TODO: JMeter bundles Xerces, however the reason is unknown
runtimeOnly("xerces:xercesImpl")
runtimeOnly("xml-apis:xml-apis")
testImplementation("commons-net:commons-net")
testImplementation("io.mockk:mockk")
testRuntimeOnly("org.spockframework:spock-core")
testFixturesApi(testFixtures(projects.src.jorphan))
testFixturesImplementation("junit:junit")
testFixturesImplementation("org.spockframework:spock-core")
testFixturesImplementation(projects.src.testkit)
testFixturesImplementation("org.junit.jupiter:junit-jupiter")
}
val generatedVersionDir = layout.buildDirectory.dir("generated/sources/version")
val versionClass by tasks.registering(Sync::class) {
val lastEditYear: String by rootProject.extra
val displayVersion: String by rootProject.extra
inputs.property("@VERSION@", displayVersion)
inputs.property("@YEAR@", lastEditYear)
outputs.dir(generatedVersionDir)
from("$projectDir/src/main/version") {
include("**/*.java")
filter { x: String ->
x.replace("@VERSION@", displayVersion)
.replace("@YEAR@", lastEditYear)
}
}
into(generatedVersionDir)
}
// For some reason, using `ide { ... }` sometimes causes
// Caused by: java.lang.IllegalStateException: couldn't find inline method
// Lorg/gradle/kotlin/dsl/Accessorslkzxmv806rumtqvft7195qyhKt;.getIde(Lorg/gradle/api/Project;)Lcom/github/vlsi/gradle/ide/IdeExtension;
configure<IdeExtension> {
generatedJavaSources(versionClass.get(), generatedVersionDir.get().asFile)
}
// <editor-fold defaultstate="collapsed" desc="Gradle can't infer task dependencies, however it sees they use the same directories. So we add the dependencies">
tasks.sourcesJar {
dependsOn(versionClass)
}
plugins.withId("org.jetbrains.kotlin.jvm") {
tasks.named("compileKotlin") {
dependsOn(versionClass)
}
}
plugins.withId("org.jetbrains.kotlin.kapt") {
// kapt adds kaptGenerateStubsKotlin in afterEvaluate, so we can't use just tasks.named here
// This workaround is needed for Kotlin Gradle Plugin 1.9
afterEvaluate {
tasks.named("kaptGenerateStubsKotlin") {
dependsOn(versionClass)
}
}
}
tasks.withType<Checkstyle>().matching { it.name == "checkstyleMain" }
.configureEach {
mustRunAfter(versionClass)
}
tasks.withType<AutostyleTask>().configureEach {
mustRunAfter(versionClass)
}
// </editor-fold>
tasks.jar {
into("org/apache/jmeter/images") {
from("$rootDir/xdocs/images/logo.svg")
}
}