mirror of https://github.com/apache/jmeter.git
Add Gradle build scripts
This commit is contained in:
parent
77c756c00f
commit
2be94e85da
|
@ -1,6 +1,16 @@
|
|||
# Directory trees to ignore
|
||||
/backups/
|
||||
/build/
|
||||
/buildSrc/build/
|
||||
/buildSrc/subprojects/*/build/**
|
||||
/buildSrc/subprojects/*/bin/**
|
||||
/buildSrc/subprojects/*/out/**
|
||||
/src/*/build/
|
||||
/src/*/bin/
|
||||
/src/*/out/
|
||||
/src/protocol/*/build/
|
||||
/src/protocol/*/bin/
|
||||
/src/protocol/*/out/
|
||||
/dist/
|
||||
/docs/
|
||||
/local/
|
||||
|
@ -10,6 +20,14 @@
|
|||
/target/
|
||||
|
||||
!/bin/report-template/**/dist
|
||||
/bin/temp/
|
||||
/bin/testfiles/testReport*
|
||||
|
||||
# Ignore Gradle project-specific cache directory
|
||||
.gradle
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
# specific files to ignore
|
||||
*.log
|
||||
|
|
50
.travis.yml
50
.travis.yml
|
@ -1,54 +1,38 @@
|
|||
sudo: false
|
||||
language: java
|
||||
|
||||
before_script:
|
||||
- test "x$RUN_CHECKSTYLE" != 'x' || ant -Djava.awt.headless=true clean download_jars install
|
||||
- test "x$RUN_CHECKSTYLE" != 'xtrue' || ant -Djava.awt.headless=true download_checkstyle
|
||||
|
||||
before_install:
|
||||
- wget --no-check-certificate https://www.apache.org/dist/ant/binaries/apache-ant-1.10.5-bin.tar.gz
|
||||
- tar -xzvf apache-ant-1.10.5-bin.tar.gz
|
||||
- export PATH="$(pwd)/apache-ant-1.10.5/bin:$PATH"
|
||||
- echo $(ant -version)
|
||||
|
||||
# skip default "install" command
|
||||
install: true
|
||||
|
||||
before_cache:
|
||||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.gradle/caches/
|
||||
- $HOME/.gradle/wrapper/
|
||||
|
||||
env:
|
||||
global:
|
||||
- ANT_OPTS="-Ddisable-svnCheck=true -Djava.awt.headless=true -Drmi_force_localhost=true"
|
||||
- GRADLE_ARGS="-Djava.awt.headless=true"
|
||||
# Building source and binary distributions takes time, and it does not verify much, so we skip it in CI
|
||||
- SKIP_DIST_TASKS="$GRADLE_ARGS -PskipDist"
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- jdk: oraclejdk8
|
||||
env: RUN_CHECKSTYLE=true
|
||||
script: ant -Djava.awt.headless=true checkstyle
|
||||
- name: Coverage on our default build with Oracle Java 8
|
||||
jdk: oraclejdk8
|
||||
script:
|
||||
- ant coverage-travis
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
sudo: true # otherwise TEST_HTTPS.jmx -> analytics.usa.gov does not work
|
||||
- name: Tests with OpenJDK 8
|
||||
- name: Tests with OpenJDK 8 + code coverage
|
||||
jdk: openjdk8
|
||||
script:
|
||||
- ant test
|
||||
- ./gradlew $GRADLE_ARGS check createDist jacocoReport
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
- name: Tests with OpenJDK 11
|
||||
jdk: openjdk11
|
||||
script:
|
||||
- ant test
|
||||
sudo: true # otherwise TEST_HTTPS.jmx -> analytics.usa.gov does not work
|
||||
- ./gradlew $SKIP_DIST_TASKS -PskipCheckstyle build createDist
|
||||
- name: Tests with OpenJDK EA
|
||||
jdk: openjdk-ea
|
||||
script:
|
||||
- ant test
|
||||
sudo: true # otherwise TEST_HTTPS.jmx -> analytics.usa.gov does not work
|
||||
- ./gradlew $SKIP_DIST_TASKS -PskipCheckstyle build createDist
|
||||
allow_failures:
|
||||
- jdk: openjdk-ea
|
||||
# disable building with jdk9 as it has a bug and will not compile JMeter
|
||||
# see https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8193802
|
||||
# - jdk: oraclejdk9
|
||||
# script: ant -Djava.awt.headless=true -Drmi_force_localhost=true -Dskip.bug52310=true test
|
||||
# sudo: true # otherwise TEST_HTTPS.jmx -> analytics.usa.gov does not work
|
||||
|
||||
|
|
|
@ -23,6 +23,41 @@ See:
|
|||
* https://bz.apache.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=NEEDINFO&bug_severity=Blocker&bug_severity=Critical&bug_severity=Major&bug_severity=Normal&bug_severity=Regression&bug_severity=Minor&bug_severity=Trivial&product=JMeter&order=Bug%20Number&list_id=164231
|
||||
* https://bz.apache.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=NEEDINFO&bug_severity=Enhancement&product=JMeter&order=Bug%20Number&list_id=164232
|
||||
|
||||
## Development setup
|
||||
|
||||
### Gradle
|
||||
|
||||
You might find useful Gradle commands in [gradle.md](gradle.md)
|
||||
|
||||
### <a name="intellij"></a>IntelliJ IDEA
|
||||
|
||||
You require IntelliJ 2018.3.1 or newer.
|
||||
|
||||
1. Open the build.gradle.kts file with IntelliJ IDEA and choose `Open as Project`
|
||||
1. Make sure `Create separate module per source set` is selected
|
||||
1. Make sure `Use default gradle wrapper` is selected
|
||||
1. In the `File already exists` dialogue, choose `Yes` to overwrite
|
||||
1. In the `Open Project` dialogue, choose `Delete Existing Project and Import`
|
||||
|
||||
### Eclipse
|
||||
|
||||
Eclipse can import Gradle projects automatically via `Import...->Gradle project` wizard.
|
||||
|
||||
Optionally you can generate Eclipse project by running
|
||||
|
||||
./gradlew eclipse
|
||||
|
||||
The steps to import the sources (based on Eclipse 2019-06) into Eclipse are as follows:
|
||||
|
||||
1. Install `Eclipse IDE for Java Developers`
|
||||
1. Install the Groovy Eclipse plugin and select Groovy Compiler 2.4 (some tests are written in Groovy)
|
||||
1. Install `Kotlin for Eclipse` plugin (builds scripts are written in Kotlin)
|
||||
1. Make sure you have a Java 8 compatible JDK configured in your workspace
|
||||
1. Open `File->Import...`
|
||||
1. Select `Existing Gradle Project` and click `Next`
|
||||
1. Read `How to experience the best Gradle integration` and click `Next`
|
||||
1. Then you might just click `Finish`
|
||||
|
||||
## :star2: Have a patch?
|
||||
The best way to make sure your issue or feature is addressed is to submit a patch.
|
||||
We accept patches through:
|
||||
|
|
112
LICENSE
112
LICENSE
|
@ -176,115 +176,3 @@
|
|||
END OF TERMS AND CONDITIONS
|
||||
|
||||
============================ End of Apache License V 2.0 ===================
|
||||
|
||||
Source and binary distributions of Apache JMeter contain:
|
||||
|
||||
- icons from the Open Icon Library http://openiconlibrary.sourceforge.net/
|
||||
For license details, please see the file: licenses/src/openiconlibrary.txt
|
||||
|
||||
Additional source files (also included in binary distributions):
|
||||
For details, please see the files under: licenses/src
|
||||
|
||||
* bootstrap-3.3.4.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/bootstrap
|
||||
* bootstrap-social.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/bootstrap-social
|
||||
* datatables-1.10.9.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/datatables
|
||||
* datatables-plugins.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/datatables-plugins
|
||||
* datatables-responsive-1.0.5.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/datatables-responsive
|
||||
* flot-0.8.3.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/flot
|
||||
* flot-axislabels.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/flot-axislabels
|
||||
* flot-tooltip-0.7.1.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/flot.tooltip
|
||||
* font-awesome-4.2.0.txt (OFL-1.1 | MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/font-awesome
|
||||
* holderjs.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/holderjs
|
||||
* jquery-2.1.3.txt (MIT | ./bin/report-template/sbadmin2-1.0.7/bower_components/jquery
|
||||
* metisMenu-1.1.3.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/metisMenu
|
||||
* mocha-1.17.1.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/mocha
|
||||
* morrisjs-0.5.0.txt (Simplified BSD) | ./bin/report-template/sbadmin2-1.0.7/bower_components/morrisjs
|
||||
* raphael-2.1.4.txt (MIT) | ./bin/report-template/sbadmin2-1.0.7/bower_components/raphael
|
||||
* start-bootstrap-admin2-1.0.7.txt (Apache License V2.0) | ./bin/report-template/sbadmin2-1.0.7 and not in the above folders
|
||||
|
||||
Binary distributions additionally contain software included under various licenses,
|
||||
see below.
|
||||
|
||||
The following software is provided under the Apache License V 2.0 (as above):
|
||||
|
||||
- Software produced at the ASF:
|
||||
|
||||
* apache-bsf-2.4.0.jar
|
||||
* beanshell-2.0b6.jar
|
||||
* cglib-nodep-3.2.9.jar
|
||||
* commons-codec-1.11.jar
|
||||
* commons-collections-3.2.2.jar
|
||||
* commons-dbcp2-2.5.0.jar
|
||||
* commons-io-2.6.jar
|
||||
* commons-jexl2-2.1.1.jar
|
||||
* commons-jexl3-3.1.jar
|
||||
* commons-lang3-3.8.1.jar
|
||||
* commons-math3-3.6.1.jar
|
||||
* commons-net-3.6.jar
|
||||
* commons-pool2-2.6.0.jar
|
||||
* commons-text-1.6.jar
|
||||
* dec-0.1.2.jar
|
||||
* groovy-all-2.4.16.jar
|
||||
* httpasyncclient-4.1.4.jar
|
||||
* httpclient-4.5.8.jar
|
||||
* httpcore-4.4.11.jar
|
||||
* httpcore-nio-4.4.11.jar
|
||||
* httpmime-4.5.8.jar
|
||||
* jakarta-oro-2.0.8.jar
|
||||
* jms-1.1.1.jar
|
||||
* log4j-1.2-api-2.11.1.jar
|
||||
* log4j-api-2.11.1.jar
|
||||
* log4j-core-2.11.1.jar
|
||||
* log4j-slf4j-impl-2.11.1.jar
|
||||
* serializer-2.7.2.jar
|
||||
* startbootstrap-sb-admin-2-1.0.7
|
||||
* tika-core-1.21.jar
|
||||
* tika-parsers-1.21.jar
|
||||
* xalan-2.7.2.jar
|
||||
* xerces-2.12.0.jar
|
||||
* xml-apis-1.4.01.jar
|
||||
* xmlgraphics-commons-2.3.jar
|
||||
|
||||
- Software produced outside the ASF which is available under AL 2.0:
|
||||
|
||||
* accessors-smart-1.2.jar
|
||||
* caffeine-2.6.2.jar
|
||||
* darcula.jar
|
||||
* freemarker-2.3.28.jar (AL2.0, see licenses/bin for additional info)
|
||||
* jackson-annotations-2.9.9.jar
|
||||
* jackson-core-2.9.9.jar
|
||||
* jackson-databind-2.9.9.jar
|
||||
* json-path-2.4.0.jar
|
||||
* json-smart-2.3.jar
|
||||
* mongo-java-driver-2.11.3.jar
|
||||
* objenesis-2.6.jar
|
||||
* ph-commons-9.2.1.jar
|
||||
* ph-css-6.1.1.jar
|
||||
* spock-core-1.2-groovy-2.4.jar
|
||||
|
||||
- Software produced outside the ASF which is available under other licenses (not AL 2.0):
|
||||
For details, please see the files under: licenses/bin
|
||||
|
||||
* asm-7.0.jar (BSD)
|
||||
* dnsjava-2.1.8.jar (BSD)
|
||||
* hamcrest-core-1.3.jar (BSD)
|
||||
* javamail-1.5.0-b01.jar (CDDL Version 1.0)
|
||||
* javax.activation-api-1.2.0.jar (CDDL Version 1.1)
|
||||
* javax.activation-1.2.0.jar (CDDL Version 1.1)
|
||||
* jcharts-0.7.5.jar (?)
|
||||
* jcl-over-slf4j-1.7.25.jar (MIT)
|
||||
* jsoup-1.11.3.jar (MIT)
|
||||
* jodd-core-5.0.6.jar (Simplified BSD)
|
||||
* jodd-lagarto-5.0.6.jar (Simplified BSD)
|
||||
* jodd-log-5.0.6.jar (Simplified BSD)
|
||||
* jodd-props-5.0.6.jar (Simplified BSD)
|
||||
* jtidy-r938.jar (?)
|
||||
* junit-4.12.jar (BSD)
|
||||
* rhino-1.7.10.jar (MPL 2.0)
|
||||
* rsyntaxtextarea-3.0.2.jar (BSD)
|
||||
* slf4j-api-1.7.25.jar (MIT)
|
||||
* xmlpull-1.1.3.1.jar (Public Domain)
|
||||
* xpp3-1.1.4c.jar (Indiana University Extreme! Lab Software License 1.1.1)
|
||||
* xstream-1.4.11.jar (BSD)
|
||||
* hamcrest-date-2.0.4.jar (BSD)
|
||||
* Saxon-HE-9.9.1-1.jar (Mozilla Public License version 2.0)
|
||||
|
|
|
@ -0,0 +1,402 @@
|
|||
/*
|
||||
* 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.spotbugs.SpotBugsPlugin
|
||||
import com.github.spotbugs.SpotBugsTask
|
||||
import com.github.vlsi.gradle.crlf.CrLfSpec
|
||||
import com.github.vlsi.gradle.crlf.LineEndings
|
||||
import com.github.vlsi.gradle.crlf.filter
|
||||
import com.github.vlsi.gradle.git.FindGitAttributes
|
||||
import com.github.vlsi.gradle.git.dsl.gitignore
|
||||
import com.github.vlsi.gradle.release.RepositoryType
|
||||
import org.ajoberstar.grgit.Grgit
|
||||
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
||||
|
||||
plugins {
|
||||
java
|
||||
jacoco
|
||||
checkstyle
|
||||
id("org.jetbrains.gradle.plugin.idea-ext") version "0.5" apply false
|
||||
id("org.nosphere.apache.rat") version "0.5.0"
|
||||
id("com.github.spotbugs") version "1.6.10"
|
||||
id("org.sonarqube") version "2.7.1"
|
||||
id("com.github.vlsi.crlf") version "1.17.0"
|
||||
id("com.github.vlsi.ide") version "1.17.0"
|
||||
id("com.github.vlsi.stage-vote-release") version "1.17.0"
|
||||
signing
|
||||
publishing
|
||||
}
|
||||
|
||||
ide {
|
||||
copyrightToAsf()
|
||||
ideaInstructionsUri =
|
||||
uri("https://github.com/apache/jmeter/blob/master/CONTRIBUTING.md#intellij")
|
||||
doNotDetectFrameworks("android", "jruby")
|
||||
}
|
||||
|
||||
fun Project.boolProp(name: String) =
|
||||
findProperty(name)
|
||||
// Project properties include tasks, extensions, etc, and we want only String properties
|
||||
// We don't want to use "task" as a boolean property
|
||||
?.let { it as? String }
|
||||
?.equals("false", ignoreCase = true)?.not()
|
||||
|
||||
|
||||
// Release candidate index
|
||||
val String.v: String get() = rootProject.extra["$this.version"] as String
|
||||
version = "jmeter".v + releaseParams.snapshotSuffix
|
||||
|
||||
val displayVersion by extra {
|
||||
version.toString() +
|
||||
if (releaseParams.release.get()) {
|
||||
""
|
||||
} else {
|
||||
// Append 7 characters of Git commit id for snapshot version
|
||||
val grgit: Grgit? by project
|
||||
grgit?.let { " " + it.head().abbreviatedId }
|
||||
}
|
||||
}
|
||||
|
||||
println("Building JMeter $version")
|
||||
|
||||
fun reportsForHumans() = !(System.getenv()["CI"]?.toBoolean() ?: false)
|
||||
|
||||
val lastEditYear by extra {
|
||||
file("$rootDir/NOTICE")
|
||||
.readLines()
|
||||
.first { it.contains("Copyright") }
|
||||
.let {
|
||||
"""Copyright \d{4}-(\d{4})""".toRegex()
|
||||
.find(it)?.groupValues?.get(1)
|
||||
?: throw IllegalStateException("Unable to identify copyright year from $rootDir/NOTICE")
|
||||
}
|
||||
}
|
||||
|
||||
// This task scans the project for gitignore / gitattributes, and that is reused for building
|
||||
// source/binary artifacts with the appropriate eol/executable file flags
|
||||
// It enables to automatically exclude patterns from .gitignore
|
||||
val gitProps by tasks.registering(FindGitAttributes::class) {
|
||||
// Scanning for .gitignore and .gitattributes files in a task avoids doing that
|
||||
// when distribution build is not required (e.g. code is just compiled)
|
||||
root.set(rootDir)
|
||||
}
|
||||
|
||||
val rat by tasks.getting(org.nosphere.apache.rat.RatTask::class) {
|
||||
gitignore(gitProps)
|
||||
// Note: patterns are in non-standard syntax for RAT, so we use exclude(..) instead of excludeFile
|
||||
exclude(rootDir.resolve("rat-excludes.txt").readLines())
|
||||
}
|
||||
|
||||
releaseParams {
|
||||
tlp.set("JMeter")
|
||||
releaseTag.set("v${project.version.toString().replace('.', '_')}")
|
||||
rcTag.set(releaseTag.map { "${it}_RC" + rc.get() })
|
||||
previewSiteContents {
|
||||
into("rat")
|
||||
from(rat)
|
||||
}
|
||||
svnDist {
|
||||
// All the release versions are put under release/jmeter/{source,binary}
|
||||
releaseFolder.set("release/jmeter")
|
||||
releaseSubfolder.apply {
|
||||
put(Regex("_src\\."), "sources")
|
||||
put(Regex("."), "binaries")
|
||||
}
|
||||
}
|
||||
nexus {
|
||||
if (repositoryType.get() == RepositoryType.PROD) {
|
||||
// org.apache.jmeter at repository.apache.org
|
||||
stagingProfileId.set("4d29c092016673")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val jacocoReport by tasks.registering(JacocoReport::class) {
|
||||
group = "Coverage reports"
|
||||
description = "Generates an aggregate report from all subprojects"
|
||||
}
|
||||
|
||||
val jacocoEnabled by extra {
|
||||
(boolProp("coverage") ?: false) || gradle.startParameter.taskNames.any { it.contains("jacoco") }
|
||||
}
|
||||
|
||||
// Do not enable spotbugs by default. Execute it only when -Pspotbugs is present
|
||||
val enableSpotBugs by extra {
|
||||
boolProp("spotbugs") ?: false
|
||||
}
|
||||
|
||||
val skipCheckstyle by extra {
|
||||
boolProp("skipCheckstyle") ?: false
|
||||
}
|
||||
|
||||
// Allow to skip building source/binary distributions
|
||||
val skipDist by extra {
|
||||
boolProp("skipDist") ?: false
|
||||
}
|
||||
|
||||
allprojects {
|
||||
if (project.path != ":src") {
|
||||
tasks.register<DependencyInsightReportTask>("allDependencyInsight") {
|
||||
group = HelpTasksPlugin.HELP_GROUP
|
||||
description =
|
||||
"Shows insights where the dependency is used. For instance: allDependencyInsight --configuration compile --dependency org.jsoup:jsoup"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sonarqube {
|
||||
properties {
|
||||
// See https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Gradle#AnalyzingwithSonarQubeScannerforGradle-Configureanalysisproperties
|
||||
property("sonar.sourceEncoding", "UTF-8")
|
||||
val projectName = "JMeter"
|
||||
property("sonar.projectName", projectName)
|
||||
property("sonar.projectKey", "org.apache.jmeter:$projectName")
|
||||
property("sonar.projectVersion", project.version.toString())
|
||||
property("sonar.host.url", System.getenv()["SONAR_HOST_URL"] ?: "http://localhost:9000")
|
||||
property("sonar.login", System.getenv()["SONAR_LOGIN"] ?: "")
|
||||
property("sonar.password", System.getenv()["SONAR_PASSWORD"] ?: "")
|
||||
property("sonar.links.homepage", "https://jmeter.apache.org")
|
||||
property("sonar.links.ci", "https://builds.apache.org/job/JMeter-trunk/")
|
||||
property("sonar.links.scm", "https://jmeter.apache.org/svnindex.html")
|
||||
property("sonar.links.issue", "https://jmeter.apache.org/issues.html")
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
group = "org.apache.jmeter"
|
||||
// JMeter ClassFinder parses "class.path" and tries to find jar names there,
|
||||
// so we should produce jars without versions names for now
|
||||
// version = rootProject.version
|
||||
plugins.withType<JavaPlugin> {
|
||||
// We don't intend to resolve that configuration
|
||||
// It is in line with further Gradle versions: https://github.com/gradle/gradle/issues/8585
|
||||
dependencies {
|
||||
configurations {
|
||||
compileOnly(platform(project(":src:bom")))
|
||||
}
|
||||
}
|
||||
|
||||
apply<IdeaPlugin>()
|
||||
apply<EclipsePlugin>()
|
||||
if (!skipCheckstyle) {
|
||||
apply<CheckstylePlugin>()
|
||||
checkstyle {
|
||||
toolVersion = "checkstyle".v
|
||||
}
|
||||
}
|
||||
apply<SpotBugsPlugin>()
|
||||
|
||||
spotbugs {
|
||||
toolVersion = "spotbugs".v
|
||||
}
|
||||
}
|
||||
|
||||
plugins.withType<JacocoPlugin> {
|
||||
the<JacocoPluginExtension>().toolVersion = "jacoco".v
|
||||
|
||||
val testTasks = tasks.withType<Test>()
|
||||
val javaExecTasks = tasks.withType<JavaExec>()
|
||||
// This configuration must be postponed since JacocoTaskExtension might be added inside
|
||||
// configure block of a task (== before this code is run). See :src:dist-check:createBatchTask
|
||||
afterEvaluate {
|
||||
for (t in arrayOf(testTasks, javaExecTasks)) {
|
||||
t.configureEach {
|
||||
extensions.findByType<JacocoTaskExtension>()?.apply {
|
||||
// Do not collect coverage when not asked (e.g. via jacocoReport or -Pcoverage)
|
||||
isEnabled = jacocoEnabled
|
||||
// We don't want to collect coverage for third-party classes
|
||||
includes?.add("org.apache.jmeter.*")
|
||||
includes?.add("org.apache.jorphan.*")
|
||||
includes?.add("org.apache.commons.cli.*")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
jacocoReport {
|
||||
// Note: this creates a lazy collection
|
||||
// Some of the projects might fail to create a file (e.g. no tests or no coverage),
|
||||
// So we check for file existence. Otherwise JacocoMerge would fail
|
||||
val execFiles =
|
||||
files(testTasks, javaExecTasks).filter { it.exists() && it.name.endsWith(".exec") }
|
||||
executionData(execFiles)
|
||||
}
|
||||
|
||||
tasks.withType<JacocoReport>().configureEach {
|
||||
reports {
|
||||
html.isEnabled = reportsForHumans()
|
||||
xml.isEnabled = !reportsForHumans()
|
||||
}
|
||||
}
|
||||
// Add each project to combined report
|
||||
configure<SourceSetContainer> {
|
||||
val mainCode = main.get()
|
||||
jacocoReport.configure {
|
||||
additionalSourceDirs.from(mainCode.allJava.srcDirs)
|
||||
sourceDirectories.from(mainCode.allSource.srcDirs)
|
||||
// IllegalStateException: Can't add different class with same name: module-info
|
||||
// https://github.com/jacoco/jacoco/issues/858
|
||||
classDirectories.from(mainCode.output.asFileTree.matching {
|
||||
exclude("module-info.class")
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType<AbstractArchiveTask>().configureEach {
|
||||
// Ensure builds are reproducible
|
||||
isPreserveFileTimestamps = false
|
||||
isReproducibleFileOrder = true
|
||||
dirMode = "775".toInt(8)
|
||||
fileMode = "664".toInt(8)
|
||||
}
|
||||
|
||||
// Not all the modules use publishing plugin
|
||||
plugins.withType<PublishingPlugin> {
|
||||
apply<SigningPlugin>()
|
||||
// Sign all the published artifacts
|
||||
signing {
|
||||
sign(publishing.publications)
|
||||
}
|
||||
}
|
||||
|
||||
plugins.withType<SigningPlugin> {
|
||||
afterEvaluate {
|
||||
configure<SigningExtension> {
|
||||
val release = rootProject.releaseParams.release.get()
|
||||
// Note it would still try to sign the artifacts,
|
||||
// however it would fail only when signing a RELEASE version fails
|
||||
isRequired = release
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
plugins.withType<JavaPlugin> {
|
||||
// This block is executed right after `java` plugin is added to a project
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
ivy {
|
||||
url = uri("https://github.com/bulenkov/Darcula/raw/")
|
||||
content {
|
||||
includeModule("com.github.bulenkov.darcula", "darcula")
|
||||
}
|
||||
patternLayout {
|
||||
artifact("[revision]/build/[module].[ext]")
|
||||
}
|
||||
metadataSources {
|
||||
artifact() // == don't try downloading .pom file from the repository
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks {
|
||||
withType<JavaCompile>().configureEach {
|
||||
options.encoding = "UTF-8"
|
||||
}
|
||||
withType<ProcessResources>().configureEach {
|
||||
from(source) {
|
||||
include("**/*.properties")
|
||||
filteringCharset = "UTF-8"
|
||||
// apply native2ascii conversion since Java 8 expects properties to have ascii symbols only
|
||||
filter(org.apache.tools.ant.filters.EscapeUnicode::class)
|
||||
filter(LineEndings.LF)
|
||||
}
|
||||
// Text-like resources are normalized to LF (just for consistency purposes)
|
||||
// This makes to produce exactly the same jar files no matter which OS is used for the build
|
||||
from(source) {
|
||||
include("**/*.dtd")
|
||||
include("**/*.svg")
|
||||
include("**/*.txt")
|
||||
// Test resources have files in CP1252, and we don't want to parse them as UTF-8
|
||||
exclude("**/*cp1252*")
|
||||
filteringCharset = "UTF-8"
|
||||
filter(LineEndings.LF)
|
||||
}
|
||||
}
|
||||
afterEvaluate {
|
||||
// Add default license/notice when missing (e.g. see :src:config that overrides LICENSE)
|
||||
withType<Jar>().configureEach {
|
||||
CrLfSpec(LineEndings.LF).run {
|
||||
into("META-INF") {
|
||||
filteringCharset = "UTF-8"
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
// Note: we need "generic Apache-2.0" text without third-party items
|
||||
// So we use the text from $rootDir/config/ since source distribution
|
||||
// contains altered text at $rootDir/LICENSE
|
||||
textFrom("$rootDir/config/LICENSE")
|
||||
textFrom("$rootDir/NOTICE")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
withType<Jar>().configureEach {
|
||||
manifest {
|
||||
attributes["Bundle-License"] = "Apache-2.0"
|
||||
attributes["Specification-Title"] = "Apache JMeter"
|
||||
attributes["Specification-Vendor"] = "Apache Software Foundation"
|
||||
attributes["Implementation-Vendor"] = "Apache Software Foundation"
|
||||
attributes["Implementation-Vendor-Id"] = "org.apache"
|
||||
attributes["Implementation-Version"] = rootProject.version
|
||||
}
|
||||
}
|
||||
withType<Test>().configureEach {
|
||||
testLogging {
|
||||
exceptionFormat = TestExceptionFormat.FULL
|
||||
}
|
||||
// Pass the property to tests
|
||||
systemProperty("java.awt.headless", System.getProperty("java.awt.headless"))
|
||||
}
|
||||
withType<SpotBugsTask>().configureEach {
|
||||
group = LifecycleBasePlugin.VERIFICATION_GROUP
|
||||
if (enableSpotBugs) {
|
||||
description = "$description (skipped by default, to enable it add -Dspotbugs)"
|
||||
}
|
||||
reports {
|
||||
html.isEnabled = reportsForHumans()
|
||||
xml.isEnabled = !reportsForHumans()
|
||||
}
|
||||
enabled = enableSpotBugs
|
||||
}
|
||||
withType<Javadoc>().configureEach {
|
||||
(options as StandardJavadocDocletOptions).apply {
|
||||
noTimestamp.value = true
|
||||
showFromProtected()
|
||||
docEncoding = "UTF-8"
|
||||
charSet = "UTF-8"
|
||||
encoding = "UTF-8"
|
||||
docTitle = "Apache JMeter ${project.name} API"
|
||||
windowTitle = "Apache JMeter ${project.name} API"
|
||||
header = "<b>Apache JMeter</b>"
|
||||
bottom =
|
||||
"Copyright © 1998-$lastEditYear Apache Software Foundation. All Rights Reserved."
|
||||
if (JavaVersion.current() >= JavaVersion.VERSION_1_9) {
|
||||
addBooleanOption("html5", true)
|
||||
links("https://docs.oracle.com/javase/9/docs/api/")
|
||||
} else {
|
||||
links("https://docs.oracle.com/javase/8/docs/api/")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
configure<JavaPluginConvention> {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
plugins {
|
||||
java
|
||||
`kotlin-dsl` apply false
|
||||
}
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
applyKotlinProjectConventions()
|
||||
}
|
||||
|
||||
fun Project.applyKotlinProjectConventions() {
|
||||
apply(plugin = "org.gradle.kotlin.kotlin-dsl")
|
||||
|
||||
plugins.withType<KotlinDslPlugin> {
|
||||
configure<KotlinDslPluginOptions> {
|
||||
experimentalWarning.set(false)
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
sourceCompatibility = "unused"
|
||||
targetCompatibility = "unused"
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
subprojects.forEach {
|
||||
runtimeOnly(project(it.path))
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
#
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
|
||||
com.googlecode.javaewah/JavaEWAH/1.1.6=FEA689D1E29761CE90C860EE3650C4167AE9E5ECAA316247BDAFAC5833BCE48D2B3E04E633B426E3AB7EF3A5C9C7FD150FFA0C21AFDCAE9C945CB2BB85F8A82F
|
||||
com.jcraft/jsch/0.1.54=97EC6DE64F4870EE3C84F883BD3664562BFD600CA9F3364966E7DBEE7E4E8520647C03F9F81D6808E330052CA1333E37F497D6252CD26FE721A90F573CBE2036
|
||||
com.jcraft/jzlib/1.1.1=223AF0806A19FD25E2496C980B9824B7612528013EAB9E7E21161ACFE81A6F808D3D65148BDAA794C9AB73C518F6B49AA7A69107C9BC0D66D6F8E78C39964F8F
|
||||
org.ajoberstar.grgit/grgit-core/3.1.1=B856459DBAD417987ED640ECCD77DEE8E16589B75741BE4E985A028BC1ECEE71D1E3FE75E2BDDFB5342D54D497C41F9368F99C5FD77892C4A48E46EA37E114C8
|
||||
org.ajoberstar.grgit/grgit-gradle/3.1.1=B168B7249D83A2C156BD7C3F59E1DCA79ABEB3AB9F32AB548C3A429814FA5095E678839EB269DF332D0F003A7CAFAF3D69E07C0B8B123A4A8EA2F32C56A6C608
|
||||
org.bouncycastle/bcpg-jdk15on/1.60=8CB407B096C218152D427CAFE1DE55CA7E77555D688492F84477678CDB6B0DF14DD7BC3C64B7B93FEDBB52EDB1384CC97EF96A9D87162C8997C8DC49D538E565
|
||||
org.bouncycastle/bcpkix-jdk15on/1.60=D44CDAC998A0D804AC452725C9E84B7D517C838CC6770CECDB214E1DF50EFC5EC2D067A91A5009F1316A5635CF7A1D213F2EE2A4E7497C66E1C7BBD5D2D4445F
|
||||
org.bouncycastle/bcprov-jdk15on/1.60=1C08D82349E333720C08FC467FF6489B14B8633A09019BF8BB5E6A3C426DFAE6DCC415648FE1FB4A2DA8631548F4947AB6CA1BC90B3190A05040F4D2EB271A10
|
||||
org.eclipse.jgit/org.eclipse.jgit/5.3.0.201903130848-r=75C66DB40AB4D7C0765666E1F65633E6AC07A94898F9120BC132DAAEFB143866385CE3538CA0383AF4BABB70C1F69A387D737C60B6006D24FD2A8E177C8E127D
|
||||
org.gradle.kotlin/plugins/1.2.8=8EA1B7517CCCC6DD1A41CF0E88613F14548AF9052A0A8E1C68004F3B58A1D26B47A8BDA2D9F663213F59FCDBCEC4BE1A596D8B0B50013C7DD0276140D9DE3391
|
||||
org.jetbrains.intellij.deps/trove4j/1.0.20181211=1C805EFE0DD5700941D20F02D6BA8DD79C54BFFE3B0147D82AF9B7525DBDCC97EEE5B3258CBCE161A39A699C28574BA43BA401DBF3AD3D73600293146949D512
|
||||
org.jetbrains.kotlin/kotlin-android-extensions/1.3.31=4F12351F0D5C76A0A2AC632900011796E3407A3EC1BB47E292C9AB1A7860FFDBE97CB0148E01FF8B48F9DC2FBE4ECDEBD2E534FCBFC11887A8844CA4E15969D4
|
||||
org.jetbrains.kotlin/kotlin-annotation-processing-gradle/1.3.31=B6111418E8AAAC28E431EE50B25E08A79C2A687B909A059266AFF294EB00BCC631194BBA6EB2658725A5D42D1C393BC1236933F35AF7988F51845B02239E0F39
|
||||
org.jetbrains.kotlin/kotlin-build-common/1.3.31=D4FD475E78AF3B9D6802EE5E02996C37415D2EBAD50ACDE4C08F59EB7377ECE02ECC233D24FBFAE5BC7ACFD9E0C224E3AC59629BF62EF0B8C85C13F41E033172
|
||||
org.jetbrains.kotlin/kotlin-compiler-embeddable/1.3.31=9A02D07901B60508DBDA0EAC4B77EB0277EB2C2A9D5D12214D70033BD5DD998D93FF55CBC8E2AF9DD76DC98C6C93FA782BA9754A089878111BAE95540ABCB631
|
||||
org.jetbrains.kotlin/kotlin-compiler-runner/1.3.31=E1F54D04A06375F8C63752048D465FBC541FAAE1C566E4CB69AAC15D72BE99A2326C6E6FA7FEBB52D99140D057C276413F33CCB693ADED4322B2F0C47B0A3AD8
|
||||
org.jetbrains.kotlin/kotlin-daemon-client/1.3.31=C11140F18A4740F81B2CA3A6A91FCD64FCDBAD6FE9EBA4A936D12FEA063D46700CBB3410CC103856D36D7A477071284CF0C57A829D34EC84C0E03EDE61714FCD
|
||||
org.jetbrains.kotlin/kotlin-gradle-plugin-api/1.3.31=5FD21B25A8392863996555F5F79ABBD3FACE12B7DABC8D9254E00B6ECA490F9FD39921F70C440D177025C4B5BDA171B815F2E2D4C0397D0A9B4E1400FF2D0A58
|
||||
org.jetbrains.kotlin/kotlin-gradle-plugin-model/1.3.31=253FCF64208F43F0B0C23853D4008E54F220F03505EAE78EEA9D638AC366D6AF7DE4988DF3CB64C327B22AEA643E275C9C4829C61226F756B686E59D2AA6ED51
|
||||
org.jetbrains.kotlin/kotlin-gradle-plugin/1.3.31=DEB2B99A9B8A03E867CF13AF0FC0FBAF383079D756B8CE71F3FDA0C7C56B4F175E2628A987F26A9F08F5C45855F0B0897E906F324D1F7629D3479F0172AAFA31
|
||||
org.jetbrains.kotlin/kotlin-native-utils/1.3.31=7C48BC3942597D5D0A9697E6F788C6F1F11BF8CD9EC7EA24B96DEFD8360B932E6CF1673FA518909F1107A1FFEB52BA02F150890E54FB5C056132E4267F0B7133
|
||||
org.jetbrains.kotlin/kotlin-reflect/1.3.31=E8229A254AF9FC0BD0D0D7FADD5F7D9F3C66A5A1B67E899A287DAAB84ED1A1B8C42E9107A4E9AD8571E05744DBBC44A3129FD2ECD0565B0E476A6E64115935C8
|
||||
org.jetbrains.kotlin/kotlin-sam-with-receiver/1.3.31=856D9098AAB66CC8611D56566E9E0691C3AA3463F24311FFEED492C8FB34FF6EE6A314F5BCE3A2F5662AA3BC4453A0412E3ECCE68C23CBD812BA0010AA68949B
|
||||
org.jetbrains.kotlin/kotlin-script-runtime/1.3.31=89D1F00F20E6ED727C6161B6E0AB32D65705D07E21C75D181FDFD39DD40069DB9710FC831C9F4CF50DE3B4C96A8C9DDB5CE5A9DCCA094B81BE58D098D7D84217
|
||||
org.jetbrains.kotlin/kotlin-scripting-compiler-embeddable/1.3.31=3B27F42E75702DE44CB6CCC4E64D74CB801A406208311F2F2CC0E3022BE9BD4AC12F6C211DDB730E92746A6F57F96E232B4582B6EF1577795D3E749C74CED0EF
|
||||
org.jetbrains.kotlin/kotlin-stdlib-common/1.3.31=53DF3352743FF6756CA8A5A63EE04DE27B9FA873204F89823C4906CFE33BC5FA91899B35B6EDADF852F7DB2C300D56FCB2D32AE4606EFBA4E3BFF32BEED5531
|
||||
org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.31=9500F884AA93069DD0DCBBA231CE7CAD76BD9B71B2FA51573842AA9B730192A13B813402DF9DBC6956B7BB35ACC23072FBF04A93E0A98002500FBBE35E8894E5
|
||||
org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.3.31=16FE610D51CB610DBF1B1AAC490E159559F5172B29A04288AD18E95B68F462BE1A386B3F3B0D93AD4F7F3A1E5CD9498855571D9A24A0F5F6AD7D6FF20FFDDFD0
|
||||
org.jetbrains.kotlin/kotlin-stdlib/1.3.31=1DE7F0A1E0920D179DD3677D78B8D4AB009F04FED8919584A4190D4B69C2D4754454613A91BD41A66DA45E48F9E23B6AC5BFFF0B409F81BE1746556298AD698A
|
||||
org.jetbrains/annotations/13.0=5622D0FFE410E7272E2BB9FAE1006CAEDEB86D0C62D2D9F3929A3B3CDCDEF1963218FCF0CEDE82E95EF9F4DA3ED4A173FA055EE6E4038886376181E0423E02FF
|
||||
org.slf4j/slf4j-api/1.7.2=BFE12C722ED57FAA3E26FEF214D95B9BDD2192742901920954979926D51E7B1BF0F61EA538F858328F4D6A306AFFECDCEF9D52452530CD2FE5C03552350C0EA0
|
|
@ -0,0 +1,17 @@
|
|||
# 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.
|
||||
org.gradle.parallel=true
|
||||
kotlin.code.style=official
|
||||
kotlin.parallel.tasks.in.project=true
|
|
@ -0,0 +1,74 @@
|
|||
import org.gradle.api.internal.artifacts.result.DefaultResolvedDependencyResult
|
||||
import java.security.MessageDigest
|
||||
import java.util.*
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
include("batchtest")
|
||||
|
||||
val upperCaseLetters = "\\p{Upper}".toRegex()
|
||||
|
||||
fun String.toKebabCase() =
|
||||
replace(upperCaseLetters) { "-${it.value.toLowerCase()}" }
|
||||
|
||||
fun buildFileNameFor(projectDirName: String) =
|
||||
"$projectDirName.gradle.kts"
|
||||
|
||||
for (project in rootProject.children) {
|
||||
val projectDirName = project.name.toKebabCase()
|
||||
project.projectDir = file("subprojects/$projectDirName")
|
||||
project.buildFileName = buildFileNameFor(projectDirName)
|
||||
assert(project.projectDir.isDirectory)
|
||||
assert(project.buildFile.isFile)
|
||||
}
|
||||
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath("com.github.vlsi.gradle:checksum-dependency-plugin:1.19.0")
|
||||
}
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
// Note: we need to verify the checksum for checksum-dependency-plugin itself
|
||||
val expectedSha512 =
|
||||
"D7B1A0C7937DCB11536F97C52FE25752BD7DA6011299E81FA59AD446A843265A6FA079ECA1D5FD49C4B3C2496A363C60C5939268BED0B722EFB8BB6787A2B193"
|
||||
|
||||
fun File.sha512(): String {
|
||||
val md = java.security.MessageDigest.getInstance("SHA-512")
|
||||
forEachBlock { buffer, bytesRead ->
|
||||
md.update(buffer, 0, bytesRead)
|
||||
}
|
||||
return BigInteger(1, md.digest()).toString(16).toUpperCase()
|
||||
}
|
||||
//
|
||||
val checksumDependencyJar: File = buildscript.configurations["classpath"].resolve().first()
|
||||
val actualSha512 = checksumDependencyJar.sha512()
|
||||
if (actualSha512 != expectedSha512) {
|
||||
throw GradleException(
|
||||
"""
|
||||
Checksum mismatch for $checksumDependencyJar
|
||||
Expected: $expectedSha512
|
||||
Actual: $actualSha512
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
apply(plugin = "com.github.vlsi.checksum-dependency")
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
compile("org.ajoberstar.grgit:grgit-gradle:3.1.1")
|
||||
}
|
||||
|
||||
gradlePlugin {
|
||||
plugins {
|
||||
register("batchtest") {
|
||||
id = "jmeterbuild.batchtest"
|
||||
implementationClass = "org.apache.jmeter.buildtools.batchtest.BatchtestPlugin"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,207 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.jmeter.buildtools.batchtest
|
||||
|
||||
import org.eclipse.jgit.diff.DiffAlgorithm
|
||||
import org.eclipse.jgit.diff.DiffFormatter
|
||||
import org.eclipse.jgit.diff.RawText
|
||||
import org.eclipse.jgit.diff.RawTextComparator
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.kotlin.dsl.configure
|
||||
import org.gradle.kotlin.dsl.property
|
||||
import java.io.File
|
||||
import java.net.InetAddress
|
||||
import javax.inject.Inject
|
||||
|
||||
open class BatchTest @Inject constructor(objects: ObjectFactory) : JavaExec() {
|
||||
companion object {
|
||||
const val BATCH_TESTS_GROUP_NAME = "Batch test"
|
||||
}
|
||||
|
||||
@Input
|
||||
val ignoreErrorLogs = objects.property<Boolean>().convention(false)
|
||||
|
||||
@Input
|
||||
val testName = objects.property<String>()
|
||||
|
||||
@InputDirectory
|
||||
val inputDirectory = objects.directoryProperty().convention(
|
||||
project.rootProject.layout.projectDirectory.dir("bin/testfiles")
|
||||
)
|
||||
|
||||
@InputFile
|
||||
val batchProperties = objects.fileProperty().convention(
|
||||
project.rootProject.layout.projectDirectory.file("bin/testfiles/jmeter-batch.properties")
|
||||
)
|
||||
|
||||
@InputFile
|
||||
val log4jXml = objects.fileProperty().convention(
|
||||
project.rootProject.layout.projectDirectory.file("bin/testfiles/log4j2-batch.xml")
|
||||
)
|
||||
|
||||
@Input
|
||||
val userLanguage = objects.property<String>().convention("en")
|
||||
|
||||
@Input
|
||||
val userRegion = objects.property<String>().convention("en")
|
||||
|
||||
@Input
|
||||
val userCountry = objects.property<String>().convention("US")
|
||||
|
||||
@InputFile
|
||||
val jmx = objects.fileProperty()
|
||||
.convention(inputDirectory.file(testName.map { "$it.jmx" }))
|
||||
|
||||
@Internal
|
||||
val outputDirectory = objects.directoryProperty()
|
||||
.convention(project.rootProject.layout.projectDirectory.dir("bin"))
|
||||
|
||||
@Internal
|
||||
val logFile = objects.fileProperty()
|
||||
.convention(outputDirectory.file(testName.map { "$it.log" }))
|
||||
|
||||
@Internal
|
||||
val jtlFile = objects.fileProperty()
|
||||
.convention(outputDirectory.file(testName.map { "$it.jtl" }))
|
||||
|
||||
@Internal
|
||||
val csvFile = objects.fileProperty()
|
||||
.convention(outputDirectory.file(testName.map { "$it.csv" }))
|
||||
|
||||
@Internal
|
||||
val xmlFile = objects.fileProperty()
|
||||
.convention(outputDirectory.file(testName.map { "$it.xml" }))
|
||||
|
||||
@Internal
|
||||
val errFile = objects.fileProperty()
|
||||
.convention(outputDirectory.file(testName.map { "$it.err" }))
|
||||
|
||||
// Re-run the task when jar contents is changed
|
||||
@get:InputFiles
|
||||
val jars
|
||||
get() = project.rootProject.layout.projectDirectory.dir("lib").asFileTree
|
||||
|
||||
@get:InputFile
|
||||
val jmeterJar
|
||||
get() = project.rootProject.layout.projectDirectory.dir("bin").file("ApacheJMeter.jar")
|
||||
|
||||
init {
|
||||
group = BATCH_TESTS_GROUP_NAME
|
||||
description = "Runs jmx file via process fork and verifies outputs"
|
||||
configure {
|
||||
workingDir = File(project.rootDir, "bin")
|
||||
main = "org.apache.jmeter.NewDriver"
|
||||
classpath(jmeterJar)
|
||||
|
||||
// This does not depend on the task configuration, so the properties are initialized early
|
||||
// It enables to override the properties later (e.g. in the build script)
|
||||
maxHeapSize = "128m"
|
||||
jvmArgs("-Xss256k", "-XX:MaxMetaspaceSize=128m")
|
||||
systemProperty("java.rmi.server.hostname", InetAddress.getLocalHost().canonicalHostName)
|
||||
systemProperty("java.awt.headless", "true")
|
||||
}
|
||||
}
|
||||
|
||||
fun jmeterArgument(name: String, value: String) {
|
||||
args("-J$name=$value")
|
||||
}
|
||||
|
||||
private fun deleteWorkfiles() {
|
||||
project.delete(csvFile, xmlFile, logFile, jtlFile, errFile)
|
||||
}
|
||||
|
||||
fun compareFiles(summary: MutableList<String>, actualFile: File): Boolean {
|
||||
val actual = actualFile.readText()
|
||||
val fileName = actualFile.name
|
||||
val expectedFile = inputDirectory.file(fileName).get().asFile
|
||||
val expected = expectedFile.readText()
|
||||
if (expected == actual) {
|
||||
return true
|
||||
}
|
||||
|
||||
summary.add("unexpected output $fileName")
|
||||
println("ERROR: unexpected output for $fileName:")
|
||||
println(" - expected ${expectedFile.length()} bytes, $expectedFile")
|
||||
println(" + actual ${actualFile.length()} bytes, $actualFile")
|
||||
|
||||
val e = RawText(expectedFile)
|
||||
val a = RawText(actualFile)
|
||||
val diffAlgorithm = DiffAlgorithm.getAlgorithm(DiffAlgorithm.SupportedAlgorithm.HISTOGRAM)
|
||||
val edits = diffAlgorithm.diff(RawTextComparator.DEFAULT, e, a)
|
||||
DiffFormatter(System.out).format(edits, e, a)
|
||||
return false;
|
||||
}
|
||||
|
||||
override fun exec() {
|
||||
systemProperty("user.language", userLanguage.get())
|
||||
systemProperty("user.region", userRegion.get())
|
||||
systemProperty("user.country", userCountry.get())
|
||||
args("-pjmeter.properties")
|
||||
args("-q", batchProperties.get())
|
||||
args("-n")
|
||||
args("-t", jmx.get())
|
||||
args("-i", log4jXml.get())
|
||||
args("-j", logFile.get())
|
||||
args("-l", jtlFile.get())
|
||||
// Check properties can be passed to local/remote tests
|
||||
args("-Jmodule=Module")
|
||||
args("-Gmodule=Module")
|
||||
// Check property can be used for filenames in local/remote tests (no need to defined as -G)
|
||||
args("-JCSVFILE=${csvFile.get()}")
|
||||
|
||||
deleteWorkfiles()
|
||||
|
||||
super.exec()
|
||||
|
||||
val summary = mutableListOf<String>()
|
||||
checkErrors(summary)
|
||||
|
||||
if (summary.isNotEmpty()) {
|
||||
throw GradleException("Failures detected while testing ${jmx.get()}: $summary")
|
||||
}
|
||||
deleteWorkfiles()
|
||||
}
|
||||
|
||||
protected open fun checkErrors(summary: MutableList<String>) {
|
||||
compareFiles(summary, csvFile.get().asFile)
|
||||
compareFiles(summary, xmlFile.get().asFile)
|
||||
val log = logFile.get().asFile
|
||||
catLogFile(log, summary, ignoreErrorLogs.get())
|
||||
}
|
||||
|
||||
protected fun catLogFile(
|
||||
log: File,
|
||||
summary: MutableList<String>,
|
||||
ignoreErrors: Boolean = false
|
||||
) {
|
||||
if (log.length() == 0L) {
|
||||
println("No errors present in the logfile $log (the file is empty)")
|
||||
return
|
||||
}
|
||||
if (ignoreErrors) {
|
||||
println("WARNING: the task was configured to ignore errors in the output log")
|
||||
} else {
|
||||
summary.add("errors in ${log.name}")
|
||||
}
|
||||
println("Logfile contents (errors during the test, see $log):")
|
||||
log.inputStream().use { it.copyTo(System.out) }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.jmeter.buildtools.batchtest
|
||||
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.tasks.Internal
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.kotlin.dsl.findByType
|
||||
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
|
||||
import java.io.File
|
||||
import java.net.ConnectException
|
||||
import java.net.InetAddress
|
||||
import java.net.ServerSocket
|
||||
import java.net.Socket
|
||||
import java.time.Duration
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.TimeoutException
|
||||
import javax.inject.Inject
|
||||
|
||||
open class BatchTestServer @Inject constructor(objects: ObjectFactory) : BatchTest(objects) {
|
||||
private val executor =
|
||||
Executors.newFixedThreadPool(project.gradle.startParameter.maxWorkerCount)
|
||||
|
||||
@Internal
|
||||
val serverLogFile = objects.fileProperty()
|
||||
.convention(outputDirectory.file(testName.map { "${it}Server.log" }))
|
||||
|
||||
@OutputFile
|
||||
val jacocoExecFile = objects.fileProperty()
|
||||
.convention(project.layout.buildDirectory.file("jacoco/$name.exec"))
|
||||
|
||||
private fun deleteWorkfiles() {
|
||||
project.delete(serverLogFile)
|
||||
}
|
||||
|
||||
private fun getFreePort(): Int =
|
||||
ServerSocket(0).use {
|
||||
return it.localPort
|
||||
}
|
||||
|
||||
private fun waitForPort(host: String, port: Int, timeout: Duration): Boolean {
|
||||
val deadline = System.nanoTime() + timeout.toNanos()
|
||||
while (System.nanoTime() < deadline) {
|
||||
try {
|
||||
Socket(host, port).close()
|
||||
return true
|
||||
} catch (e: ConnectException) {
|
||||
/* ignore */
|
||||
Thread.sleep(50)
|
||||
}
|
||||
}
|
||||
throw GradleException("Unable to connect to $host:$port with timeout of $timeout")
|
||||
}
|
||||
|
||||
override fun checkErrors(summary: MutableList<String>) {
|
||||
super.checkErrors(summary)
|
||||
catLogFile(serverLogFile.get().asFile, summary)
|
||||
}
|
||||
|
||||
override fun exec() {
|
||||
deleteWorkfiles()
|
||||
|
||||
val client = this
|
||||
val serverPort = getFreePort()
|
||||
val serverHost = InetAddress.getLocalHost().canonicalHostName
|
||||
args("-R$serverHost:$serverPort")
|
||||
val jacoco = extensions.findByType<JacocoTaskExtension>()
|
||||
// The extension might not exist, so don't fail if so
|
||||
// When the extension is present, we get javaagent argumet from it
|
||||
val jvmarg = jacoco?.takeIf { it.isEnabled }?.let {
|
||||
val dst = it.destinationFile ?: throw GradleException("destinationFile is not configured for task $this")
|
||||
val serverExec = jacocoExecFile.get().asFile
|
||||
it.setDestinationFile(serverExec)
|
||||
if (serverExec.exists()) {
|
||||
// We want to capture new coverage, not a merged result from previous runs
|
||||
// so previous .exec should be deleted if exists
|
||||
serverExec.delete()
|
||||
}
|
||||
val jvmarg = it.asJvmArg
|
||||
|
||||
it.setDestinationFile(dst)
|
||||
jvmarg
|
||||
}
|
||||
val server = executor.submit {
|
||||
project.javaexec {
|
||||
workingDir = File(project.rootDir, "bin")
|
||||
main = "org.apache.jmeter.NewDriver"
|
||||
classpath(client.classpath)
|
||||
standardOutput = System.out.writer().withPrefix("[server] ")
|
||||
errorOutput = System.err.writer().withPrefix("[server] ")
|
||||
maxHeapSize = client.maxHeapSize
|
||||
jvmArgs("-Xss256k", "-XX:MaxMetaspaceSize=128m")
|
||||
if (jvmarg != null) {
|
||||
jvmArgs(jvmarg)
|
||||
}
|
||||
systemProperty("java.rmi.server.hostname", serverHost)
|
||||
systemProperty("server_port", serverPort)
|
||||
systemProperty("java.awt.headless", "true")
|
||||
systemProperty("user.language", userLanguage.get())
|
||||
systemProperty("user.region", userRegion.get())
|
||||
systemProperty("user.country", userCountry.get())
|
||||
|
||||
args("-pjmeter.properties")
|
||||
args("-q", batchProperties.get())
|
||||
args("-i", log4jXml.get())
|
||||
args("-j", serverLogFile.get())
|
||||
args("-s", "-Jserver.exitaftertest=true")
|
||||
}
|
||||
.rethrowFailure()
|
||||
.assertNormalExitValue()
|
||||
}
|
||||
|
||||
waitForPort(serverHost, serverPort, Duration.ofSeconds(5))
|
||||
super.exec()
|
||||
|
||||
try {
|
||||
server.get(1, TimeUnit.SECONDS)
|
||||
} catch (e: TimeoutException) {
|
||||
server.cancel(true)
|
||||
}
|
||||
|
||||
deleteWorkfiles()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.jmeter.buildtools.batchtest
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
|
||||
open class BatchtestPlugin: Plugin<Project> {
|
||||
override fun apply(target: Project) {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.jmeter.buildtools.batchtest
|
||||
|
||||
import org.gradle.internal.io.LineBufferingOutputStream
|
||||
import org.gradle.internal.io.TextStream
|
||||
import java.io.Writer
|
||||
|
||||
fun Writer.withPrefix(prefix: String) =
|
||||
LineBufferingOutputStream(object : TextStream {
|
||||
override fun text(text: String?) {
|
||||
write(prefix)
|
||||
write(text)
|
||||
flush()
|
||||
}
|
||||
|
||||
override fun endOfStream(failure: Throwable?) {
|
||||
if (failure != null) {
|
||||
throw failure
|
||||
}
|
||||
}
|
||||
})
|
|
@ -0,0 +1,204 @@
|
|||
#
|
||||
# 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.
|
||||
#
|
||||
#
|
||||
|
||||
antlr/antlr/2.7.7=311C3115F9F6651D1711C52D1739E25A70F25456CACB9A2CDDE7627498C30B13D721133CC75B39462AD18812A82472EF1B3B9D64FAB5ABB0377C12BF82043A74
|
||||
bsf/bsf/2.4.0=CF2FF6EA53CD13EA842CAD398F1BE24539BEC68A5CBBD088492ADAB50BC782CDE6D9F4C0B6A24DEAEEE537809C90631C43F9A680FF2826C28CCF1B39380954E3
|
||||
cglib/cglib-nodep/3.2.9=429F5E63C33F3E65615243AD24C27C86FD1ADE3C5DAA0A64F9FAF8BCE1E59ED9A6D4EDC348281CBB8FD7AE10C01FC2E3716FF74571B14A31A37DDE1DE06E2A3A
|
||||
com.fasterxml.jackson.core/jackson-annotations/2.9.9=FD7E441FBB6A807B1841497BBF6B4950CA11A48FAD19B83BAD6DA691A9878A8B03F28EEF11DAC7EF160CB9535C999D7BBF49DA155C165C205AEB7DD81C111F28
|
||||
com.fasterxml.jackson.core/jackson-core/2.9.9=D8BEAC9E71444BC795C9D99308EAD3284A39AA161F825708DA7DBDFCE410D099C0BBC76C31C27ADAD540CF3BCCF6826D539FCB157923EFAE84B10B3778B920A9
|
||||
com.fasterxml.jackson.core/jackson-databind/2.9.9=47204158C4ADBBC8D6659055786641EF6EC95EF6648662AD797AFACE0A3E1074C7BD4D2F565BBE5837BFD0BC06AEC2D8888415FF94A94583F5BDA644CA5004A5
|
||||
com.fifesoft/rsyntaxtextarea/3.0.2=A210EC77304E7B0B175532BD7E5C2A46823C0D93B359E174782B548087B48A0386D3CAE566877ACFB6252E6B4F28C25DAA6B8074A55BC54A296FC4AC554B0DC1
|
||||
com.github.ben-manes.caffeine/caffeine/2.6.2=6521F1BFEFCD6E2991A7D017BBA8D751C5BA4694D335B61B4E732A2B795C748532BE7A5A63107B6BB70F816CEEEA4659B77EBAC68AD02C44CD813C478F759A06
|
||||
com.github.bulenkov.darcula/darcula/e208efb96f70e4be9dc362fbb46f6e181ef501dd=80F3335D8EA3FB3FF07A12A79C958C4E3F8BB542511C52825A8B3694AC96F027E24396CE9EDCEFA44EE93B5CBED4E4AED4575E6AAED56F363BAE92C52EE85D22
|
||||
com.github.spotbugs/spotbugs-annotations/3.1.12=8B4EABA6A44232B3E62F37EAAC146C2BD2222D4AB1BC27A8DE80130D06D22AB4383C62CF05F5A7FFB7E162B81490C81B1E84D42C6A6EC5A379221A8435EDCAED
|
||||
com.github.spotbugs/spotbugs/3.1.12=F27658417C5EBB620F32353DE4ED0703856E749C0739D3E975AF3F5D295C778D9A0D8057D90EC6614AEC17B5104BDFA594FBBBA39BA276FF47CAA25F2FDAC4E1
|
||||
com.github.vlsi.gradle/crlf-plugin/1.17.0=473E13699DDDE54F2B7245BB33A47346E907179F7C528751B0BB730005BCAF3FFCDBE3F1333655D635B0EE2683FC8B24F2BD598922F9DA3DA03F8EC25A373AA1
|
||||
com.github.vlsi.gradle/ide-plugin/1.17.0=4321949B8201BA4F0E1F0D977397349C34DF84E4632DAFEE6F221F9AFA176FDD9497C9AFBE7F734E3423BE25351DCA7551F93181CC99A99A24EAAEB43BCBD544
|
||||
com.github.vlsi.gradle/license-gather-plugin/1.17.0=E1EE1396B2838E03FB7C84667BD473BAB558569EB5F1C4CB9B7C6806FDC5C7DABC41AAB1705A0FE73FBDB11624F11A15D7394232F59AC1039EFA197FCB495E67
|
||||
com.github.vlsi.gradle/stage-vote-release-plugin/1.17.0=575A87846F61717B2F220A485B67D253644980A0DD57C8EBD3F07C9D66E9B463115897BFE3364216445CAB4AA09EA4B27070ABA5BE7620A632A95BE3F414D464
|
||||
com.google.code.findbugs/jsr305/3.0.2=BB09DB62919A50FA5B55906013BE6CA4FC7ACB2E87455FAC5EAF9EDE2E41CE8BBAFC0E5A385A561264EA4CD71BBBD3EF5A45E02D63277A201D06A0AE1636F804
|
||||
com.google.code.gson/gson/2.8.2=C0C6DC5D609950A6EE3C7E5EA493DA0E6906A18F38FC5A23CC792C1E09E0E892344B4AE2DD35879D6101533E485784E1ECA5052E0AEF44A724CA8A8EE4D73F04
|
||||
com.google.errorprone/error_prone_annotations/2.1.3=BD2135CC9EB2C652658A2814EC9C565FA3E071D4CFF590CBE17B853885C78C9F84C1B7B24BA736F4F30ED8CEC60A6AF983827FCBED61FF142F27AC808E97FC6B
|
||||
com.google.errorprone/error_prone_annotations/2.2.0=8F5F13FAC4C40D680A1F062C609AA598E7585684AF37D695357738935FC0683DDCB94C880DDDD03E78B1DB071C2E5CEBD054A061F8F24322C5FFA43ACA34A859
|
||||
com.google.guava/failureaccess/1.0.1=F8D59B808D6BA617252305B66D5590937DA9B2B843D492D06B8D0B1B1F397E39F360D5817707797B979A5BF20BF21987B35333E7A15C44ED7401FEA2D2119CAE
|
||||
com.google.guava/guava/18.0=C84AD9F1646B52B6E19F55C3C63936C6DBE59597D53CEC6855F85E21AD26F9BC27B0C541B793FAB117E2359B1BF3FCD59B222255345FCE858BC03CC48CBFFD65
|
||||
com.google.guava/guava/25.1-jre=429CEEEC0350BA98E2B089B8B70DED2EC570C3A684894A7545D10592C1C7BE42DACD1FAD8B2CB9123AA3612575CE1B56E1BB54923443FC293F8E9ADEAC2762EE
|
||||
com.google.guava/guava/27.1-jre=5C32A58148C3B91577CD6D335D61A1994041A2A5C77A240303BA6E786C895336400F6FD449EAB0802594BF47C17985C5587AB87C3C4B628BFC1D7090DDC0B006
|
||||
com.google.guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava=C5987A979174CBACAE2E78B319F080420CC71BCDBCF7893745731EEB93C23ED13BFF8D4599441F373F3A246023D33DF03E882DE3015EE932A74A774AFDD0782F
|
||||
com.google.j2objc/j2objc-annotations/1.1=A4A0B58FFC2D9F9B516F571BCD0AC14E4D3EEC15AACD6320A4A1A12045ACCE8C6081E8CE922C4E882221CEDB2CC266399AB468487AE9A08124D65EDC07AE30F0
|
||||
com.googlecode.javaewah/JavaEWAH/1.1.6=FEA689D1E29761CE90C860EE3650C4167AE9E5ECAA316247BDAFAC5833BCE48D2B3E04E633B426E3AB7EF3A5C9C7FD150FFA0C21AFDCAE9C945CB2BB85F8A82F
|
||||
com.helger/ph-commons/9.2.1=C82A4C6AA1702B95049A8348B88F3A5ABC5B4781A796328E46E701F57C0DFEAC289441D332E1D730EE46107AB24AB106CDE2D39BB8BEFAFAC123D53382B85A40
|
||||
com.helger/ph-css/6.1.1=EED6A6C680424C4337A8FFE8431F5E042841FBACE3529622125837F9E4D89B3DA8675BD74799957384CAC77ACB9F0AE031BAB3883CD87291E03ED823EDE8EC31
|
||||
com.jayway.jsonpath/json-path/2.4.0=B55B30CF85CA12E6A492FD48D4B6BB0B1F3BA610C195AA1A36EDA2A80E24BF7688A6A802362D398108E822F6DCB7B713CF421BB4208897FC4F5CC7B8B9B4C97C
|
||||
com.jcraft/jsch/0.1.55=B6827D8DE471682FD11744080663AEA77612A03774E2EBCC3357C7C493D5DF50D4EC9C8D52C4FCC928BDFDD75B62B40D3C60F184DA8A7B8ABA44C92AFECEE7A5
|
||||
com.jcraft/jzlib/1.1.1=223AF0806A19FD25E2496C980B9824B7612528013EAB9E7E21161ACFE81A6F808D3D65148BDAA794C9AB73C518F6B49AA7A69107C9BC0D66D6F8E78C39964F8F
|
||||
com.puppycrawl.tools/checkstyle/8.22=880C32F20AA476BD2209FF77AE04BC65427BA2D47401EC9372F1385EA43BDE9055539249DB2D8429325D2EDA0BB62152C9E3F21C25184A04047649A5C4B61098
|
||||
com.sun.activation/javax.activation/1.2.0=B4CBDD8FD1703E4B2E1E691DB78FBCF2232D836F740D1821C4C191A14F9472508E27A40D06E4B6B153964AF68032959C22945BA169A0CA4018B7748162F420A6
|
||||
com.thoughtworks.xstream/xstream/1.4.11=ACEBA38FE0239A8D873D276023F9EFD1C79CE8C6651BB7314A06684758AABFCDB1E89A71B26FA596C9491BDC3D4BBEEF3819683D65002E584CD4728A03C2DE0B
|
||||
commons-beanutils/commons-beanutils/1.8.0=AA6C0E0A8F0422964025B36FC2AC8FCA04C39EA697C7DFCD265CA06FC3070F1F639083C7EDC00B2A42D8823AB4375023C6BCB198BB606D56DB0AA67FB1A671D1
|
||||
commons-beanutils/commons-beanutils/1.9.3=F19B50135FCF20D9B4FB193CC651C97081D389EF320A691B51637809E7E99ACBCA2B28BEEB60F0997525FDE923125FEDEACF7FBE17D203F97F1C3A66DC84D3CA
|
||||
commons-cli/commons-cli/1.3.1=383FF22040787D7A27E18B414892DD204BA0F9D75E43EEE775C1276D6DD6EA2A38FC349EDEC1B2BD332FB0BD324DCC8CCCE084B98D47BCAF8AA443773FABF3DE
|
||||
commons-codec/commons-codec/1.11=D9586162B257386B5871E7E9AE255A38014A9EFAEEF5148DE5E40A3B0200364DAD8516BDDD554352AA2E5337BEC2CC11DF88C76C4FDDE96A40F3421AA60650D7
|
||||
commons-codec/commons-codec/1.6=752FCA09371E0E228432155533A9B84F0442CAFD7F25EBF0C6C2024D541FBBA80882E71AEE047EC94CD22C0D8114942E967652913412F5CBCF9B816C0E1FC1AD
|
||||
commons-collections/commons-collections/3.2.1=8D0AA0E4E328C2E391D4D972F361A19FF085F508CB0478F5967280953ABD3520EE92CC1D19B21CB4E29E4A7BC557487DDBAEE9807B751824241269367B9E92CB
|
||||
commons-collections/commons-collections/3.2.2=51C72F9ACA7726F3C387095E66BE85A6DF97C74B00A25434B89188C1B8EAB6E2B55ACCF7B9BD412430D22BD09324DEC076E300B3D1FA39FCCAD471F0F2A3DA16
|
||||
commons-io/commons-io/2.2=AD08841278FEF6F1EBCB2483059882175D30481C75FAE916F768D08087BF6159C7D3F4A7EF382F45EC2294235BBCB596C60B1FA98AA04E9DFD8FBAFBFA2CAD2C
|
||||
commons-io/commons-io/2.6=4DE22E2A50711F756A5542474395D8619DCA0A8BE0407B722605005A1167F8C306BC5EEF7F0B8252F5508C817C1CEB759171E4E18D4EB9697DFDD809AC39673F
|
||||
commons-lang/commons-lang/2.4=AE35B761D16F4327CDB6FDA16789166FC67020EFD71FD2CC3395B97444F439DFCC7EEE948A3EFD3B02440416CAEB873417D95DB6A2B16F4EF198DE9D1AFBC045
|
||||
commons-lang/commons-lang/2.6=4A5A3DBE4941C645E2CCA068CCA5C1882CFE988B02E7CD981D1E51784900767D1DEAB0E0E0566F559C9FCABB4A180E436D5BB948902D4F4106F37360466AFB42
|
||||
commons-logging/commons-logging/1.0.4=C8D2D39A60ADCC49091D393DAF30473D1776E4B6B09BB86639171F660833A17AFBDC9F3E85843093535DA16FA664CD7CD4CA38F54E141018DD1B78DE681AD668
|
||||
commons-logging/commons-logging/1.1.1=470323A2EE38BE1B7FF8C84F1F5A5F8C4EC2CEB6B0649FAA7B961F111865877DBE125409F72B1C52C7F18AA89E3469635C49FF4B83F86CC2F2EB2CC5562F9BFF
|
||||
commons-logging/commons-logging/1.2=ED00DBFABD9AE00EFA26DD400983601D076FE36408B7D6520084B447E5D1FA527CE65BD6AFDCB58506C3A808323D28E88F26CB99C6F5DB9FF64F6525ECDFA557
|
||||
commons-net/commons-net/3.6=DBA414CEA9FB4B47DFE6D20C347BD91052185DD958996BFDD1E709F66B5FA7812EBB0DAD80C47E72BCC0075B3B5526C705216EFE771CAC1CC53B2F7923124FAF
|
||||
de.marcphilipp.gradle/nexus-publish-plugin/0.2.0=36DFDADA6745D7AF5CF2807E197AFD111073C30536CB29C531522F73D4086C2A7AB70756975FEC290657012B8C9090414F76811731A920D8BC4EEC1DEC0AB2DF
|
||||
dnsjava/dnsjava/2.1.8=A4BCB8BBB43906F42FAF1802C504CCC9C616E49AFD5DD7DB77676D13AAED79A300979FFC2195B680A9C6D5F03466B611B6F1338D824099816AA224B234760F4B
|
||||
gradle.plugin.com.github.spotbugs/spotbugs-gradle-plugin/1.6.10=E7486B32EF6C9C14FE879814DA5F06CA6ECABF47195063A93E6FC8CD10119244C5A7BC3C71A4760CCE3AFFA9E9736336D345D8ED84EB65153C15683FA6529D92
|
||||
gradle.plugin.org.jetbrains.gradle.plugin.idea-ext/gradle-idea-ext/0.5=4A6B7FA6CD8C6FA82A517C396510E408F1C6FAB5FF6D4C68008F80718F05E5943755AA240F329C95661CCB0231114DD0F6D7C38EFBF73EE6B1ECC70850F40F7E
|
||||
info.picocli/picocli/3.9.6=3DDB7ABE7AFD0AFF754BE5616481C589E1354692BE583179503DDFD5F542A7F520960A6FB0D5320E171AE02E3A01B9E6B51E298B74518F8BF690EA9E9C7C8162
|
||||
io.codearte.gradle.nexus/gradle-nexus-staging-plugin/0.20.0=E59970ADFA3343654A7A879299BADA0915D89F3A2FCCA53AACD26EEFE621D7EC598019CC32E9C38DDD35AC1B2E40B5167801A34E39E00FE72755D5FBB16236DD
|
||||
javax.activation/javax.activation-api/1.2.0=8EE0DB43AE402F0079A836EF2BFF5D15160E3FF9D585C3283F4CF474BE4EDD2FCC8714D8F032EFD72CAE77EC5F6D304FC24FA094D9CDBA5CF72966CC964AF6C9
|
||||
javax.mail/mail/1.5.0-b01=801A910F70DD743982872DCDEA46C24C6378E82C2CD2D970902A9CE5864191D3847BCFF6D5B81AEB89BABF056A30A70A03AA5687586D52CBFAAEAE3A5D6649F9
|
||||
jaxen/jaxen/1.1.6=6BD11529D6DFCB27DDD485C8DA2440D3686CB61693A9461833A2BED49407343DF4BA707F45164A6E69B78979581D91FBF0F6C5EAB28653DCFA724AFC89529778
|
||||
jcharts/jcharts/0.7.5=3953900BEBE38F4242499D106D59425F54B73C0478C3050F0DC0917D5C36CC35F94CCFEA96E6BF85E9B1282BD572F55AFEF1B485F81F5ED9493CC4D3828F5A0B
|
||||
junit/junit/4.12=5974670C3D178A12DA5929BA5DD9B4F5FF461BDC1B92618C2C36D53E88650DF7ADBF3C1684017BB082B477CB8F40F15DCF7526F06F06183F93118BA9EBEACCCE
|
||||
net.jcip/jcip-annotations/1.0=CB312B3F571D91EF183C119D878F50464FFD97F853B7311CBA386463F295E8B7B3A5A89ED4269A045CACD5AA7CB4C803D4882854A0FDDEFA9BBC28C72AA6C786
|
||||
net.minidev/accessors-smart/1.2=39FE6A5EBD2AE2D33D8737C8407A8CAA4F6A62CE2057D726BB82496D35104B76F230BBB9721E1DB5F535FEFA3D70EE88C0A5A5E4A3F1266D7317CAE897AD0882
|
||||
net.minidev/json-smart/2.3=977FFE05C17965B403A60471EB6C160103263BBE454E942D67D4D725E1826B504DE6C15038FF01EA90632BF9AD8A31B47C6662613BB905F020EFFA68C44D6F9A
|
||||
net.sf.ezmorph/ezmorph/1.0.6=16D30BE564723B74F312B4E7D06F349370FB6726B3162778C869CD723ECA2A40C4972C2757B3E107E1820CEC0D70B0BD2B96EFCD466518FC64495F7AEF97967A
|
||||
net.sf.json-lib/json-lib/2.3/jdk15=ED6E95BF555AD3193B527258972DAFABD73745D993DA0CECE486E34A471D080850D201864026F4F41CA0982926C264C6E6CC55D91F000CDFD5D09EE3F306735C
|
||||
net.sf.jtidy/jtidy/r938=4C6CC198BD8CDE62B6CC9091ED95A4114EAAD035C196317C891F8F2263B28649A33B1F26F74F2B043A17CEC2A3D025EDA81ACF317FDF2D04641FA646E486B345
|
||||
net.sf.saxon/Saxon-HE/9.9.1-1=DEED3B397975A8419C903B61A1FC54C1E3899506B6D8DD562425DFD776690C51A8BB5326B821AFA4892670F410688255506CB0BFEB8F7532B84914A11490CCB3
|
||||
net.sf.saxon/Saxon-HE/9.9.1-3=6580E24632116449CB420F8D854FA0AE9CD61E3029586922F658D611EF3E735EC8D62A80A0A102C31C020C8EF6038E8817AB4D045E6B9A7B2FF67885CB361FED
|
||||
net.sourceforge.nekohtml/nekohtml/1.9.16=54167FD0D2A01E393BDF00C4553144ED53935643F0B278C052AAD29CC3DAC3343FE0D181437FB9F705B7BB46321ACD0F4E46159874AB17C055183CC2A2375DD
|
||||
org.ajoberstar.grgit/grgit-core/3.1.1=B856459DBAD417987ED640ECCD77DEE8E16589B75741BE4E985A028BC1ECEE71D1E3FE75E2BDDFB5342D54D497C41F9368F99C5FD77892C4A48E46EA37E114C8
|
||||
org.ajoberstar.grgit/grgit-gradle/3.1.1=B168B7249D83A2C156BD7C3F59E1DCA79ABEB3AB9F32AB548C3A429814FA5095E678839EB269DF332D0F003A7CAFAF3D69E07C0B8B123A4A8EA2F32C56A6C608
|
||||
org.antlr/antlr4-runtime/4.7.2=F057286FA0F7E3D0CCA414A348893577288882B887C0278DD0C012447D3C48AC150B30E023F886F038C6B0A144329FF927A3869AF5534D23B279CF88F302E0BB
|
||||
org.apache-extras.beanshell/bsh/2.0b6=A39321A99A8A619A48B65752F6EE6B8F11D3B28EBB051082EC70A70A0D5041E83D144378DF191929E3D6562BD5EE4C4F1CCADB0BA42055529D18800A41D8AE18
|
||||
org.apache.activemq/activemq-broker/5.15.8=1092F81D61BCD0137130C4A553B028B021D02EEE9E0B1E5B38C9478204DE1174B9AC5399222BD49F0E5E458AE1432CECDCD1B3412A849986AEB14DA766C6189C
|
||||
org.apache.activemq/activemq-client/5.15.8=FE9A38BE230C9F034C53F0C6416B2C668C7DDB975B693E3A087FC1433200CBC717116841981EA0D3D6A0C88F220ADAEB4CA248DD7D243244D84F12EA7320FC28
|
||||
org.apache.activemq/activemq-jms-pool/5.15.8=4606604A8C2F1C596CA9C3294A8218D022FA30454FBFD61863CA0C6CF4398B069FC90CEA89201C4CB2B2AD87C171603095AC9F46EE142C089755429BDEB49344
|
||||
org.apache.activemq/activemq-openwire-legacy/5.15.8=8B730DA2BF0755A7C486CA5C495F2F43C3C043F6E33C0FF34BE31C46403B91BCE87864AF44CCD8D305ECA1D778736A84238A7541AE3F61718F7863E1024CCAEF
|
||||
org.apache.activemq/activemq-pool/5.15.8=78202EF368175E05226039F5620884BB48DA1B254DB99EE136F023A6A9730566922FA37F26715E7E8BF0B0394C0268C2A466DF82365DC867508E11D41D67F4B2
|
||||
org.apache.activemq/activemq-spring/5.15.8=CE11F857A4CFE55F8CE994F31F60B6D0EBEB1DC9667BEBA3CDF63C7E3F3C3C7E5ED3837424FA58A2A35CDA0A76E1B1CDCE69BCED42893550E9099F90482F9115
|
||||
org.apache.bcel/bcel/6.3=76073839812981106BB7089668B5421D0D2E1E8BDB272FC79EA5A5D51D27832BB8E8B37C344DA173A54A19506D9BE43BCE727F24C5360AAA530B2FFDBB4A4435
|
||||
org.apache.commons/commons-compress/1.11=D7553179576E6557CD2486730F0E54F93E8830BE16C32354BE16FDDC62BED7F854909A63E87BB2F2856577522C3EF95CBC3D883889E95C3C0B2E4295F57DCD86
|
||||
org.apache.commons/commons-dbcp2/2.5.0=9CEF8B6F4DD907A63B1FA562A9D2497D84E8A9C7839955742B134421D63B0CF0A102802CAC97985842C0231D6E76CEFA9A29C6A3378955517E8BE192133961ED
|
||||
org.apache.commons/commons-jexl/2.1.1=DCD62490CC386516F66427F5E478C308F6937EB6D64A34A02DE56255129DED20BEDB85C01B5C794D95CA3C4D6A11D58FA920779C5E517B78A881C5A229E4FBA2
|
||||
org.apache.commons/commons-jexl3/3.1=6AD2D83CFB29CB6C19DB70D4A89E8BD317B10DA736AC0B9B37C3F4DF8E428AE5987BF73AA1BA9439955E7278B7E056B009B691E2E64925E3E3C5B2CFA1349D9F
|
||||
org.apache.commons/commons-lang3/3.8.1=FB0FE98385496A565678A000C26A3245082ABFBF879CC29A35112B4BF18C966697A7A63BB1FD2FAE4A42512CD3DE5A2E6DC9D1DF4A4058332A6DDEAE06CDF667
|
||||
org.apache.commons/commons-math3/3.6.1=8BC2438B3B4D9A6BE4A47A58410B2D4D0E56E05787AB24BADAB8CBC9075D61857E8D2F0BFFEDAD33F18F8A356541D00F80A8597B5DEDB995BE8480D693D03226
|
||||
org.apache.commons/commons-pool2/2.6.0=C31D44FF2D527DEC5189BAF8AE1D888C37A53A60283C58CBEACD723C773DB8219DD54E0FCA15F29F781E0AF66E60E894254D6AAC80178207B51DD2F9DCC972C3
|
||||
org.apache.commons/commons-text/1.6=A0C077E33C075FFD2A9BF6776C1C27F6D19B451DD6F9A26CC06AED586BD746E5DADEFEE72E130F0D43768F8E3F24CDDABE79B1E94ABF227FBC8E8C58DB0C6504
|
||||
org.apache.ftpserver/ftplet-api/1.1.1=70C9E913E578460BB9B8F014C47B9C9634B9454F194EF105CFD4EB896857DC47D292B1AB88C267FF6BC0E608BFEA0BB900DB6E4D88E5F5D9096EF6A4B4CDD51C
|
||||
org.apache.ftpserver/ftpserver-core/1.1.1=D880495D077694475D27C081488728085FC19B8E1F113E8BA64656A3DE0A7DBC612F341EC653F3CB719B889916DE20DBD188898EED7A8CFECBAF9BE52A237118
|
||||
org.apache.geronimo.specs/geronimo-j2ee-management_1.1_spec/1.0.1=32E38035E7A9BC63F31CAA612421BDC33DDB9503E37C97B587490926D35831A8E3C2FEF324ACADC9A301AA977A761B36C94188A64E53E0AEC8641B04A21B3597
|
||||
org.apache.geronimo.specs/geronimo-jms_1.1_spec/1.1.1=94CB8660775596B298DB93E11FDBB28D2A582B161F7A6D667D41946F59E8B114AA80E15C28C4186F05B43F432B1AC555D845AD870309609202382C3F6061E319
|
||||
org.apache.geronimo.specs/geronimo-jta_1.0.1B_spec/1.0.1=F61164A57A83D7C5383E28EB7C57182A94E0966B3194BEC51720CE127AECA0C8802106898FFEEDEE00D55C59277104A6D04C2183BBCE7807AE5336AA83EF2323
|
||||
org.apache.httpcomponents/httpasyncclient/4.1.4=A80DB5DBF772F02D02BA6C7C163E8DA9517DD7195714B495ACB845C429580C1FC926D3E71C115E75BE8C145651DCE2FDFA0DC380132F7809C14B3AD95492AEE
|
||||
org.apache.httpcomponents/httpclient/4.2.1=675BCAB061F874E7903655D86F25F838CC8DF206918875C6E6C747313A4831CC68EC85A0AB6D0F3DEC96247EEEBDD700F47A0024375C61CC3A371B2B7DDD2FC9
|
||||
org.apache.httpcomponents/httpclient/4.5.8=DEB6B66065CFDED63795B934E18C3ACABEB3CAFE8A34D3903ED280284C7B2A3F801711AA5413699EA72CB8356D8F5C81F96BEEA5B910D97411F99E3220FCA2DE
|
||||
org.apache.httpcomponents/httpcore-nio/4.4.11=921BFA77D06C2B624D257DC6D57689A06F704954AE49FE4433D5200018F46607A46EA21ECA3C7757913BD6C1C2605A025BEA912A007230EA2E4227C07F8ADCA3
|
||||
org.apache.httpcomponents/httpcore/4.2.1=BB378ADAA1B431269E5D711735005D899F09578A115CB4F0B37D797F8ABAA43E57581DAD1B7BE925893BFF5217286A37C3A5EFDCEE2284974C7D2C69BF0AC234
|
||||
org.apache.httpcomponents/httpcore/4.4.11=1F45A26F97E5488BF1985F5F5C88C5E2744F46D422040708F7641DEB14BB04561BCEC35C9284C1DCE606FCDCB768EDC3EF970EF965BD6BB591EC362DFD417C74
|
||||
org.apache.httpcomponents/httpmime/4.5.8=E44EEBDC57A0E2F99FFDD7907A8D5ADCC18FF05FF5CE353AA7D05A2C7914272E6D4746F09399DF024C2663E1838C6477581D2787B8D07B8EDD3B18D526381993
|
||||
org.apache.logging.log4j/log4j-1.2-api/2.11.1=7FA86AE3F19F88C0690D12F7ACD04D270E365C1E925DF0A8012DDE7B8B3EA1F787D34C9FC26B198D7D8054F7BFADB522A34C4B8C1C7998E7C138187C5DA4060E
|
||||
org.apache.logging.log4j/log4j-api/2.11.1=A598DA3836D2DDCA60CFB3D62DF96E525A8A130CB67199C3FA0380E722B82B8F5778372CCCB763BF8AC216112C3E5E6300FC5B85E097845F42FB743ADC1FD41F
|
||||
org.apache.logging.log4j/log4j-core/2.11.1=6D23ECAF0AC18A5DFF492B8F047543B392FE5D1D56EF1F9F6C68CFF43C7EE97F2FD8521C22D242E5ACBFF9C133E9315045D6C689609F9C7DA3DDFC3FFB96B261
|
||||
org.apache.logging.log4j/log4j-slf4j-impl/2.11.1=55360BF9BCD47DAE49FCC8E28DBAD9D3AA26BCC66729DA98D701CC2099CB070E537F19327FA52486B4E557FA513D37AFBBE6FD17B1557527FB2496F56072545A
|
||||
org.apache.mina/mina-core/2.0.19=B494D592C42D4F8C70BD5F1927A71729E12016F28FAC77BB41286186A69C530B7B486DAB8A44C7B09BB8BD44B960FBA10246E5D61420DE6FCE1E29D0FA22C202
|
||||
org.apache.rat/apache-rat-api/0.13=F12B23C33D671563E9314B8790848C71E69D4D4CFFA6BB086F02AF5DEA7B7FD74CC2DB0548C57F5484A3C183E1F0766D0D2F2018D96A567A2E3B73C398282504
|
||||
org.apache.rat/apache-rat-core/0.13=E0788C9F3BBAEC17B5BCF5B029118254BCEA33BB9C2DB70E19B3EC76B116C53723CF2B508C3AB904A1D7302BA82FA64BFB24A027D5513B3AC9A5796CF68A4A11
|
||||
org.apache.rat/apache-rat-tasks/0.13=229F74F96C74E421A37A00A57F3153FF913B77F34514003695DCA9F5D63D8D5FF429A9E055425CC925FA30328023D52812FC6BD66B5EC736B529784B20D19344
|
||||
org.apache.rat/apache-rat/0.13=A51B88495D1988D6886CC04D0039FD9F6AEE77D060719239F9C5E9AF2B6D9A639E83C38E8BF4FDC632D1F0FEB87BC43FC0B345C0F2A4B7F692303898AADB2663
|
||||
org.apache.tika/tika-core/1.21=9D3131D7E5FBAB717F2590F4FE0DF161189F29490F7D3238512E68924953A136497C37B39A9260B9C6350B335670DB207FA8A45838F99D60C1E906872BDA1EDA
|
||||
org.apache.tika/tika-parsers/1.21=2728CA01817F9509912E738E65BD42F4A0296E206BFA3382C0B7EB5935A3D19C93142D4C0B589DE0BD582CF41AB54A3C374D0D7C2A9D555EBE086C7E90278ED9
|
||||
org.apache.velocity/velocity/1.7=E521785D947CAE1A02070B26A43D235B6319439A6364C58266D3F9C458F9A099406C10AAB5F51C5DB5BA541E88322CB35203C6758B4B8BB65F9539A345DA9A04
|
||||
org.apache.xbean/xbean-spring/4.2=F6BC463D2E3A140DABD48AB99B8B99A6607611A6B448D0B08D56A7B496080B4DDAFB97808B9EE25EEAE2BE8994213FA42C74921F4169F5BB288F473E7A92463F
|
||||
org.apache.xmlgraphics/xmlgraphics-commons/2.3=2914C30F5A58A1EAA19B51399EEFD30F3A4D530D19BE5A74AB0AD5D93142F13C5DDFE9FAA3E95F2632C14E18F39AA1AC3090061D32FB79A1A69AD9126F51AF0
|
||||
org.bouncycastle/bcmail-jdk15on/1.60=79B43DF17AB209A1026FC3CDA644B2611A72E861D3673CE846E078CED93A0991E16C91667FA854FEE7E92F5553338D1C9783BB2FBF426EB6FD19C8CE3582B26E
|
||||
org.bouncycastle/bcpg-jdk15on/1.61=1986D1385AE7591635F758902BAA37064752C356973B44E40077D690E7D73E3D1460207F48D2F193CA05E4B8ED1D364223DCC3BAAB66037AA00BB492D5E6302D
|
||||
org.bouncycastle/bcpkix-jdk15on/1.60=D44CDAC998A0D804AC452725C9E84B7D517C838CC6770CECDB214E1DF50EFC5EC2D067A91A5009F1316A5635CF7A1D213F2EE2A4E7497C66E1C7BBD5D2D4445F
|
||||
org.bouncycastle/bcpkix-jdk15on/1.61=BA8469294D658E93880FDF2B1DF88AA501BC6BF1613D7EC6287A362078AF425BB645234E85A1C737B582EB01E1DA2AACCC33326A30E0EFF0CB5616EDCF6FB008
|
||||
org.bouncycastle/bcprov-jdk15on/1.60=1C08D82349E333720C08FC467FF6489B14B8633A09019BF8BB5E6A3C426DFAE6DCC415648FE1FB4A2DA8631548F4947AB6CA1BC90B3190A05040F4D2EB271A10
|
||||
org.bouncycastle/bcprov-jdk15on/1.61=2F09C3E8EA8666620CF32A0BC3D1B8DCB562EC4CB06B485D038956FA2CC898AB11132A675B3C12CBFB00A1CA96DDF34ADC0C1B5981FCCDC566557FC6C533673B
|
||||
org.brotli/dec/0.1.2=D4CD2B33F7C358012FF01DB6A13EBFE1E8051A580698BFFCD942C47451012CF53CE49A400B1C8BF7502B01E631D79D7C6417202A145622572D79FD145CCDE61A
|
||||
org.checkerframework/checker-qual/2.0.0=3C38B0B9E0BDE464268CFF5FDB1894A048240B039093EE3ABE5B32976A22737D26B355F8793F630A7F0B319FDB019A6FCD9EE1D5219676F0F10C0B0F496B61B7
|
||||
org.checkerframework/checker-qual/2.5.2=FB32E3893F9EBC956EF99066B219A8FC8049B47B80A7253CD89B7FAADF0A2FA14D60B52DD5C2F4AAEB1DB0359F49FEC9E29D3616BD314EC8C82DB1C657BE8CD2
|
||||
org.codehaus.groovy.modules.http-builder/http-builder/0.7.1=BC7BC2A514F8CA104A392ECF8736F4A3D316EE988FA91299D33B0AF46134B38E14E4A5061449D17B2DF7A521643E6C02DFA37CC277ED7CAB7CE83C28C00E9719
|
||||
org.codehaus.groovy/groovy-all/2.4.15=FC30F48E1D64959BE90CD25C4E68E44AA3A9D80D319323A291F2655C65036D860525F55ED902AD0E5CDC114143D20A165876E80DFE949E5C9AD4D8A0AD7F39E7
|
||||
org.codehaus.groovy/groovy-all/2.4.16=C2616868541A3F587CBBA9BED3CFCA234565C1FD896654D6FB1934B452F05759A93F9614952D9620C1BA066CD328E6D55A349F1738BCEDB3EFA65A862FDEE09D
|
||||
org.codehaus.mojo/animal-sniffer-annotations/1.14=9E5E3EA9E06E0AC9463869FD0E08ED38F7042784995A7B50C9BFD7F692A53F0E1430B9E1367DC772D0D4EAFE5FD2BEABBCC60DA5008BD792F9E7EC8436C0F136
|
||||
org.codehaus.mojo/animal-sniffer-annotations/1.17=94D0335CDF94AA547AD6C0C7E44B8E3BDA736CE19D941DD0FAA3A45390E5AB2D122022FF4E07BB9AAEDD41FFBD9500F324E0A9E42F4C5441BCE0774F44872F45
|
||||
org.dom4j/dom4j/2.1.1=547DA0752FFB12CE40800449376F2F7E20F053F816DE4AE8ADF1A4FAD5A3B87CE4E98E95650671A6C9CDCBBF7C20A4B61E711E5AE8D324C923D508BCB07E02E1
|
||||
org.eclipse.jgit/org.eclipse.jgit/5.4.0.201906121030-r=874E2F245CA184BE72BA97E8AB4539E76B6D223D20DA27620355BBE812896DAC1CD33C4CDD8272C8FA9A346C6E80C986BA1EC290C973D0EF4B7D44EF42692523
|
||||
org.exparity/hamcrest-date/2.0.4=DC0FB7DDE5B151E09C619C080BD0AB6405596A0E926126342C65EDE6E25F65519B5B6A02BF25C02AD75A31EB26C6B41672CDAB97CC8B5AD983D025651A33CDD6
|
||||
org.freemarker/freemarker/2.3.28=44435CB2B6BA02ABACDC4A21BEA44A2DC50FAA1B486FC5B2F79097A68F1F98CA24AA835448AC5DEC33A1869EED1B8A32AC285E95FDABBDAFAA810D575951894E
|
||||
org.fusesource.hawtbuf/hawtbuf/1.11=396966ADF3E8CBA09FF75297915D41BA6A7C60C327575DFFF153F6617A1BCAFFF4A1AC0BAA19D93B4DDCAB511C5E23A6FD95AADF45E55E2057700DA3B8991AF0
|
||||
org.hamcrest/hamcrest-core/1.3=E237AE735AAC4FA5A7253EC693191F42EF7DDCE384C11D29FBF605981C0BE077D086757409ACAD53CB5B9E53D86A07CC428D459FF0F5B00D32A8CBBCA390BE49
|
||||
org.hsqldb/hsqldb/2.4.1=7A4B0F48072894C9CAD7352785465F3AE232AC22D79018053D8463EE143243626047AC19892A6E43325D172C7948BE35EDA54278F194B7A611B3DC032CFD047E
|
||||
org.jacoco/org.jacoco.agent/0.8.2=E0B59440237E2953791666EC5B7080ABCDC0DD1827FD701CADF2CF7FD805E11BAA3CD1749E8BACFAFBB18BF482AD6D93C37CA9DDB950103B0D05E0BC00BD034
|
||||
org.jacoco/org.jacoco.ant/0.8.2=F0532CF26F47F6952088BD336900BBBC8688788D71237EBB54EFDC2AE2635E9EFD2B96A6E4F03CEB1ABC4D7CB0138D526A27C5FD5CCDB013569E4F90051F7D55
|
||||
org.jacoco/org.jacoco.core/0.8.2=7422BCFECBC36548475319FD9C896A9052F98798F6AC0D602614526C620C9CC7880BB05D987089FC41299D817C92A92E12E72D6A51459740A3BF61582B613669
|
||||
org.jacoco/org.jacoco.report/0.8.2=EDE1B3CB978D21F0C65916DDA286732532D1A01450B2B833C9B8C7046B935167ADB63DB24B9ABF0C93AE155B7E8CF5FC74815711704C001093398E4D0FDF081
|
||||
org.jdom/jdom/1.1.3=921A79A4759724DAD02830E75FEF0F3A3B2BB1D14D572CA4E1F97BF7A93CC5413EE41B3B231331F1EF459E77F8AE1FBF43DCDF621D18BD72331F98B24C4E8284
|
||||
org.jetbrains.kotlin/kotlin-stdlib-common/1.3.31=53DF3352743FF6756CA8A5A63EE04DE27B9FA873204F89823C4906CFE33BC5FA91899B35B6EDADF852F7DB2C300D56FCB2D32AE4606EFBA4E3BFF32BEED5531
|
||||
org.jetbrains.kotlin/kotlin-stdlib/1.3.31=1DE7F0A1E0920D179DD3677D78B8D4AB009F04FED8919584A4190D4B69C2D4754454613A91BD41A66DA45E48F9E23B6AC5BFFF0B409F81BE1746556298AD698A
|
||||
org.jetbrains.kotlinx/kotlinx-coroutines-core/1.2.1=203FAF28151C4B20C932D716DA4799F44F1B32A32622CD0AECEB649FFB0C45B295553DAA073266D96020687A163EE4A6E0601B2EA9EF93E3785BB8FB07CFBBD0
|
||||
org.jetbrains/annotations/13.0=5622D0FFE410E7272E2BB9FAE1006CAEDEB86D0C62D2D9F3929A3B3CDCDEF1963218FCF0CEDE82E95EF9F4DA3ED4A173FA055EE6E4038886376181E0423E02FF
|
||||
org.jodd/jodd-core/5.0.6=359328570D17EEDB3CCE8C2D03A52D7C6345F2D1E590E604DF3B628EC641AC8AD5F845F783D74073BF60005E714E98D8B7D0EC1BE52F26A0C697477280FCDFC7
|
||||
org.jodd/jodd-lagarto/5.0.6=63C216848091C043C6AD1670B8442C722D7620E3DA428BDAD6AC327CA527E8A789E2B07BB3CD635E4F960F80C26BB2FB8545051EC55CB2C59535A66EB5B0B7A6
|
||||
org.jodd/jodd-log/5.0.6=3CE6C14823730ACEAF4CD0F86DA4F63BB47B1146163898B3F2A370E6890AD7F7EEB14D88D9916BF12B211236E9B539DC986C081A746AF00F3B78EB792CFDB9B6
|
||||
org.jodd/jodd-props/5.0.6=63AB3951F0C167B28479B6030066B28C35E1B1C4944E978679B4365F8179C123FFD60EE9BA0EEE5AD0BFD2A592B73C999328B92F3E4B2F8376CD39A9DC1B4370
|
||||
org.jsoup/jsoup/1.11.3=D8B4634950C8D7FE852C61C0538A7C4B271F5C39227593664A7A32145584E172CB66EBFA5301670DE93C2482CEAE83446BEBB4965A79060C5B28A67F1E3C0394
|
||||
org.mongodb/mongo-java-driver/2.11.3=737A0D037A6BEF711539FB89E8D7388EEF8F7B11393291412329D76DFB0C1695718CB903E60C63CA8144C95F53CA9EF66E80B4DFD5DA73E0E989467DC4B61337
|
||||
org.mozilla/rhino/1.7.10=FF4F8BFA5F1AFDD4F2E4C34DE8AA3CE18E4955F3804A3B864CB54583B7CB20621302786D625A2E4ED9EE879452F2E5BA70E855E65C34E58CF7F716D8A4515BC2
|
||||
org.nosphere.apache/creadur-rat-gradle/0.5.0=45A6A697C4E514893A0AA530D12A61E537FEAA68C2429E959C68541DB08D1BDD52542AF1DE21F4472557551309C54F4E96DF48889F09F77B70C09139352BAA2E
|
||||
org.objenesis/objenesis/2.6=23A593BDED8CB43236FAAD2018B008DA47BF4E29CC60C2E98FD4F2ED578FE2BADDD3A98547DC14273017C82CB19CE8EAAAB71D49273411856A2BA1A5D51015FC
|
||||
org.ow2.asm/asm-analysis/6.2.1=BE273F8E886BBCFDA81180917145996AB8FD26A17264EBEB5E1FC2337950A309D64DC8CBD373220009728622A8CBF56B8578E960B5561C22EA66848D296AE44E
|
||||
org.ow2.asm/asm-analysis/7.0=1A6CA169E9E2D29256F9C45570D89E5B039EAF7D405CCB3F7F79926552F2A0818975CE2C6ADCE3F1F59E28172E4303A1C790C52AB06263C61C9C8181FF279CEE
|
||||
org.ow2.asm/asm-commons/6.2.1=CDF7DDB8E865B1C22C7532FFF68380FE4EC49A00C6FF3188BF265C4769E49E793B51621FC80A39B5BA2D49E703F100BDB7FC9CFF8F488C5153A9339334371411
|
||||
org.ow2.asm/asm-commons/7.0=CA97B49EECE30DA774055B58A63C6E4F65A6BC4C0F40A829DCAF7164FBFFDEC10C6B2D9A22DF0A0918FDC83A47EA9906294AA99D3F170B35FD9E0632578C80B2
|
||||
org.ow2.asm/asm-tree/6.2.1=20FE687C2F494717CCEB33C97704FAB7C1867EEA1A0F79B70C68BCAA72E7818F34921B6FBA7A3C1ECBBC7256E1D8E1A538F9EC5B4BD3B2A255D412D2BC2CAA4C
|
||||
org.ow2.asm/asm-tree/7.0=81A223620DD16340D18ECBA20AB15CFE078F61AB0EC1AEF091AFCD282E3F6047B9800200412116289EC14917B5ECE9414C8009E92CC9A3333C677B5BFEC13BCF
|
||||
org.ow2.asm/asm-util/7.0=6B9630AD4C5F6ABC2724F9D85A7C0E81E524F8B0BF25273DD5578EDC20EFC7AB400095CD48E904D2536071181A8E9F39635FF3FEE0986BD078016D2DFF8241B1
|
||||
org.ow2.asm/asm/5.0.4=AFEE8F98EE21771F104318D95B839D9EA6EA083157BD62D8BC3462D9302DC20EA939D1B4AE2222F92F09B92BC9AB1317AFF02734007F716CC805FE49B92A8A5A
|
||||
org.ow2.asm/asm/6.2.1=C8D0AB865B628CB5A71C2B8C5FC8AACDA3E286B14662C3287CE50A96E91990E959F1447D439BD7190D9088E69E4368EFBFF5890FA539F98776F514A262D6DA8C
|
||||
org.ow2.asm/asm/7.0=B31699F50485DDC4E84466064CF5789A3E61BAFBEC53C4B9CB19FFEF07B36722D3EFDCA8722884FD6D6DEDACA65DB4DD6F71CD886BBA599E8A77971955167A60
|
||||
org.ow2.asm/asm/7.1=7EBA7097109389F48FA9142BF22D225F5D3104D68013D3B8E0A6D4054A8CD0EF64614372BDCB38987D68ADB6D33A3804E98DDF112BA84DBB09D448CE702DACC4
|
||||
org.slf4j/jcl-over-slf4j/1.7.25=A703864B269DE6F7BC98DF0FA98AA943CC327A4CA2915899D460E4A071FCC3FBE70957EB91B740CC935D0960B3D98F30C54A0A4019D7AE8C6D50F51EDB8D149
|
||||
org.slf4j/slf4j-api/1.7.2=BFE12C722ED57FAA3E26FEF214D95B9BDD2192742901920954979926D51E7B1BF0F61EA538F858328F4D6A306AFFECDCEF9D52452530CD2FE5C03552350C0EA0
|
||||
org.slf4j/slf4j-api/1.7.25=5DD6271FD5B34579D8E66271BAB75C89BACA8B2EBEAA9966DE391284BD08F2D720083C6E0E1EDDA106ECF8A04E9A32116DE6873F0F88C19C049C0FE27E5D820B
|
||||
org.slf4j/slf4j-api/1.8.0-beta2=49F858C76964F7DBDDF715C70D3CE3A1872E8342CF1643EFCD429CF45BBA97B1859D2723F6565DFB811586B61EBF5B160B3950D3D93D6BC2C3568F5142E5343E
|
||||
org.slf4j/slf4j-simple/1.8.0-beta2=D1C6A56ADD8A9BFAE1341910E457F7E561C666184F3F26B2DFA58F83396832AC006803194480000C89770B132A26A6C575687118E28A93D3A09511E22B9934E2
|
||||
org.sonarsource.scanner.api/sonar-scanner-api/2.12.0.1661=FB8E10D511E99B0D22ABEF8278BB65CEADA21F37D413ECA060FC8E7B8741374B5E3D5A12EAB4FB63140D754528DE59BA615D47B5BA4CDC0F75FF4A7BCD42F19C
|
||||
org.sonarsource.scanner.gradle/sonarqube-gradle-plugin/2.7.1=3C17B038DBD01BD523E7CD71E06F539BA4B804080BC2973DA206E2AF16511073AEDE8B72CA464AD1F561E786D9BFD2B71FF01007B93EAEBED2F2EE95E07FF742
|
||||
org.spockframework/spock-core/1.2-groovy-2.4=407AEE08D0E6AA1E2ADC3C9A1C966D91F2F53BEE0C92B85508F1E03E99F0E669356A2FBF9F450DB8D5328AD16ECD19B1BE1C9023B5C00031E91B9799A30381C2
|
||||
org.springframework/spring-aop/4.3.17.RELEASE=3072ABA1B4DAF91BC6BD985655032ECA0632FC043AF80AB1B823B3C21513C3715CD64C44A268A953A1457D936CC28A076218FD08AC953911F48A99BCA55E01B
|
||||
org.springframework/spring-beans/4.3.17.RELEASE=E8A5A8527C7231BA6C81211C60786550EC26CF549A07E52AA9E1001C624D8C0D0A056D3C6AFEE77AA0D55C57C3DB26F2222F78464BE6F5DF458F9BF6B495495C
|
||||
org.springframework/spring-context/4.3.17.RELEASE=5EFA9A98FFE014961E92AB7C86FE991A6C29C923345B2223630945AAEF108AD4A936C16984622AD16C81ED15BFD15707B907B8F5F587E7698C4523206B3D19C7
|
||||
org.springframework/spring-core/4.3.17.RELEASE=DCCF185FEFD78AE16DF085A864827D4375C0321E5A143A927705103D86D6CE4ADBEA61394AAEB4B90B3C95FFB8C72E2991B593653671FD5E2A9FD12ADE64B00A
|
||||
org.springframework/spring-expression/4.3.17.RELEASE=D4732DA2A25137B85D199DC26792B8510A213A782C04D02BD02FC54AB652F59CDCE8898DD79B5519E6ABFE93F1603924FEA76047F05063C2683B517270C69952
|
||||
oro/oro/2.0.8=9A98E493C4D771322B1331EC05AB0E363A83D8AC2AF8018D96A44DF2BF5BFC97D33EBE6F6F93E46AB10BF1536F0C29E9D9569318ED49BC18B4E96B1A8B476D37
|
||||
xalan/serializer/2.7.2=884D865865858A46306A3680DF69F3F0EFA0DF1313706B54E6900D36AF21E17CB6828F5A6BAC551C59F7F80BDD1CB64C3FDBDE44E213519C4AF87969E9E70774
|
||||
xalan/xalan/2.7.2=F859C5BD65F6DC91E396CE91FE2F6D30B2354D6B419CD9EA96984C5403E5CD1342BB9362B0AE1F2792612F0DF731C4F7AC92F16A825BB7E22089C27A129C6C
|
||||
xerces/xercesImpl/2.12.0=E9D62DC311DF808F88AC63B427BB40567C19CEC618A33D0A9C7C830B1BB7C64DAE263A5EE6C824D8E51A63CD24F49FE2EF4E2563D6E6AA0400F63E9BB35DCE97
|
||||
xerces/xercesImpl/2.9.1=37A13B129F3536A53F2A553151A53997DA6DE7CE4D7231EFEEFD26A68C92BE309666F2EE1F527D3B8C38BC6ADDC9FCCBBDD0D134759FD88667976B0CFF842435
|
||||
xml-apis/xml-apis/1.4.01=8DB0283B6840CD6407957D296B802E3EDF90653E2722F8E29F86C1C0B60996C4B43E9E065E6864DAB89B2138DDB0174D9B4FDDA4A93F94EEB884783DB82F3268
|
||||
xml-resolver/xml-resolver/1.2=ECA19B8A6B04C279B7982B16F1763CA1D49B0081A8D4CA2B7419F057D22A0EC60795EB4D901C5EB25DD4A733248876AA2F522C17A6144A26C8EDE9FB2F84531A
|
||||
xmlpull/xmlpull/1.1.3.1=54D1090623497E81270B2AF633268656E8855E1EDCE2217886431039516A391BA9F8D8DB3C21A0B5E51C7F7CB672D63EBE77BE75708B760B06F399486960F261
|
||||
xpp3/xpp3_min/1.1.4c=34989289CE8ED861499F31742EE1E7B9DC3C59973CE915A7B561D33D98968E77DB5BB94C1692802CCDBD86D04CAA7DB67748EFAFB1402428B2D6AE3056497618
|
|
@ -0,0 +1,176 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<!-- Verify that EVERY source file has the appropriate license -->
|
||||
<module name="RegexpHeader">
|
||||
<property name="headerFile" value="java.header.regex"/>
|
||||
<property name="headerFile" value="${config_loc}/java.header.regex"/>
|
||||
<property name="multiLines" value="10"/>
|
||||
<property name="fileExtensions" value="java, groovy"/>
|
||||
</module>
|
96
eclipse.md
96
eclipse.md
|
@ -1,96 +1,22 @@
|
|||

|
||||
# Eclipse Configuration for JMeter project
|
||||
|
||||
## Eclipse settings
|
||||
## Launching Apache JMeter from Eclipse
|
||||
|
||||
The following files should be excluded from build output:
|
||||
|
||||
> `*.metaprops`
|
||||
|
||||
See `Project Preferences/Java Compiler/Building/Output Folder/Filtered Resources`
|
||||
|
||||
|
||||
## Eclipse.classpath
|
||||
|
||||
**This has been tested with Eclipse 3.2 up to 4.6.1. It may not work with other versions.**
|
||||
|
||||
The file `eclipse.classpath` is intended as a starter `.classpath` file
|
||||
for building JMeter using Eclipse version 3 to 4.6.
|
||||
|
||||
Make sure to execute the `ant download_jars` task to download and install the jars referred
|
||||
to in the classpath before creating the Eclipse project.
|
||||
|
||||
If you do after creating project, then don't forget to refresh Eclipse project.
|
||||
|
||||
Note that Eclipse is not easy to use for creating jar files.
|
||||
However, it is easy to use Eclipse to run Ant.
|
||||
|
||||
The following targets may prove useful:
|
||||
|
||||
- `clean` - Clean up to force a build from source
|
||||
- `package-only` - creates the jars
|
||||
- `package` - compiles everything and then packages it
|
||||
- `run_gui` - compiles, packages, and then start the JMeter GUI from the jars
|
||||
|
||||
## Invoking Ant targets inside Eclipse
|
||||
|
||||
You can use the `Run As --> Ant Build` and select target, or you can use
|
||||
the `Windows --> Show View --> Ant View`. Then select the `build.xml` file and
|
||||
drag and drop to the `Ant View`.
|
||||
Now you can invoke targets by clicking on them.
|
||||
Note that if you invoke for example the `compile` target, and get error
|
||||
messages about
|
||||
|
||||
|
||||
> Unable to find a javac compiler;
|
||||
com.sun.tools.javac.Main is not on the classpath.
|
||||
Perhaps JAVA_HOME does not point to the JDK
|
||||
|
||||
|
||||
it just means that your Eclipse project is set up with JRE libraries instead of JDK libraries.
|
||||
The suggested fix is to add a JDK in `Window --> Preferences --> Java --> Installed JREs`.
|
||||
|
||||
Then do a `Project --> Properties` and select `Java Build Path` in the left pane, and then
|
||||
select the `Libraries` tab in the right pane. Scroll to the bottom, select the `JRE System Library`,
|
||||
and click `Remove`. Then click `Add library...` , select `JRE System Library`, and then select
|
||||
the JDK.
|
||||
|
||||
Now it should work when you invoke the `compile` target.
|
||||
|
||||
|
||||
## Finishing the build using Ant
|
||||
|
||||
Find the `build.xml` file in the project,
|
||||
right click on it, and click `Run As --> Ant Build`.
|
||||
|
||||
Make sure you select the `package` target.
|
||||
|
||||
This will compile any remaining classes,
|
||||
and then create all the jars.
|
||||
|
||||
Now refresh the project (you should add this to the Ant build properties)
|
||||
|
||||
## Launching from Eclipse
|
||||
|
||||
You can use the Ant target `run_gui` to run the JMeter GUI, or you can follow the instructions
|
||||
You can use the Gradle task `runGui` to run the JMeter GUI, or you can follow the instructions
|
||||
below to add a Java Application launch, which will for example, allow you to use the debugger to
|
||||
run JMeter.
|
||||
|
||||
These instructions assume you have configured Eclipse to use the classpath
|
||||
as suggested in eclipse.classpath, and have run `ant package` to compile
|
||||
the RMI classes and build the jars.
|
||||
as suggested in [CONTRIBUTING.md](CONTRIBUTING.md).
|
||||
|
||||
Create a new Java Application launch configuration.
|
||||
## Launching from Eclipse
|
||||
|
||||
On the Main tab, enter the following as the main class:
|
||||
Note: you can use Gradle task `runGui` to start JMeter, however Eclipse does not support
|
||||
debugging of the Gradle tasks.
|
||||
|
||||
> `org.apache.jmeter.NewDriver`
|
||||
Alternative option is to create a `Launch Configuration`:
|
||||
|
||||
On the Arguments tab, in the Working Directory area, pick the radio
|
||||
button next to `Other` and enter the following in the text box:
|
||||
|
||||
> `${workspace_loc}/jmeter/bin`
|
||||
|
||||
where `jmeter` is the name of the JMeter project.
|
||||
|
||||
**It would be nicer to use `${project_loc}/bin` but unfortunately the Eclipse Debug view does not seem to preserve any of the project variables**
|
||||
1. Create a new `Java Application` launch configuration
|
||||
1. Use `dist` for `Project`
|
||||
1. Use `org.apache.jmeter.NewDriver` for the main class
|
||||
1. On the arguments tab use the following for `Working Directory`: `${workspace_loc:jmeter/bin}`
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
# Gradle command-line
|
||||
|
||||
Useful commands (gw comes from https://github.com/dougborg/gdub, otherwise `./gradlew` can be used instead):
|
||||
|
||||
* Build and run
|
||||
|
||||
# Build and start JMeter GUI
|
||||
gw runGui
|
||||
|
||||
# Build project and copy relevant jars to rootDir/lib, and start JMeter
|
||||
gw createDist; ./bin/jmeter
|
||||
|
||||
# Build all distributions (source, binary)
|
||||
gw :src:dist:assemble
|
||||
|
||||
* Base project info
|
||||
|
||||
# Display all submodules
|
||||
gw projects
|
||||
# Different tasks for current module
|
||||
gw tasks
|
||||
|
||||
* Cleaning build directories
|
||||
Technically speaking, `clean` should not be required (every time it is required it might be just a bug), however it might be useful to perform a "clean" build
|
||||
|
||||
# Cleans current project (submodule)
|
||||
gw clean
|
||||
# Cleans the specified project
|
||||
gw :src:core:clean
|
||||
|
||||
* Dependencies
|
||||
|
||||
# Displays dependencies. Gradle's "configurations" are something like different classpaths.
|
||||
gw dependencies
|
||||
|
||||
# Displays dependencies for all projects
|
||||
gw allDependencies
|
||||
|
||||
# Analyze why the project depends on `org.ow2.asm:asm`
|
||||
gw dependencyInsight --dependency org.ow2.asm:asm
|
||||
|
||||
# Verify checksums of dependencies
|
||||
# Checksum verification is done by default
|
||||
# Expected checksums are stored in /checksum.properties file
|
||||
# Actual checksums are stored in /build/checksum/computed.checksum.properties
|
||||
|
||||
* Static checks
|
||||
|
||||
# Run RAT
|
||||
gw rat
|
||||
# Run checkstyle for main (non-test) code
|
||||
gw checkstyleMain
|
||||
# Run checkstyle for test code
|
||||
gw checkstyleTest
|
||||
|
||||
* Compiling code
|
||||
|
||||
gw compileJava
|
||||
gw compileTestJava
|
||||
...
|
||||
|
||||
* Build project
|
||||
|
||||
# Just build jar (see build/libs/*.jar)
|
||||
gw jar
|
||||
# "build" is a default task to "execute all the actions"
|
||||
gw build
|
||||
# Test might be skipped by `-x test` (Gradle's default way to skip task by name)
|
||||
gw -x test build
|
||||
# Build project in parallel
|
||||
gw build --parallel
|
||||
|
||||
* Tests
|
||||
Gradle automatically tracks task dependencies, so if you modify a file in `/src/jorphan/*`, then you can just invoke `gw check` at project level or in `core` module, and Gradle will automatically build the required jars and files.
|
||||
|
||||
# Runs all the tests (unit tests, checkstyle, etc)
|
||||
gw check
|
||||
# Runs just unit tests
|
||||
gw test
|
||||
# Runs just core tests
|
||||
gw :src:core:test
|
||||
|
||||
* Coverage
|
||||
|
||||
# Generates code coverage report for the test task to build/reports/jacoco/test/html
|
||||
gw jacocoTestReport
|
||||
# Generate combined coverage report
|
||||
gw jacocoReport
|
||||
|
||||
* Generate Javadocs
|
||||
|
||||
# Builds javadoc to build/docs/javadoc subfolder
|
||||
gw javadoc
|
||||
# Builds javadoc jar to build/libs/jorphan-javadoc.jar
|
||||
gw javadocJar
|
||||
|
||||
* Site
|
||||
|
||||
# Creates preview of a site to build/docs/site
|
||||
gw :src:dist:previewSite
|
||||
|
||||
# Builds and publishes site preview to a Git repository
|
||||
gw :src:dist:pushPreviewSite
|
||||
|
||||
* Maven
|
||||
|
||||
# publishes Maven artifact to local repository
|
||||
gw publishToMavenLocal
|
||||
|
||||
# Generate all pom files
|
||||
# The resulting files are placed under build/publications folder
|
||||
gw generatePom
|
||||
|
||||
* Release artifacts
|
||||
|
||||
# Builds ZIP and TGZ artifacts for the release
|
||||
gw :src:dist:assemble
|
||||
|
||||
* Signing
|
||||
It is implemented via https://docs.gradle.org/5.2.1/userguide/signing_plugin.html, so it is done automatically provided credentials are specified via https://docs.gradle.org/5.2.1/userguide/signing_plugin.html#sec:signatory_credentials
|
||||
|
||||
# Signs all the artifacts of the current module (see results in build/**/*.asc
|
||||
gw sign
|
||||
# Note: signing is performed as a part of "release artifact build"
|
||||
# so it will be performed with gw :src:dist:assemble
|
||||
|
||||
* Releasing
|
||||
# Builds the project, pushes artifacts to svn://.../dev, stages artifacts to Nexus staging repository
|
||||
# Note: it uses https://github.com/vlsi/asflike-release-environment, so it does not alter public repositories
|
||||
gw prepareVote -Prc=1 -Pasf
|
||||
|
||||
# Prepare another release candidate
|
||||
gw prepareVote -Prc=2 -Pasf
|
||||
|
||||
# Release staged artifacts to SVN and Nexus
|
||||
gw publishDist -Prc=2 -Pasf
|
|
@ -0,0 +1,100 @@
|
|||
# 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.
|
||||
|
||||
org.gradle.parallel=true
|
||||
kotlin.code.style=official
|
||||
kotlin.parallel.tasks.in.project=true
|
||||
|
||||
# This is version for Calcite Avatica itself
|
||||
# Note: it should not include "-SNAPSHOT" as it is automatically added by build.gradle.kts
|
||||
# Release version can be generated by using -Prelease or -Prc=<int> arguments
|
||||
jmeter.version=5.2.0
|
||||
|
||||
# Tools
|
||||
checkstyle.version=8.22
|
||||
jacoco.version=0.8.2
|
||||
spotbugs.version=3.1.12
|
||||
velocity.version=1.7
|
||||
|
||||
# Dependencies
|
||||
accessors-smart.version=1.2
|
||||
activemq.version=5.15.8
|
||||
apache-rat.version=0.13
|
||||
asm.version=7.1
|
||||
bouncycastle.version=1.60
|
||||
bsf.version=2.4.0
|
||||
bsh.version=2.0b6
|
||||
caffeine.version=2.6.2
|
||||
cglib-nodep.version=3.2.9
|
||||
commons-codec.version=1.11
|
||||
commons-collections.version=3.2.2
|
||||
commons-dbcp2.version=2.5.0
|
||||
commons-io.version=2.6
|
||||
commons-jexl.version=2.1.1
|
||||
commons-jexl3.version=3.1
|
||||
commons-lang.version=2.6
|
||||
commons-lang3.version=3.8.1
|
||||
commons-math3.version=3.6.1
|
||||
commons-net.version=3.6
|
||||
commons-pool2.version=2.6.0
|
||||
commons-text.version=1.6
|
||||
darcula.version=e208efb96f70e4be9dc362fbb46f6e181ef501dd
|
||||
dec.version=0.1.2
|
||||
dnsjava.version=2.1.8
|
||||
freemarker.version=2.3.28
|
||||
ftplet-api.version=1.1.1
|
||||
ftpserver-core.version=1.1.1
|
||||
geronimo-jms_1.1_spec.version=1.1.1
|
||||
groovy-all.version=2.4.16
|
||||
hamcrest-core.version=1.3
|
||||
hamcrest-date.version=2.0.4
|
||||
hsqldb.version=2.4.1
|
||||
httpasyncclient.version=4.1.4
|
||||
httpclient.version=4.5.8
|
||||
httpcore-nio.version=4.4.11
|
||||
httpcore.version=4.4.11
|
||||
httpmime.version=4.5.8
|
||||
jackson.version=2.9.9
|
||||
javax.activation.version=1.2.0
|
||||
jcharts.version=0.7.5
|
||||
jdom.version=1.1.3
|
||||
jodd.version=5.0.6
|
||||
json-path.version=2.4.0
|
||||
json-smart.version=2.3
|
||||
jsoup.version=1.11.3
|
||||
jtidy.version=r938
|
||||
junit.version=4.12
|
||||
log4j.version=2.11.1
|
||||
mail.version=1.5.0-b01
|
||||
mina-core.version=2.0.19
|
||||
mongo-java-driver.version=2.11.3
|
||||
objenesis.version=2.6
|
||||
oro.version=2.0.8
|
||||
ph-commons.version=9.2.1
|
||||
ph-css.version=6.1.1
|
||||
rhino.version=1.7.10
|
||||
rsyntaxtextarea.version=3.0.2
|
||||
Saxon-HE.version=9.9.1-1
|
||||
slf4j.version=1.7.25
|
||||
spock-core.version=1.2-groovy-2.4
|
||||
springframework.version=4.3.17.RELEASE
|
||||
tika.version=1.21
|
||||
xalan.version=2.7.2
|
||||
xercesImpl.version=2.12.0
|
||||
xml-apis.version=1.4.01
|
||||
xmlgraphics-commons.version=2.3
|
||||
xmlpull.version=1.1.3.1
|
||||
xpp3_min.version=1.1.4c
|
||||
xstream.version=1.4.11
|
Binary file not shown.
|
@ -0,0 +1,21 @@
|
|||
# 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.
|
||||
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=6c4276f97c9059ef4dfb06cc7325c43ed9b933ab04f032e9d9372e8589cb6faf
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
|
@ -0,0 +1,172 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
|
@ -0,0 +1,84 @@
|
|||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
|
@ -1,7 +0,0 @@
|
|||
This directory structure contains licenses for non-ASF software.
|
||||
|
||||
The bin/ directory contains license files for 3rd party jars bundled with the binary distribution
|
||||
|
||||
The src/ directory contains license files for 3rd party source; it also applies to the binary distribution
|
||||
|
||||
Note that the bin/ directory is included in the source distribution because it is needed in order to create the binary distribution
|
|
@ -1,40 +1,37 @@
|
|||
rat-excludes.txt
|
||||
gradle/wrapper/gradle-wrapper.jar
|
||||
gradlew
|
||||
gradlew.bat
|
||||
.*
|
||||
.*/**
|
||||
CODE_OF_CONDUCT.md
|
||||
CONTRIBUTING.md
|
||||
eclipse.md
|
||||
gradle.md
|
||||
ISSUE_TEMPLATE.md
|
||||
PULL_REQUEST_TEMPLATE.md
|
||||
README.md
|
||||
**/*.jmx
|
||||
bin/*.csv
|
||||
bin/*.xml
|
||||
bin/*.jtl
|
||||
bin/examples/**
|
||||
bin/report-output/**
|
||||
bin/report-template/**
|
||||
bin/testfiles/**
|
||||
build/**
|
||||
build-local.properties
|
||||
dist/*.md5
|
||||
dist/*.sha512
|
||||
docs/**
|
||||
extras/*.txt
|
||||
extras/*.json
|
||||
extras/Test.html
|
||||
extras/Test.jtl
|
||||
**/images/**
|
||||
lib/aareadme.txt
|
||||
lib/opt/**
|
||||
licenses/bin/**
|
||||
licenses/src/**
|
||||
local/**
|
||||
printable_docs/**
|
||||
reports/**
|
||||
res/META-INF/jmeter_as_ascii_art.txt
|
||||
src/core/org/apache/jmeter/help.txt
|
||||
lib/opt/README.txt
|
||||
src/licenses/licenses/*/CC0-1.0.txt
|
||||
#local/**
|
||||
#printable_docs/**
|
||||
#reports/**
|
||||
src/launcher/src/main/resources/org/apache/jmeter/jmeter_as_ascii_art.txt
|
||||
src/core/src/main/resources/org/apache/jmeter/help.txt
|
||||
test/resources/**
|
||||
**/*.log
|
||||
**/test/resources/**
|
||||
#**/*.log
|
||||
**/download_jmeter.cgi
|
||||
xdocs/extending/HTML_REPORT_README.TXT
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
// This is the name of a current project
|
||||
// Note: it cannot be inferred from the directory name as developer might clone JMeter to jmeter_tmp folder
|
||||
rootProject.name = "jmeter"
|
||||
|
||||
include(
|
||||
"src:bom",
|
||||
"src:bshclient",
|
||||
"src:launcher",
|
||||
"src:components",
|
||||
"src:config",
|
||||
"src:core",
|
||||
"src:examples",
|
||||
"src:functions",
|
||||
"src:generator",
|
||||
"src:jorphan",
|
||||
"src:licenses",
|
||||
"src:protocol:ftp",
|
||||
"src:protocol:http",
|
||||
"src:protocol:java",
|
||||
"src:protocol:jdbc",
|
||||
"src:protocol:jms",
|
||||
"src:protocol:junit",
|
||||
"src:protocol:junit-sample",
|
||||
"src:protocol:ldap",
|
||||
"src:protocol:mail",
|
||||
"src:protocol:mongodb",
|
||||
"src:protocol:native",
|
||||
"src:protocol:tcp",
|
||||
"src:release",
|
||||
"src:dist",
|
||||
"src:dist-check")
|
||||
|
||||
// See https://github.com/gradle/gradle/issues/1348#issuecomment-284758705 and
|
||||
// https://github.com/gradle/gradle/issues/5321#issuecomment-387561204
|
||||
// Gradle inherits Ant "default excludes", however we do want to archive those files
|
||||
org.apache.tools.ant.DirectoryScanner.removeDefaultExclude("**/.gitattributes")
|
||||
org.apache.tools.ant.DirectoryScanner.removeDefaultExclude("**/.gitignore")
|
||||
|
||||
fun String?.toBool(nullAs: Boolean, blankAs: Boolean, default: Boolean) =
|
||||
when {
|
||||
this == null -> nullAs
|
||||
isBlank() -> blankAs
|
||||
default -> !equals("false", ignoreCase = true)
|
||||
else -> equals("true", ignoreCase = true)
|
||||
}
|
||||
|
||||
fun property(name: String) =
|
||||
when(extra.has(name)) {
|
||||
true -> extra.get(name) as? String
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (property("localReleasePlugins").toBool(nullAs = false, blankAs = true, default = false)) {
|
||||
// This enables to use local clone of vlsi-release-plugins for debugging purposes
|
||||
includeBuild("../vlsi-release-plugins")
|
||||
}
|
||||
|
||||
// Checksum plugin sources can be validated at https://github.com/vlsi/vlsi-release-plugins
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath("com.github.vlsi.gradle:checksum-dependency-plugin:1.19.0")
|
||||
// Alternative option is to use local jar file via
|
||||
// classpath(files("checksum-dependency-plugin-1.19.0.jar"))
|
||||
}
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
// Note: we need to verify the checksum for checksum-dependency-plugin itself
|
||||
val expectedSha512 =
|
||||
"D7B1A0C7937DCB11536F97C52FE25752BD7DA6011299E81FA59AD446A843265A6FA079ECA1D5FD49C4B3C2496A363C60C5939268BED0B722EFB8BB6787A2B193"
|
||||
|
||||
fun File.sha512(): String {
|
||||
val md = java.security.MessageDigest.getInstance("SHA-512")
|
||||
forEachBlock { buffer, bytesRead ->
|
||||
md.update(buffer, 0, bytesRead)
|
||||
}
|
||||
return BigInteger(1, md.digest()).toString(16).toUpperCase()
|
||||
}
|
||||
|
||||
val checksumDependencyJar: File = buildscript.configurations["classpath"].resolve().first()
|
||||
val actualSha512 = checksumDependencyJar.sha512()
|
||||
if (actualSha512 != expectedSha512) {
|
||||
throw GradleException(
|
||||
"""
|
||||
Checksum mismatch for $checksumDependencyJar
|
||||
Expected: $expectedSha512
|
||||
Actual: $actualSha512
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
apply(plugin = "com.github.vlsi.checksum-dependency")
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
plugins {
|
||||
`java-platform`
|
||||
}
|
||||
|
||||
val String.v: String get() = rootProject.extra["$this.version"] as String
|
||||
|
||||
// Note: Gradle allows to declare dependency on "bom" as "api",
|
||||
// and it makes the contraints to be transitively visible
|
||||
// However Maven can't express that, so the approach is to use Gradle resolution
|
||||
// and generate pom files with resolved versions
|
||||
// See https://github.com/gradle/gradle/issues/9866
|
||||
|
||||
fun DependencyConstraintHandlerScope.apiv(
|
||||
notation: String,
|
||||
versionProp: String = notation.substringAfterLast(':')
|
||||
) =
|
||||
"api"(notation + ":" + versionProp.v)
|
||||
|
||||
fun DependencyConstraintHandlerScope.runtimev(
|
||||
notation: String,
|
||||
versionProp: String = notation.substringAfterLast(':')
|
||||
) =
|
||||
"runtime"(notation + ":" + versionProp.v)
|
||||
|
||||
dependencies {
|
||||
// Parenthesis are needed here: https://github.com/gradle/gradle/issues/9248
|
||||
(constraints) {
|
||||
// api means "the dependency is for both compilation and runtime"
|
||||
// runtime means "the dependency is only for runtime, not for compilation"
|
||||
// In other words, marking dependency as "runtime" would avoid accidental
|
||||
// dependency on it during compilation
|
||||
runtimev("org.apache.tika:tika-parsers", "tika")
|
||||
runtimev("org.codehaus.groovy:groovy-all")
|
||||
runtimev("org.ow2.asm:asm")
|
||||
runtimev("com.github.bulenkov.darcula:darcula")
|
||||
|
||||
// activemq-all should not be used as it provides secondary slf4j binding
|
||||
runtimev("org.apache.activemq:activemq-broker", "activemq")
|
||||
runtimev("org.apache.activemq:activemq-client", "activemq")
|
||||
runtimev("org.apache.activemq:activemq-spring", "activemq")
|
||||
runtimev("org.springframework:spring-context", "springframework")
|
||||
runtimev("org.springframework:spring-beans", "springframework")
|
||||
|
||||
apiv("bsf:bsf")
|
||||
apiv("cglib:cglib-nodep")
|
||||
apiv("com.fasterxml.jackson.core:jackson-annotations", "jackson")
|
||||
apiv("com.fasterxml.jackson.core:jackson-core", "jackson")
|
||||
apiv("com.fasterxml.jackson.core:jackson-databind", "jackson")
|
||||
apiv("com.fifesoft:rsyntaxtextarea")
|
||||
apiv("com.github.ben-manes.caffeine:caffeine")
|
||||
apiv("com.helger:ph-commons")
|
||||
apiv("com.helger:ph-css")
|
||||
apiv("com.jayway.jsonpath:json-path")
|
||||
apiv("com.sun.activation:javax.activation", "javax.activation")
|
||||
apiv("com.thoughtworks.xstream:xstream")
|
||||
apiv("commons-codec:commons-codec")
|
||||
apiv("commons-collections:commons-collections")
|
||||
apiv("commons-io:commons-io")
|
||||
apiv("commons-lang:commons-lang")
|
||||
apiv("commons-net:commons-net")
|
||||
apiv("dnsjava:dnsjava")
|
||||
apiv("javax.activation:javax.activation-api", "javax.activation")
|
||||
apiv("javax.mail:mail")
|
||||
apiv("jcharts:jcharts")
|
||||
apiv("junit:junit")
|
||||
apiv("net.minidev:accessors-smart")
|
||||
apiv("net.minidev:json-smart")
|
||||
apiv("net.sf.jtidy:jtidy")
|
||||
apiv("net.sf.saxon:Saxon-HE")
|
||||
apiv("org.apache-extras.beanshell:bsh")
|
||||
apiv("org.apache.commons:commons-dbcp2")
|
||||
apiv("org.apache.commons:commons-jexl3")
|
||||
apiv("org.apache.commons:commons-jexl")
|
||||
apiv("org.apache.commons:commons-lang3")
|
||||
apiv("org.apache.commons:commons-math3")
|
||||
apiv("org.apache.commons:commons-pool2")
|
||||
apiv("org.apache.commons:commons-text")
|
||||
apiv("org.apache.ftpserver:ftplet-api")
|
||||
apiv("org.apache.ftpserver:ftpserver-core")
|
||||
apiv("org.apache.geronimo.specs:geronimo-jms_1.1_spec")
|
||||
apiv("org.apache.httpcomponents:httpasyncclient")
|
||||
apiv("org.apache.httpcomponents:httpclient")
|
||||
apiv("org.apache.httpcomponents:httpcore-nio")
|
||||
apiv("org.apache.httpcomponents:httpcore")
|
||||
apiv("org.apache.httpcomponents:httpmime")
|
||||
apiv("org.apache.logging.log4j:log4j-1.2-api", "log4j")
|
||||
apiv("org.apache.logging.log4j:log4j-api", "log4j")
|
||||
apiv("org.apache.logging.log4j:log4j-core", "log4j")
|
||||
apiv("org.apache.logging.log4j:log4j-slf4j-impl", "log4j")
|
||||
apiv("org.apache.mina:mina-core")
|
||||
apiv("org.apache.rat:apache-rat")
|
||||
apiv("org.apache.tika:tika-core", "tika")
|
||||
apiv("org.apache.velocity:velocity")
|
||||
apiv("org.apache.xmlgraphics:xmlgraphics-commons")
|
||||
apiv("org.bouncycastle:bcmail-jdk15on", "bouncycastle")
|
||||
apiv("org.bouncycastle:bcpkix-jdk15on", "bouncycastle")
|
||||
apiv("org.bouncycastle:bcprov-jdk15on", "bouncycastle")
|
||||
apiv("org.brotli:dec")
|
||||
apiv("org.exparity:hamcrest-date")
|
||||
apiv("org.freemarker:freemarker")
|
||||
apiv("org.hamcrest:hamcrest-core")
|
||||
apiv("org.hsqldb:hsqldb")
|
||||
apiv("org.jdom:jdom")
|
||||
apiv("org.jodd:jodd-core", "jodd")
|
||||
apiv("org.jodd:jodd-lagarto", "jodd")
|
||||
apiv("org.jodd:jodd-log", "jodd")
|
||||
apiv("org.jodd:jodd-props", "jodd")
|
||||
apiv("org.jsoup:jsoup")
|
||||
apiv("org.mongodb:mongo-java-driver")
|
||||
apiv("org.mozilla:rhino")
|
||||
apiv("org.objenesis:objenesis")
|
||||
apiv("org.slf4j:jcl-over-slf4j", "slf4j")
|
||||
apiv("org.slf4j:slf4j-api", "slf4j")
|
||||
apiv("org.spockframework:spock-core")
|
||||
apiv("oro:oro")
|
||||
apiv("xalan:serializer", "xalan")
|
||||
apiv("xalan:xalan", "xalan")
|
||||
apiv("xerces:xercesImpl")
|
||||
apiv("xml-apis:xml-apis")
|
||||
apiv("xmlpull:xmlpull")
|
||||
apiv("xpp3:xpp3_min")
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
|
||||
manifest {
|
||||
attributes["Main-Class"] = "org.apache.jmeter.util.BeanShellClient"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,187 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
val skipMavenPublication = setOf(
|
||||
":src:bshclient",
|
||||
":src:dist",
|
||||
":src:dist-check",
|
||||
":src:examples",
|
||||
":src:generator",
|
||||
":src:licenses",
|
||||
":src:protocol",
|
||||
":src:release"
|
||||
)
|
||||
|
||||
subprojects {
|
||||
if (path == ":src:bom") {
|
||||
return@subprojects
|
||||
}
|
||||
|
||||
val groovyUsed = file("src/main/groovy").isDirectory || file("src/test/groovy").isDirectory
|
||||
val testsPresent = file("src/test").isDirectory
|
||||
|
||||
apply<JavaLibraryPlugin>()
|
||||
if (groovyUsed) {
|
||||
apply<GroovyPlugin>()
|
||||
}
|
||||
apply<MavenPublishPlugin>()
|
||||
apply<JacocoPlugin>()
|
||||
|
||||
dependencies {
|
||||
if (!testsPresent) {
|
||||
// No tests => no dependencies required
|
||||
return@dependencies
|
||||
}
|
||||
val testImplementation by configurations
|
||||
val testRuntimeOnly by configurations
|
||||
testImplementation("junit:junit")
|
||||
if (groovyUsed) {
|
||||
testImplementation("org.spockframework:spock-core")
|
||||
}
|
||||
testRuntimeOnly("cglib:cglib-nodep:3.2.9") {
|
||||
because("""
|
||||
org.spockframework.mock.CannotCreateMockException: Cannot create mock for
|
||||
class org.apache.jmeter.report.processor.AbstractSummaryConsumer${'$'}SummaryInfo.
|
||||
Mocking of non-interface types requires a code generation library.
|
||||
Please put an up-to-date version of byte-buddy or cglib-nodep on the class path.""".trimIndent())
|
||||
}
|
||||
testRuntimeOnly("org.objenesis:objenesis") {
|
||||
because("""
|
||||
org.spockframework.mock.CannotCreateMockException: Cannot create mock for
|
||||
class org.apache.jmeter.report.core.Sample. To solve this problem,
|
||||
put Objenesis 1.2 or higher on the class path (recommended),
|
||||
or supply constructor arguments (e.g. 'constructorArgs: [42]') that allow to construct
|
||||
an object of the mocked type.""".trimIndent())
|
||||
}
|
||||
}
|
||||
|
||||
// Note: jars below do not normalize line endings.
|
||||
// Those jars, however are not included to source/binary distributions
|
||||
// so the normailzation is not that important
|
||||
|
||||
val sourcesJar by tasks.registering(Jar::class) {
|
||||
val sourceSets: SourceSetContainer by project
|
||||
from(sourceSets["main"].allJava)
|
||||
archiveClassifier.set("sources")
|
||||
}
|
||||
|
||||
val javadocJar by tasks.registering(Jar::class) {
|
||||
from(tasks.named(JavaPlugin.JAVADOC_TASK_NAME))
|
||||
archiveClassifier.set("javadoc")
|
||||
}
|
||||
|
||||
val testClasses by configurations.creating {
|
||||
extendsFrom(configurations["testRuntime"])
|
||||
}
|
||||
|
||||
if (testsPresent) {
|
||||
// Do not generate test jars when src/test folder is missing (e.g. "config.jar")
|
||||
val testJar by tasks.registering(Jar::class) {
|
||||
val sourceSets: SourceSetContainer by project
|
||||
archiveClassifier.set("test")
|
||||
from(sourceSets["test"].output)
|
||||
}
|
||||
|
||||
// Parenthesis needed to use Project#getArtifacts
|
||||
(artifacts) {
|
||||
testClasses(testJar)
|
||||
}
|
||||
}
|
||||
|
||||
val archivesBaseName = when (name) {
|
||||
"jorphan", "bshclient" -> name
|
||||
"launcher" -> "ApacheJMeter"
|
||||
else -> "ApacheJMeter_$name"
|
||||
}
|
||||
setProperty("archivesBaseName", archivesBaseName)
|
||||
|
||||
// See https://stackoverflow.com/a/53661897/1261287
|
||||
// Subprojects can't use "publishing" since that accessor is not available at parent project
|
||||
// evaluation time
|
||||
configure<PublishingExtension> {
|
||||
if (project.path in skipMavenPublication) {
|
||||
return@configure
|
||||
}
|
||||
publications {
|
||||
create<MavenPublication>(project.name) {
|
||||
artifactId = archivesBaseName
|
||||
version = rootProject.version.toString()
|
||||
from(components["java"])
|
||||
|
||||
// Eager task creation is required due to
|
||||
// https://github.com/gradle/gradle/issues/6246
|
||||
artifact(sourcesJar.get())
|
||||
artifact(javadocJar.get())
|
||||
|
||||
// Use the resolved versions in pom.xml
|
||||
// Gradle might have different resolution rules, so we set the versions
|
||||
// that were used in Gradle build/test.
|
||||
versionMapping {
|
||||
usage(Usage.JAVA_RUNTIME) {
|
||||
fromResolutionResult()
|
||||
}
|
||||
usage(Usage.JAVA_API) {
|
||||
fromResolutionOf("runtimeClasspath")
|
||||
}
|
||||
}
|
||||
|
||||
pom {
|
||||
withXml {
|
||||
val sb = asString()
|
||||
var s = sb.toString()
|
||||
// <scope>compile</scope> is Maven default, so delete it
|
||||
s = s.replace("<scope>compile</scope>", "")
|
||||
// Cut <dependencyManagement> because all dependencies have the resolved versions
|
||||
s = s.replace(
|
||||
Regex(
|
||||
"<dependencyManagement>.*?</dependencyManagement>",
|
||||
RegexOption.DOT_MATCHES_ALL
|
||||
),
|
||||
""
|
||||
)
|
||||
sb.setLength(0)
|
||||
sb.append(s)
|
||||
// Re-format the XML
|
||||
asNode()
|
||||
}
|
||||
name.set("Apache JMeter ${project.name.capitalize()}")
|
||||
description.set(project.description)
|
||||
inceptionYear.set("1998")
|
||||
url.set("http://jmeter.apache.org/")
|
||||
licenses {
|
||||
license {
|
||||
name.set("The Apache License, Version 2.0")
|
||||
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
|
||||
comments.set("A business-friendly OSS license")
|
||||
}
|
||||
}
|
||||
issueManagement {
|
||||
system.set("bugzilla")
|
||||
url.set("https://bz.apache.org/bugzilla/describecomponents.cgi?product=JMeter")
|
||||
}
|
||||
scm {
|
||||
connection.set("scm:git:https://gitbox.apache.org/repos/asf/jmeter.git")
|
||||
developerConnection.set("scm:git:https://gitbox.apache.org/repos/asf/jmeter.git")
|
||||
url.set("https://github.com/apache/jmeter")
|
||||
tag.set("HEAD")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
api(project(":src:core"))
|
||||
testCompile(project(":src:core", "testClasses"))
|
||||
|
||||
api("org.apache-extras.beanshell:bsh:2.0b6") {
|
||||
because("""
|
||||
BeanShell is not required for JMeter, however it is commonly used in the jmx scripts.
|
||||
New scripts should refrain from using BeanShell though and migrate to Groovy or other
|
||||
faster engines
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
api("javax.mail:mail:1.5.0-b01") {
|
||||
exclude("javax.activation", "activation")
|
||||
}
|
||||
// There's no javax.activation:activation:1.2.0, so we use com.sun...
|
||||
runtimeOnly("com.sun.activation:javax.activation")
|
||||
// This is an API-only jar. javax.activation is present in Java 8,
|
||||
// however it is not there in Java 9
|
||||
compileOnly("javax.activation:javax.activation-api")
|
||||
|
||||
implementation("com.github.ben-manes.caffeine:caffeine")
|
||||
implementation("jcharts:jcharts")
|
||||
implementation("oro:oro")
|
||||
implementation("net.minidev:json-smart")
|
||||
implementation("net.minidev:accessors-smart")
|
||||
implementation("org.apache.commons:commons-pool2")
|
||||
implementation("commons-codec:commons-codec")
|
||||
implementation("org.jodd:jodd-log")
|
||||
implementation("org.jodd:jodd-lagarto")
|
||||
implementation("com.jayway.jsonpath:json-path")
|
||||
implementation("org.apache.httpcomponents:httpasyncclient")
|
||||
implementation("org.apache.httpcomponents:httpcore-nio")
|
||||
implementation("org.jsoup:jsoup")
|
||||
implementation("org.apache.commons:commons-lang3")
|
||||
implementation("net.sf.jtidy:jtidy")
|
||||
implementation("commons-collections:commons-collections")
|
||||
implementation("org.apache.commons:commons-math3")
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
implementation("org.apache.commons:commons-text") {
|
||||
because("StringEscapeUtils")
|
||||
}
|
||||
// we use bcmail for compilation only, and bcmail is not shipped in the release
|
||||
compileOnly("org.bouncycastle:bcmail-jdk15on")
|
||||
compileOnly("org.bouncycastle:bcpkix-jdk15on")
|
||||
compileOnly("org.bouncycastle:bcprov-jdk15on")
|
||||
// Certain tests use bouncycastle, so it is added to test classpath
|
||||
testRuntimeOnly("org.bouncycastle:bcmail-jdk15on")
|
||||
testRuntimeOnly("org.bouncycastle:bcpkix-jdk15on")
|
||||
testRuntimeOnly("org.bouncycastle:bcprov-jdk15on")
|
||||
}
|
||||
|
||||
fun String?.toBool(nullAs: Boolean, blankAs: Boolean, default: Boolean) =
|
||||
when {
|
||||
this == null -> nullAs
|
||||
isBlank() -> blankAs
|
||||
default -> !equals("false", ignoreCase = true)
|
||||
else -> equals("true", ignoreCase = true)
|
||||
}
|
||||
|
||||
if (!(project.findProperty("enableJavaFx") as? String)
|
||||
.toBool(nullAs = false, blankAs = true, default = false)
|
||||
) {
|
||||
// JavaFX is not present in Maven Central, so exclude the file unless explicitly asked by
|
||||
// -PenableJavaFx
|
||||
logger.debug("RenderInBrowser is excluded from compilation. If you want to compile it, add -PenableJavaFx")
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
exclude("org/apache/jmeter/visualizers/RenderInBrowser.java")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* 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.vlsi.gradle.crlf.CrLfSpec
|
||||
import com.github.vlsi.gradle.crlf.LineEndings
|
||||
import com.github.vlsi.gradle.release.dsl.dependencyLicenses
|
||||
import com.github.vlsi.gradle.release.dsl.licensesCopySpec
|
||||
|
||||
plugins {
|
||||
id("com.github.vlsi.crlf")
|
||||
}
|
||||
|
||||
// Project :src:license-* might not be evaluated yet, so "renderLicenseFor..." task
|
||||
// might not exist yet
|
||||
// So we add "evaluationDependsOn"
|
||||
evaluationDependsOn(":src:licenses")
|
||||
|
||||
// This workarounds https://github.com/gradle/gradle/issues/10008
|
||||
// Gradle does not support CopySpec#with(Provider<CopySpec>) yet :(
|
||||
fun licenses(licenseType: String) =
|
||||
project(":src:licenses").tasks.named("renderLicenseFor${licenseType.capitalize()}")
|
||||
.let { task ->
|
||||
licensesCopySpec(task) {
|
||||
from(task)
|
||||
from("$rootDir/NOTICE")
|
||||
}
|
||||
}
|
||||
|
||||
val sourceLicense = licenses("source")
|
||||
|
||||
tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
|
||||
into("META-INF") {
|
||||
// License file should include licenses for bundled third-party components
|
||||
CrLfSpec(LineEndings.LF).run {
|
||||
// Note: license content is taken from "/build/..", so gitignore should not be used
|
||||
// Note: this is a "license + third-party licenses", not just Apache-2.0
|
||||
dependencyLicenses(sourceLicense)
|
||||
}
|
||||
}
|
||||
into("run") {
|
||||
filteringCharset = "UTF-8"
|
||||
CrLfSpec(LineEndings.LF).run {
|
||||
textFrom("$rootDir/bin") {
|
||||
text("*.bshrc")
|
||||
text("*.groovy")
|
||||
text("*.parameters")
|
||||
text("*.properties")
|
||||
text("*.groovy")
|
||||
text("jaas.conf")
|
||||
text("krb5.conf")
|
||||
text("log4j2.xml")
|
||||
binary("proxyserver.jks")
|
||||
text("users.dtd")
|
||||
text("users.xml")
|
||||
}
|
||||
into("templates") {
|
||||
textFrom("templates/templates.dtd")
|
||||
}
|
||||
into("report-template") {
|
||||
textFrom("$rootDir/bin/report-template") {
|
||||
text("**/*") // all except binary
|
||||
binary("**/*.png", "**/*.ttf", "**/*.woff", "**/*.woff2", "**/*.eot", "**/*.otf")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,119 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id("com.github.vlsi.ide")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api(project(":src:launcher"))
|
||||
api(project(":src:jorphan"))
|
||||
testCompile(project(":src:jorphan", "testClasses"))
|
||||
|
||||
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("oro:oro") {
|
||||
because("Perl5Matcher org.apache.jmeter.util.JMeterUtils.getMatcher()")
|
||||
}
|
||||
api("xalan:xalan") {
|
||||
because("PropertiesBasedPrefixResolver extends PrefixResolverDefault")
|
||||
}
|
||||
// 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-all") {
|
||||
because("Groovy is a default JSR232 engine")
|
||||
}
|
||||
|
||||
implementation("org.slf4j:jcl-over-slf4j")
|
||||
implementation("commons-codec:commons-codec") {
|
||||
because("DigestUtils")
|
||||
}
|
||||
implementation("commons-collections:commons-collections")
|
||||
implementation("com.github.ben-manes.caffeine:caffeine")
|
||||
implementation("com.fasterxml.jackson.core:jackson-annotations")
|
||||
implementation("com.fasterxml.jackson.core:jackson-core")
|
||||
implementation("com.fasterxml.jackson.core:jackson-databind")
|
||||
implementation("org.freemarker:freemarker")
|
||||
implementation("org.mozilla:rhino")
|
||||
implementation("org.apache.xmlgraphics:xmlgraphics-commons")
|
||||
implementation("org.apache.commons:commons-text")
|
||||
implementation("org.apache.commons:commons-math3") {
|
||||
because("Mean, DescriptiveStatistics")
|
||||
}
|
||||
// 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.jodd:jodd-core")
|
||||
implementation("org.jodd:jodd-props")
|
||||
// TODO: JMeter bundles Xerces, however the reason is unknown
|
||||
runtimeOnly("xerces:xercesImpl")
|
||||
runtimeOnly("xml-apis:xml-apis")
|
||||
|
||||
testImplementation("commons-net:commons-net")
|
||||
testRuntimeOnly("org.spockframework:spock-core")
|
||||
}
|
||||
|
||||
val generatedVersionDir = File(buildDir, "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)
|
||||
}
|
||||
|
||||
ide {
|
||||
generatedJavaSources(versionClass.get(), generatedVersionDir)
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Created on 02-Oct-2003
|
||||
*
|
||||
* This class defines the JMeter version only (moved from JMeterUtils)
|
||||
*
|
||||
* Version changes no longer change the JMeterUtils source file
|
||||
* - easier to spot when JMeterUtils really changes
|
||||
* - much smaller to download when the version changes
|
||||
*
|
||||
*/
|
||||
package org.apache.jmeter.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
/**
|
||||
* Utility class to define the JMeter Version string
|
||||
*
|
||||
*/
|
||||
public final class JMeterVersion {
|
||||
|
||||
/*
|
||||
*
|
||||
* The string is made private so the compiler can't propagate it into
|
||||
* JMeterUtils. (Java compilers may make copies of final variables)
|
||||
*
|
||||
* This ensures that JMeterUtils always gets the correct
|
||||
* version, even if JMeterUtils is not re-compiled during the build.
|
||||
*/
|
||||
private static final String VERSION = "5.2-SNAPSHOT";
|
||||
|
||||
private static final String IMPLEMENTATION;
|
||||
|
||||
// Same applies to copyright string
|
||||
private static final String COPYRIGHT = "Copyright (c) 1998-2019 The Apache Software Foundation";
|
||||
|
||||
static {
|
||||
String impl=null;
|
||||
final Class<?> myClass = JMeterVersion.class;
|
||||
// This assumes that the JVM treats a class file as a resource (not all do).
|
||||
URL resource = myClass.getResource("JMeterVersion.class");
|
||||
// For example:
|
||||
// jar:file:/JMeter/lib/ext/ApacheJMeter_core.jar!/org/apache/jmeter/util/JMeterVersion.class
|
||||
// or if using an IDE
|
||||
// file:/workspaces/JMeter/build/core/org/apache/jmeter/util/JMeterVersion.class
|
||||
|
||||
|
||||
try {
|
||||
// Convert to URL for manifest
|
||||
String url = resource.toString().replaceFirst("!/.+", "!/META-INF/MANIFEST.MF");
|
||||
resource=new URL(url);
|
||||
InputStream inputStream = resource.openStream();
|
||||
if (inputStream != null) {
|
||||
Properties props = new Properties();
|
||||
try {
|
||||
props.load(inputStream);
|
||||
impl = props.getProperty("Implementation-Version");
|
||||
} finally {
|
||||
IOUtils.closeQuietly(inputStream);
|
||||
}
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
// Ignored
|
||||
}
|
||||
if (impl == null) {
|
||||
IMPLEMENTATION = VERSION; // default to plain version
|
||||
} else {
|
||||
IMPLEMENTATION = impl;
|
||||
}
|
||||
}
|
||||
|
||||
private JMeterVersion() // Not instantiable
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
static String getVERSION() {
|
||||
return IMPLEMENTATION;
|
||||
}
|
||||
|
||||
public static String getCopyRight() {
|
||||
return COPYRIGHT;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.jmeter.util;
|
||||
|
||||
/**
|
||||
* Utility class to define the JMeter Version string.
|
||||
* Note: @...@-like macroses in this file should be replaced by a Gradle task.
|
||||
*/
|
||||
public final class JMeterVersion {
|
||||
private JMeterVersion() {
|
||||
}
|
||||
|
||||
static String getVERSION() {
|
||||
return "@VERSION@";
|
||||
}
|
||||
|
||||
public static String getCopyRight() {
|
||||
return "Copyright (c) 1998-@YEAR@ The Apache Software Foundation";
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ package org.apache.jmeter.testbeans.gui;
|
|||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.apache.jmeter.util.JMeterUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestFieldStringEditor {
|
||||
|
@ -28,6 +29,7 @@ public class TestFieldStringEditor {
|
|||
}
|
||||
|
||||
private void testSetGetAsText(ComboStringEditor e, String text) throws Exception {
|
||||
System.out.println("JMeterUtils.getJMeterVe rsion() = " + JMeterUtils.getJMeterVersion());
|
||||
e.setAsText(text);
|
||||
assertEquals(text, e.getAsText());
|
||||
}
|
||||
|
|
|
@ -0,0 +1,221 @@
|
|||
/*
|
||||
* 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 org.apache.jmeter.buildtools.batchtest.BatchTest
|
||||
import org.apache.jmeter.buildtools.batchtest.BatchTestServer
|
||||
|
||||
plugins {
|
||||
jmeterbuild.batchtest
|
||||
}
|
||||
|
||||
val extraTestDependencies by configurations.creating
|
||||
val loggingClasspath by configurations.creating
|
||||
|
||||
dependencies {
|
||||
api(project(":src:dist"))
|
||||
testCompile(project(":src:dist", "testClasses"))
|
||||
testImplementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
testImplementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
testImplementation("com.fasterxml.jackson.core:jackson-databind") {
|
||||
because("It is used in ReportGeneratorSpec and HtmlReportGeneratorSpec")
|
||||
}
|
||||
|
||||
extraTestDependencies(platform(project(":src:bom")))
|
||||
extraTestDependencies("org.hsqldb:hsqldb")
|
||||
extraTestDependencies("org.apache.mina:mina-core")
|
||||
extraTestDependencies("org.apache.ftpserver:ftplet-api")
|
||||
extraTestDependencies("org.apache.ftpserver:ftpserver-core")
|
||||
// activemq-all should not be used as it provides secondary slf4j binding
|
||||
extraTestDependencies("org.apache.activemq:activemq-broker")
|
||||
extraTestDependencies("org.apache.activemq:activemq-client")
|
||||
extraTestDependencies("org.apache.activemq:activemq-spring")
|
||||
extraTestDependencies("org.springframework:spring-context")
|
||||
extraTestDependencies("org.springframework:spring-beans")
|
||||
// extraTestDependencies("com.fasterxml.jackson.core:jackson-annotations")
|
||||
extraTestDependencies("org.apache.commons:commons-pool2")
|
||||
|
||||
// Slf4j is used by activemq and mina, so slf4j binding must be placed on the top-level
|
||||
// classpath since extraTestDependencies is added to the classpath
|
||||
// This is not required for regular ./bin/jmeter because activemq/mina is not on the top-level
|
||||
// classpath but all the jars are loaded by a custom classloader which is instantiated by NewDriver
|
||||
// TODO: implement "extra classpath folder" in DynamicClassLoader
|
||||
loggingClasspath(platform(project(":src:bom")))
|
||||
loggingClasspath("org.slf4j:jcl-over-slf4j")
|
||||
loggingClasspath("org.apache.logging.log4j:log4j-api")
|
||||
loggingClasspath("org.apache.logging.log4j:log4j-core")
|
||||
loggingClasspath("org.apache.logging.log4j:log4j-1.2-api")
|
||||
loggingClasspath("org.apache.logging.log4j:log4j-slf4j-impl")
|
||||
}
|
||||
|
||||
val libOpt = copySpec {
|
||||
// Extra dependencies for testing purposes, to be placed in lib/opt
|
||||
}
|
||||
|
||||
val populateLibs by tasks.registering {
|
||||
dependsOn(extraTestDependencies)
|
||||
doLast {
|
||||
val deps = extraTestDependencies.resolvedConfiguration.resolvedArtifacts
|
||||
with(libOpt) {
|
||||
fileMode = "644".toInt(8)
|
||||
dirMode = "755".toInt(8)
|
||||
from(deps.map { it.file })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add dependency from libOpt to populateLibs
|
||||
libOpt.from(populateLibs)
|
||||
|
||||
// For now lib/opt is hard-coded in some of the JMX files
|
||||
val extraTestJarsDir = rootProject.layout.projectDirectory.dir("lib").dir("opt")
|
||||
|
||||
val createDist by project(":src:dist").tasks.existing(Task::class)
|
||||
|
||||
val copyExtraTestLibs by tasks.registering(Sync::class) {
|
||||
dependsOn(createDist)
|
||||
|
||||
into(extraTestJarsDir)
|
||||
with(libOpt)
|
||||
preserve {
|
||||
include("README.txt")
|
||||
}
|
||||
}
|
||||
|
||||
val detailBatchTasks = findProperty("allBatch") is String
|
||||
|
||||
val batchTests by tasks.registering() {
|
||||
group = LifecycleBasePlugin.VERIFICATION_GROUP
|
||||
description = "Executes all the batch tests" +
|
||||
if (detailBatchTasks) "" else " (add -PallBatch to see individual batch tasks)"
|
||||
}
|
||||
|
||||
val jacoco = project.extensions.findByType<JacocoPluginExtension>()
|
||||
|
||||
inline fun <reified T : BatchTest> createBatchTask(
|
||||
name: String,
|
||||
suffix: String = "",
|
||||
noinline action: (T.() -> Unit)? = null
|
||||
) =
|
||||
tasks.register("batch" + (if (T::class == BatchTestServer::class) "Server" else "") +
|
||||
name.capitalize() + suffix.capitalize(), T::class) {
|
||||
group = when {
|
||||
detailBatchTasks -> LifecycleBasePlugin.VERIFICATION_GROUP
|
||||
else -> ""
|
||||
}
|
||||
testName.set(name)
|
||||
dependsOn(copyExtraTestLibs)
|
||||
|
||||
// Log4j must be on the classpath because NewDriver initializes logging
|
||||
classpath(loggingClasspath)
|
||||
classpath(extraTestJarsDir.asFileTree.matching { include("*.jar") })
|
||||
|
||||
jacoco?.applyTo(this)
|
||||
|
||||
if (action != null) {
|
||||
action()
|
||||
}
|
||||
}.also {
|
||||
batchTests.configure {
|
||||
dependsOn(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun createBatchTestTask(name: String, suffix: String = "", action: (BatchTest.() -> Unit)? = null) =
|
||||
createBatchTask(name, suffix, action)
|
||||
|
||||
fun createBatchServerTestTask(name: String, suffix: String = "", action: (BatchTestServer.() -> Unit)? = null) =
|
||||
createBatchTask(name, suffix, action)
|
||||
|
||||
arrayOf(
|
||||
"BatchTestLocal",
|
||||
"Bug52310",
|
||||
"Bug62239", "Bug52968", "Bug50898",
|
||||
"Bug56243",
|
||||
// StackOverflowError with ModuleController in Non-GUI mode if its name is the same as the target node
|
||||
"Bug55375",
|
||||
"Bug56811",
|
||||
"TEST_HTTPS",
|
||||
"TestCookieManager",
|
||||
"JMS_TESTS",
|
||||
"OS_TESTS",
|
||||
"Bug60607",
|
||||
"TestKeepAlive",
|
||||
"ResponseDecompression",
|
||||
"TestSchedulerWithTimer",
|
||||
"Http4ImplPreemptiveBasicAuth",
|
||||
"Http4ImplDigestAuth",
|
||||
"BUG_62847",
|
||||
"HTMLParserTestFile_2",
|
||||
"TestResultStatusAction",
|
||||
"TestRedirectionPolicies"
|
||||
).map { createBatchTestTask(it) }
|
||||
|
||||
// Certain errors are expected in those tests as they examine failure cases as well
|
||||
arrayOf(
|
||||
"TCP_TESTS",
|
||||
"FTP_TESTS",
|
||||
"JDBC_TESTS"
|
||||
).map {
|
||||
createBatchTestTask(it) {
|
||||
ignoreErrorLogs.set(true)
|
||||
}
|
||||
}
|
||||
|
||||
createBatchTestTask("Bug54685") {
|
||||
jmeterArgument("sample_variables", "REFERENCE,JSESSIONID")
|
||||
}
|
||||
|
||||
createBatchTestTask("Http4ImplPreemptiveBasicAuth", "Java") {
|
||||
jmeterArgument("jmeter.httpsampler", "Java")
|
||||
}
|
||||
|
||||
for (impl in arrayOf("Java", "HttpClient4")) {
|
||||
createBatchTestTask("SlowCharsFeature", impl) {
|
||||
csvFile.set(outputDirectory.file("${testName.get()}_$impl.csv"))
|
||||
xmlFile.set(outputDirectory.file("${testName.get()}_$impl.xml"))
|
||||
jmeterArgument("jmeter.httpsampler", impl)
|
||||
}
|
||||
|
||||
createBatchTestTask("TestHeaderManager", impl) {
|
||||
jmeterArgument("jmeter.httpsampler", impl)
|
||||
}
|
||||
|
||||
createBatchTestTask("TEST_HTTP", impl) {
|
||||
jmeterArgument("jmeter.httpsampler", impl)
|
||||
csvFile.set(outputDirectory.file("${testName.get()}_$impl.csv"))
|
||||
xmlFile.set(outputDirectory.file("${testName.get()}_$impl.xml"))
|
||||
if (impl == "Java") {
|
||||
ignoreErrorLogs.set(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Note: original build.xml seem to use Bug54685 test, however in fact batchtestserver target
|
||||
// just ignored the given filename
|
||||
createBatchServerTestTask("BatchTestLocal")
|
||||
|
||||
tasks.named(JavaPlugin.TEST_TASK_NAME).configure {
|
||||
// Test examine JAR contents in /lib/..., so we need to copy jars to the projectRoot/lib/
|
||||
dependsOn(createDist)
|
||||
// This is a convenience, so batch tests are executed as a part of default "test" task
|
||||
dependsOn(batchTests)
|
||||
}
|
|
@ -0,0 +1,484 @@
|
|||
/*
|
||||
* 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.vlsi.gradle.release.ReleaseExtension
|
||||
import com.github.vlsi.gradle.crlf.CrLfSpec
|
||||
import com.github.vlsi.gradle.crlf.LineEndings
|
||||
import com.github.vlsi.gradle.release.dsl.*
|
||||
import com.github.vlsi.gradle.git.FindGitAttributes
|
||||
import com.github.vlsi.gradle.git.dsl.*
|
||||
import org.gradle.api.internal.TaskOutputsInternal
|
||||
|
||||
plugins {
|
||||
id("com.github.vlsi.crlf")
|
||||
id("com.github.vlsi.stage-vote-release")
|
||||
}
|
||||
|
||||
var jars = arrayOf(
|
||||
":src:bshclient",
|
||||
":src:launcher",
|
||||
":src:components",
|
||||
":src:core",
|
||||
//":src:examples",
|
||||
":src:functions",
|
||||
":src:jorphan",
|
||||
":src:protocol:ftp",
|
||||
":src:protocol:http",
|
||||
":src:protocol:java",
|
||||
":src:protocol:jdbc",
|
||||
":src:protocol:jms",
|
||||
":src:protocol:junit",
|
||||
":src:protocol:ldap",
|
||||
":src:protocol:mail",
|
||||
":src:protocol:mongodb",
|
||||
":src:protocol:native",
|
||||
":src:protocol:tcp")
|
||||
|
||||
val buildDocs by configurations.creating
|
||||
|
||||
// Note: you can inspect final classpath (list of jars in the binary distribution) via
|
||||
// gw dependencies --configuration runtimeClasspath
|
||||
dependencies {
|
||||
for (p in jars) {
|
||||
api(project(p))
|
||||
testCompile(project(p, "testClasses"))
|
||||
}
|
||||
runtimeOnly("com.github.bulenkov.darcula:darcula") {
|
||||
because("""
|
||||
It just looks good, however Darcula is not used explicitly,
|
||||
so the dependency is added for distribution only""".trimIndent())
|
||||
}
|
||||
|
||||
buildDocs(platform(project(":src:bom")))
|
||||
buildDocs("org.apache.velocity:velocity")
|
||||
buildDocs("commons-lang:commons-lang")
|
||||
buildDocs("commons-collections:commons-collections")
|
||||
buildDocs("org.jdom:jdom")
|
||||
}
|
||||
|
||||
tasks.named(BasePlugin.CLEAN_TASK_NAME).configure {
|
||||
doLast {
|
||||
// createDist can't yet remove outdated jars (e.g. when dependency is updated to a newer version)
|
||||
// so we enhance "clean" task to kill the jars
|
||||
delete(fileTree("$rootDir/bin") { include("ApacheJMeter.jar") })
|
||||
delete(fileTree("$rootDir/lib") { include("*.jar") })
|
||||
delete(fileTree("$rootDir/lib/ext") { include("ApacheJMeter*.jar") })
|
||||
}
|
||||
}
|
||||
|
||||
// Libs are populated dynamically since we can't get the full set of dependencies
|
||||
// before we execute all the build scripts
|
||||
val libs = copySpec {
|
||||
// Third-party dependencies + jorphan.jar
|
||||
}
|
||||
|
||||
val libsExt = copySpec {
|
||||
// Apache JMeter jars
|
||||
}
|
||||
|
||||
val binLibs = copySpec {
|
||||
// ApacheJMeter.jar launcher
|
||||
}
|
||||
|
||||
// Splits jar dependencies to "lib", "lib/ext", and "bin" folders
|
||||
val populateLibs by tasks.registering {
|
||||
dependsOn(configurations.runtimeClasspath)
|
||||
doLast {
|
||||
val deps = configurations.runtimeClasspath.get().resolvedConfiguration.resolvedArtifacts
|
||||
// This ensures project exists, if project is renamed, names should be corrected here as wells
|
||||
val launcherProject = project(":src:launcher").path
|
||||
val bshclientProject = project(":src:bshclient").path
|
||||
val jorphanProject = project(":src:jorphan").path
|
||||
listOf(libs, libsExt, binLibs).forEach {
|
||||
it.fileMode = "644".toInt(8)
|
||||
it.dirMode = "755".toInt(8)
|
||||
}
|
||||
for (dep in deps) {
|
||||
val compId = dep.id.componentIdentifier
|
||||
// The path is "relative" to rootDir/lib
|
||||
when (compId) {
|
||||
is ProjectComponentIdentifier ->
|
||||
(when (compId.projectPath) {
|
||||
launcherProject -> binLibs
|
||||
jorphanProject, bshclientProject -> libs
|
||||
else -> libsExt
|
||||
}).from(dep.file) {
|
||||
// Technically speaking, current JMeter artifacts do not have version in the name
|
||||
// however rename is here just in case
|
||||
rename { dep.name + "." + dep.extension }
|
||||
}
|
||||
else -> libs.from(dep.file)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This adds dependency on "populateLibs" task
|
||||
// This makes uses of these copySpecs transparently depend on the builder task
|
||||
libs.from(populateLibs)
|
||||
libsExt.from(populateLibs)
|
||||
binLibs.from(populateLibs)
|
||||
|
||||
val copyLibs by tasks.registering(Copy::class) {
|
||||
val junitSampleJar = project(":src:protocol:junit-sample").tasks.named(JavaPlugin.JAR_TASK_NAME)
|
||||
dependsOn(junitSampleJar)
|
||||
val generatorJar = project(":src:generator").tasks.named(JavaPlugin.JAR_TASK_NAME)
|
||||
// Can't use $rootDir since Gradle somehow reports .gradle/caches/ as "always modified"
|
||||
rootSpec.into("$rootDir/lib")
|
||||
with(libs)
|
||||
into("ext") {
|
||||
with(libsExt)
|
||||
from(generatorJar)
|
||||
}
|
||||
into("junit") {
|
||||
from(junitSampleJar) {
|
||||
rename { "test.jar" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val copyBinLibs by tasks.registering(Copy::class) {
|
||||
// Can't use $rootDir since Gradle somehow reports .gradle/caches/ as "always modified"
|
||||
rootSpec.into("$rootDir/bin")
|
||||
with(binLibs)
|
||||
}
|
||||
|
||||
val createDist by tasks.registering {
|
||||
group = LifecycleBasePlugin.BUILD_GROUP
|
||||
description = "Copies JMeter jars and dependencies to projectRoot/lib/ folder"
|
||||
dependsOn(copyLibs)
|
||||
dependsOn(copyBinLibs)
|
||||
}
|
||||
|
||||
// This task scans the project for gitignore / gitattributes, and that is reused for building
|
||||
// source/binary artifacts with the appropriate eol/executable file flags
|
||||
val gitProps by rootProject.tasks.existing(FindGitAttributes::class)
|
||||
|
||||
// Project :src:license-* might not be evaluated yet, so "renderLicenseFor..." task
|
||||
// might not exist yet
|
||||
// So we add "evaluationDependsOn"
|
||||
evaluationDependsOn(":src:licenses")
|
||||
|
||||
// This workarounds https://github.com/gradle/gradle/issues/10008
|
||||
// Gradle does not support CopySpec#with(Provider<CopySpec>) yet :(
|
||||
fun licenses(licenseType: String) =
|
||||
licensesCopySpec(
|
||||
project(":src:licenses")
|
||||
.tasks.named("renderLicenseFor${licenseType.capitalize()}"))
|
||||
|
||||
val sourceLicense = licenses("source")
|
||||
val binaryLicense = licenses("binary")
|
||||
|
||||
fun createAnakiaTask(taskName: String,
|
||||
baseDir: String, extension: String = ".html", style: String,
|
||||
velocityProperties: String, projectFile: String, excludes: Array<String>,
|
||||
includes: Array<String>): TaskProvider<Task> {
|
||||
val outputDir = "$buildDir/docs/$taskName"
|
||||
|
||||
val prepareProps = tasks.register("prepareProperties$taskName") {
|
||||
// AnakiaTask can't use relative paths, and it forbids ../, so we create a dedicated
|
||||
// velocity.properties file that contains absolute path
|
||||
inputs.file(velocityProperties)
|
||||
val outputProps = "$buildDir/docProps/$taskName/velocity.properties"
|
||||
outputs.file(outputProps)
|
||||
doLast {
|
||||
val p = `java.util`.Properties()
|
||||
file(velocityProperties).reader().use {
|
||||
p.load(it)
|
||||
}
|
||||
p["resource.loader"] = "file"
|
||||
p["file.resource.loader.path"] = baseDir
|
||||
p["file.resource.loader.class"] = "org.apache.velocity.runtime.resource.loader.FileResourceLoader"
|
||||
file(outputProps).apply {
|
||||
parentFile.run { isDirectory || mkdirs() } || throw IllegalStateException("Unable to create directory $parentFile")
|
||||
|
||||
writer().use {
|
||||
p.store(it, "Auto-generated from $velocityProperties to pass absolute path to Velocity")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tasks.register(taskName) {
|
||||
inputs.file("$baseDir/$style")
|
||||
inputs.file("$baseDir/$projectFile")
|
||||
inputs.files(fileTree(baseDir) {
|
||||
include(*includes)
|
||||
exclude(*excludes)
|
||||
})
|
||||
inputs.properties["extension"] = extension
|
||||
outputs.dir(outputDir)
|
||||
dependsOn(prepareProps)
|
||||
|
||||
doLast {
|
||||
ant.withGroovyBuilder {
|
||||
"taskdef"("name" to "anakia",
|
||||
"classname" to "org.apache.velocity.anakia.AnakiaTask",
|
||||
"classpath" to buildDocs.asPath)
|
||||
"anakia"("basedir" to baseDir,
|
||||
"destdir" to outputDir,
|
||||
"extension" to extension,
|
||||
"style" to style,
|
||||
"projectFile" to projectFile,
|
||||
"excludes" to excludes.joinToString(" "),
|
||||
"includes" to includes.joinToString(" "),
|
||||
"lastModifiedCheck" to "true",
|
||||
"velocityPropertiesFile" to prepareProps.get().outputs.files.singleFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val xdocs = "$rootDir/xdocs"
|
||||
|
||||
fun CopySpec.docCssAndImages() {
|
||||
from(xdocs) {
|
||||
include("css/**")
|
||||
include("images/**")
|
||||
}
|
||||
}
|
||||
|
||||
fun CopySpec.manuals() {
|
||||
from(xdocs) {
|
||||
include("demos/**")
|
||||
include("extending/jmeter_tutorial.pdf")
|
||||
include("usermanual/**/*.pdf")
|
||||
}
|
||||
}
|
||||
|
||||
fun CopySpec.printableDocumentation() {
|
||||
into("docs") {
|
||||
docCssAndImages()
|
||||
}
|
||||
into("printable_docs") {
|
||||
from(buildPrintableDoc)
|
||||
manuals()
|
||||
}
|
||||
}
|
||||
|
||||
val buildPrintableDoc = createAnakiaTask("buildPrintableDoc", baseDir = xdocs,
|
||||
style = "stylesheets/site_printable.vsl",
|
||||
velocityProperties = "$xdocs/velocity.properties",
|
||||
projectFile = "stylesheets/printable_project.xml",
|
||||
excludes = arrayOf("**/stylesheets/**", "extending.xml", "extending/*.xml"),
|
||||
includes = arrayOf("**/*.xml"))
|
||||
|
||||
val previewPrintableDocs by tasks.registering(Copy::class) {
|
||||
group = JavaBasePlugin.DOCUMENTATION_GROUP
|
||||
description = "Creates preview of a printable documentation to build/docs/printable_preview"
|
||||
into("$buildDir/docs/printable_preview")
|
||||
CrLfSpec().run {
|
||||
gitattributes(gitProps)
|
||||
printableDocumentation()
|
||||
}
|
||||
}
|
||||
|
||||
val lastEditYear: String by rootProject.extra
|
||||
|
||||
fun xslt(subdir: String,
|
||||
outputDir: String,
|
||||
includes: Array<String> = arrayOf("*.xml"),
|
||||
excludes: Array<String> = arrayOf("extending.xml")) {
|
||||
|
||||
val relativePath = if (subdir.isEmpty()) "." else ".."
|
||||
ant.withGroovyBuilder {
|
||||
"xslt"("style" to "$xdocs/stylesheets/website-style.xsl",
|
||||
"basedir" to "$xdocs/$subdir",
|
||||
"destdir" to "$outputDir/$subdir",
|
||||
"excludes" to excludes.joinToString(" "),
|
||||
"includes" to includes.joinToString(" ")
|
||||
) {
|
||||
"param"("name" to "relative-path", "expression" to relativePath)
|
||||
"param"("name" to "subdir", "expression" to subdir)
|
||||
"param"("name" to "year", "expression" to lastEditYear)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val processSiteXslt by tasks.registering {
|
||||
val outputDir = "$buildDir/siteXslt"
|
||||
inputs.files(xdocs)
|
||||
inputs.properties["year"] = lastEditYear
|
||||
outputs.dir(outputDir)
|
||||
|
||||
doLast {
|
||||
for(f in (outputs as TaskOutputsInternal).previousOutputFiles) {
|
||||
f.delete()
|
||||
}
|
||||
for(i in arrayOf("", "usermanual", "localising")) {
|
||||
xslt(i, outputDir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun CopySpec.siteLayout() {
|
||||
// TODO: generate doap_JMeter.rdf
|
||||
from("$xdocs/download_jmeter.cgi")
|
||||
into("api") {
|
||||
javadocs()
|
||||
}
|
||||
from(processSiteXslt)
|
||||
docCssAndImages()
|
||||
manuals()
|
||||
}
|
||||
|
||||
val previewSite by tasks.registering(Copy::class) {
|
||||
group = JavaBasePlugin.DOCUMENTATION_GROUP
|
||||
description = "Creates preview of a site to build/docs/site"
|
||||
into("$buildDir/site")
|
||||
CrLfSpec().run {
|
||||
gitattributes(gitProps)
|
||||
siteLayout()
|
||||
}
|
||||
}
|
||||
|
||||
val distributionGroup = "distribution"
|
||||
val baseFolder = "apache-jmeter-${rootProject.version}"
|
||||
|
||||
fun CopySpec.javadocs() = from(javadocAggregate)
|
||||
|
||||
fun CopySpec.excludeLicenseFromSourceRelease() {
|
||||
// Source release has "/licenses" folder with licenses for third-party dependencies
|
||||
// It is populated by "dependencyLicenses" above,
|
||||
// so we ignore the folder when building source releases
|
||||
exclude("licenses/**")
|
||||
exclude("LICENSE")
|
||||
}
|
||||
|
||||
fun CrLfSpec.binaryLayout() = copySpec {
|
||||
gitattributes(gitProps)
|
||||
into(baseFolder) {
|
||||
// Note: license content is taken from "/build/..", so gitignore should not be used
|
||||
// Note: this is a "license + third-party licenses", not just Apache-2.0
|
||||
dependencyLicenses(binaryLicense)
|
||||
from(rootDir) {
|
||||
gitignore(gitProps)
|
||||
exclude("bin/testfiles")
|
||||
include("bin/**")
|
||||
include("lib/ext/**")
|
||||
include("lib/junit/**")
|
||||
include("extras/**")
|
||||
include("README.md")
|
||||
excludeLicenseFromSourceRelease()
|
||||
}
|
||||
into("bin") {
|
||||
with(binLibs)
|
||||
}
|
||||
into("lib") {
|
||||
with(libs)
|
||||
into("ext") {
|
||||
with(libsExt)
|
||||
}
|
||||
}
|
||||
printableDocumentation()
|
||||
into("docs/api") {
|
||||
javadocs()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun CrLfSpec.sourceLayout() = copySpec {
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
gitattributes(gitProps)
|
||||
into(baseFolder) {
|
||||
// Note: license content is taken from "/build/..", so gitignore should not be used
|
||||
// Note: this is a "license + third-party licenses", not just Apache-2.0
|
||||
dependencyLicenses(sourceLicense)
|
||||
// Include all the source files
|
||||
from(rootDir) {
|
||||
gitignore(gitProps)
|
||||
excludeLicenseFromSourceRelease()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val javadocAggregate by tasks.registering(Javadoc::class) {
|
||||
group = JavaBasePlugin.DOCUMENTATION_GROUP
|
||||
description = "Generates aggregate javadoc for all the artifacts"
|
||||
|
||||
val sourceSets = jars.map { project(it).sourceSets.main }
|
||||
|
||||
classpath = files(sourceSets.map { set -> set.map { it.output + it.compileClasspath } })
|
||||
// Aggregate javadoc needs to include generated JMeterVersion class
|
||||
// So we use delay computation of source files
|
||||
setSource(sourceSets.map { set -> set.map { it.allJava } })
|
||||
setDestinationDir(file("$buildDir/docs/javadocAggregate"))
|
||||
}
|
||||
|
||||
val skipDist: Boolean by rootProject.extra
|
||||
|
||||
// Generates distZip, distTar, distZipSource, and distTarSource tasks
|
||||
// The archives and checksums are put to build/distributions
|
||||
for (type in listOf("binary", "source")) {
|
||||
if (skipDist) {
|
||||
break
|
||||
}
|
||||
for (archive in listOf(Zip::class, Tar::class)) {
|
||||
val taskName = "dist${archive.simpleName}${type.replace("binary", "").capitalize()}"
|
||||
val archiveTask = tasks.register(taskName, archive) {
|
||||
val eol = if (archive == Tar::class) LineEndings.LF else LineEndings.CRLF
|
||||
group = distributionGroup
|
||||
description = "Creates $type distribution with $eol line endings for text files"
|
||||
if (this is Tar) {
|
||||
compression = Compression.GZIP
|
||||
}
|
||||
// Gradle does not track "filters" as archive/copy task dependencies,
|
||||
// So a mere change of a file attribute won't trigger re-execution of a task
|
||||
// So we add a custom property to re-execute the task in case attributes change
|
||||
inputs.property("gitproperties", gitProps.map { it.props.attrs.toString() })
|
||||
|
||||
// Gradle defaults to the following pattern, and JMeter was using apache-jmeter-5.1_src.zip
|
||||
// [baseName]-[appendix]-[version]-[classifier].[extension]
|
||||
archiveBaseName.set("apache-jmeter-${rootProject.version}${if (type == "source") "_src" else ""}")
|
||||
CrLfSpec(eol).run {
|
||||
wa1191SetInputs(gitProps)
|
||||
with(if (type == "source") sourceLayout() else binaryLayout())
|
||||
}
|
||||
}
|
||||
rootProject.configure<ReleaseExtension> {
|
||||
archive(archiveTask)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.configure<ReleaseExtension> {
|
||||
previewSiteContents {
|
||||
CrLfSpec().run {
|
||||
into("site") {
|
||||
gitattributes(gitProps)
|
||||
siteLayout()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val runGui by tasks.registering() {
|
||||
group = "Development"
|
||||
description = "Builds and starts JMeter GUI"
|
||||
dependsOn(createDist)
|
||||
|
||||
doLast {
|
||||
javaexec {
|
||||
workingDir = File(project.rootDir, "bin")
|
||||
main = "org.apache.jmeter.NewDriver"
|
||||
classpath("$rootDir/bin/ApacheJMeter.jar")
|
||||
jvmArgs("-Xss256k")
|
||||
jvmArgs("-XX:MaxMetaspaceSize=256m")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
api(project(":src:components"))
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
api(project(":src:components"))
|
||||
testCompile(project(":src:components", "testClasses"))
|
||||
|
||||
implementation("org.mozilla:rhino")
|
||||
implementation("commons-codec:commons-codec")
|
||||
implementation("org.apache.commons:commons-jexl:2.1.1")
|
||||
implementation("org.apache.commons:commons-jexl3:3.1")
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
implementation("commons-io:commons-io") {
|
||||
because("FileUtils")
|
||||
}
|
||||
implementation("org.apache.commons:commons-text") {
|
||||
because("StringEscapeUtils")
|
||||
}
|
||||
implementation("com.github.ben-manes.caffeine:caffeine")
|
||||
implementation("oro:oro")
|
||||
testImplementation("org.hamcrest:hamcrest-core:1.3")
|
||||
testImplementation("org.exparity:hamcrest-date:2.0.4")
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
api(project(":src:components"))
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
api(platform(project(":src:bom")))
|
||||
|
||||
api("org.slf4j:slf4j-api")
|
||||
|
||||
implementation("commons-io:commons-io")
|
||||
implementation("commons-collections:commons-collections")
|
||||
implementation("org.apache.commons:commons-lang3")
|
||||
implementation("org.apache.commons:commons-math3")
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
val lastEditYear: String by rootProject.extra
|
||||
|
||||
tasks.withType<ProcessResources>().configureEach {
|
||||
val version = rootProject.version.toString()
|
||||
inputs.property("@VERSION@", version)
|
||||
inputs.property("@YEAR@", lastEditYear)
|
||||
filter { x: String ->
|
||||
x.replace("@VERSION@", version)
|
||||
.replace("@YEAR@", lastEditYear)
|
||||
}
|
||||
}
|
||||
|
||||
tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
|
||||
manifest {
|
||||
attributes["Main-Class"] = "org.apache.jmeter.NewDriver"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,178 @@
|
|||
/*
|
||||
* 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.vlsi.gradle.license.GatherLicenseTask
|
||||
import com.github.vlsi.gradle.license.api.*
|
||||
import com.github.vlsi.gradle.release.Apache2LicenseRenderer
|
||||
import com.github.vlsi.gradle.release.ArtifactType
|
||||
import com.github.vlsi.gradle.release.AsfLicenseCategory
|
||||
import com.github.vlsi.gradle.release.ExtraLicense
|
||||
|
||||
plugins {
|
||||
id("com.github.vlsi.stage-vote-release")
|
||||
}
|
||||
|
||||
val gatherSourceLicenses by tasks.registering(GatherLicenseTask::class) {
|
||||
addDependency(":bootstrap:3.3.4", SpdxLicense.MIT)
|
||||
addDependency(":bootstrap-social:4.8.0", SpdxLicense.MIT)
|
||||
addDependency(":datatables:1.10.9", SpdxLicense.MIT)
|
||||
addDependency(":datatables-plugins:1.0.1", SpdxLicense.MIT)
|
||||
addDependency(":datatables-responsive:1.0.5", SpdxLicense.MIT)
|
||||
addDependency(":flot:0.8.3", SpdxLicense.MIT)
|
||||
addDependency(":flot-axislabels:0.8.3", SpdxLicense.MIT)
|
||||
addDependency(":flot.tooltip:0.8.4", SpdxLicense.MIT)
|
||||
addDependency(":font-awesome-code:4.2.0", SpdxLicense.MIT)
|
||||
addDependency(":font-awesome-font:4.2.0", SpdxLicense.OFL_1_1)
|
||||
addDependency(":jquery:2.1.3", SpdxLicense.MIT)
|
||||
addDependency(":metisMenu:1.1.3", SpdxLicense.MIT)
|
||||
addDependency(":start-bootstrap-admin2:1.0.7", SpdxLicense.Apache_2_0)
|
||||
addDependency(":openiconlibrary:", SpdxLicense.CC_BY_SA_3_0)
|
||||
}
|
||||
|
||||
val gatherBinaryLicenses by tasks.registering(GatherLicenseTask::class) {
|
||||
configuration(project(":src:dist").configurations.runtimeClasspath)
|
||||
ignoreMissingLicenseFor.add(SpdxLicense.Apache_2_0.asExpression())
|
||||
defaultTextFor.add(SpdxLicense.MPL_2_0.asExpression())
|
||||
// There are three major cases here:
|
||||
// 1. License id needs to be overridden (e.g. "BSD style" -> BSD-3-Clause)
|
||||
// 2. Jar file misses LICENSE/NOTICE files, thus we need to specify local folder with relevant files (e.g. licenses/rsyntaxtextarea)
|
||||
// 3. 1 and 2
|
||||
|
||||
// Note we don't use Libs.* below for artifact references to avoid accidental updates
|
||||
// Whenever you update a dependency that has "license overrides", you need to double-check
|
||||
// if license conditions still apply.
|
||||
// For instance, if "dnsjava:dnsjava:2.1.8" was written here as `Libs.dec`, then
|
||||
// license override might be silently updated as `Libs` class is edited.
|
||||
// For that purpose, most of the below declarations have expectedLicense so the task
|
||||
// would fail in case actual license does not meet expectations.
|
||||
// That enables to have "version-independent" MIT license in licenses/slf4j-api, and
|
||||
// it would be copied provided the detected license for slf4j-api is MIT.
|
||||
|
||||
// Library is not present in Maven Central
|
||||
overrideLicense("com.github.bulenkov.darcula:darcula:e208efb96f70e4be9dc362fbb46f6e181ef501dd", SpdxLicense.Apache_2_0)
|
||||
|
||||
overrideLicense("dnsjava:dnsjava:2.1.8") {
|
||||
expectedLicense = SpdxLicense.BSD_2_Clause
|
||||
}
|
||||
|
||||
overrideLicense("com.fifesoft:rsyntaxtextarea:3.0.2") {
|
||||
// https://github.com/bobbylight/RSyntaxTextArea/issues/299
|
||||
expectedLicense = SimpleLicense(
|
||||
"Modified BSD License",
|
||||
uri("http://fifesoft.com/rsyntaxtextarea/RSyntaxTextArea.License.txt")
|
||||
)
|
||||
effectiveLicense = SpdxLicense.BSD_3_Clause
|
||||
}
|
||||
|
||||
overrideLicense("com.thoughtworks.xstream:xstream:1.4.11") {
|
||||
expectedLicense = SimpleLicense("BSD style", uri("http://x-stream.github.io/license.html"))
|
||||
// https://github.com/x-stream/xstream/issues/151
|
||||
// https://github.com/x-stream/xstream/issues/153
|
||||
effectiveLicense = SpdxLicense.BSD_3_Clause
|
||||
}
|
||||
|
||||
overrideLicense("org.ow2.asm:asm:7.1") {
|
||||
// pom.xml lists license as BSD
|
||||
expectedLicense = SimpleLicense("BSD", uri("http://asm.ow2.org/license.html"))
|
||||
effectiveLicense = SpdxLicense.BSD_3_Clause
|
||||
}
|
||||
|
||||
for (jodd in listOf("jodd-core", "jodd-lagarto", "jodd-log", "jodd-props")) {
|
||||
overrideLicense("org.jodd:$jodd:5.0.6") {
|
||||
expectedLicense = SpdxLicense.BSD_2_Clause // SimpleLicense("The BSD 2-Clause License", uri("http://jodd.org/license.html"))
|
||||
licenseFiles = "jodd"
|
||||
}
|
||||
}
|
||||
|
||||
overrideLicense("xpp3:xpp3_min:1.1.4c") {
|
||||
// pom.xml contains multiple licenses
|
||||
expectedLicense = SpdxLicense.CC0_1_0 and
|
||||
SimpleLicense(
|
||||
"Indiana University Extreme! Lab Software License, vesion 1.1.1",
|
||||
uri("http://www.extreme.indiana.edu/viewcvs/~checkout~/XPP3/java/LICENSE.txt")
|
||||
)
|
||||
effectiveLicense = SpdxLicense.CC0_1_0 and ExtraLicense.Indiana_University_1_1_1
|
||||
}
|
||||
|
||||
overrideLicense("org.brotli:dec:0.1.2") {
|
||||
expectedLicense = SpdxLicense.MIT
|
||||
}
|
||||
|
||||
overrideLicense("org.slf4j:jcl-over-slf4j:1.7.25") {
|
||||
expectedLicense = SpdxLicense.MIT
|
||||
// See https://github.com/qos-ch/slf4j/blob/v_1.7.25/jcl-over-slf4j/LICENSE.txt
|
||||
effectiveLicense = SpdxLicense.Apache_2_0
|
||||
}
|
||||
|
||||
overrideLicense("org.slf4j:slf4j-api:1.7.25") {
|
||||
expectedLicense = SpdxLicense.MIT
|
||||
}
|
||||
|
||||
overrideLicense("net.sf.saxon:Saxon-HE:9.9.1-1") {
|
||||
expectedLicense = SpdxLicense.MPL_2_0
|
||||
}
|
||||
|
||||
overrideLicense("com.sun.mail:all:1.5.0-b01") {
|
||||
// Multiple licenses, specify explicitly
|
||||
expectedLicense = SimpleLicense("CDDL", uri("http://www.sun.com/cddl")) and SimpleLicense("GPLv2+CE", uri("https://glassfish.java.net/public/CDDL+GPL_1_1.html"))
|
||||
effectiveLicense = SpdxLicense.CDDL_1_0 and (SpdxLicense.GPL_2_0_or_later with SpdxLicenseException.Classpath_exception_2_0)
|
||||
}
|
||||
overrideLicense("com.sun.activation:javax.activation:1.2.0") {
|
||||
expectedLicense = SimpleLicense("CDDL/GPLv2+CE", uri("https://github.com/javaee/activation/blob/master/LICENSE.txt"))
|
||||
effectiveLicense = SpdxLicense.CDDL_1_0
|
||||
}
|
||||
overrideLicense("xml-apis:xml-apis:1.4.01") {
|
||||
// Multiple licenses, select explicit one
|
||||
expectedLicense = SpdxLicense.Apache_2_0 and SpdxLicense.SAX_PD and SimpleLicense("The W3C License", uri("http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/java-binding.zip"))
|
||||
effectiveLicense = SpdxLicense.Apache_2_0
|
||||
}
|
||||
overrideLicense("org.hamcrest:hamcrest-core:1.3") {
|
||||
// https://github.com/hamcrest/JavaHamcrest/issues/264
|
||||
// pom.xml lists "New BSD License", however it is BSD_3
|
||||
expectedLicense = SimpleLicense("New BSD License", uri("http://www.opensource.org/licenses/bsd-license.php"))
|
||||
effectiveLicense = SpdxLicense.BSD_3_Clause
|
||||
}
|
||||
overrideLicense("org.exparity:hamcrest-date:2.0.4") {
|
||||
// https://github.com/eXparity/hamcrest-date/issues/26
|
||||
// pom.xml lists "New BSD License", however it is BSD_3
|
||||
expectedLicense = SimpleLicense("New BSD License", uri("http://www.opensource.org/licenses/bsd-license.php"))
|
||||
effectiveLicense = SpdxLicense.BSD_3_Clause
|
||||
}
|
||||
overrideLicense("net.sf.jtidy:jtidy:r938") {
|
||||
expectedLicense = SimpleLicense("Java HTML Tidy License", uri("http://jtidy.svn.sourceforge.net/viewvc/jtidy/trunk/jtidy/LICENSE.txt?revision=95"))
|
||||
effectiveLicense = SpdxLicense.BSD_3_Clause
|
||||
}
|
||||
}
|
||||
|
||||
val renderLicenseForSource by tasks.registering(Apache2LicenseRenderer::class) {
|
||||
group = LifecycleBasePlugin.BUILD_GROUP
|
||||
description = "Generate LICENSE file for source distribution"
|
||||
failOnIncompatibleLicense.set(false)
|
||||
artifactType.set(ArtifactType.SOURCE)
|
||||
metadata.from(gatherSourceLicenses)
|
||||
}
|
||||
|
||||
val renderLicenseForBinary by tasks.registering(Apache2LicenseRenderer::class) {
|
||||
group = LifecycleBasePlugin.BUILD_GROUP
|
||||
description = "Generate LICENSE file for binary distribution"
|
||||
failOnIncompatibleLicense.set(false)
|
||||
artifactType.set(ArtifactType.BINARY)
|
||||
metadata.from(gatherSourceLicenses)
|
||||
metadata.from(gatherBinaryLicenses)
|
||||
licenseCategory.put(ExtraLicense.Indiana_University_1_1_1.asExpression(), AsfLicenseCategory.A)
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
ASM: a very small and fast Java bytecode manipulation framework
|
||||
Copyright (c) 2000-2011 INRIA, France Telecom
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of the copyright holders nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,19 @@
|
|||
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
|
@ -0,0 +1,24 @@
|
|||
Copyright (c) 1998-2011, Brian Wellington.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,14 @@
|
|||
https://fortawesome.github.io/Font-Awesome/license/
|
||||
|
||||
Font License
|
||||
|
||||
Applies to all desktop and webfont files in the following directory: font-awesome/fonts/.
|
||||
License: SIL OFL 1.1
|
||||
URL: http://scripts.sil.org/OFL
|
||||
|
||||
Code License
|
||||
|
||||
Applies to all CSS and LESS files in the following directories: font-awesome/css/, font-awesome/less/, and font-awesome/scss/.
|
||||
License: MIT License
|
||||
URL: http://opensource.org/licenses/mit-license.html
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
Copyright (c) 2012, Stewart Bissett
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the author nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,46 @@
|
|||
CVS Info: $Id: jCharts_license.txt,v 1.1 2002/07/24 22:25:56 nathaniel_auvil Exp $
|
||||
|
||||
|
||||
jCharts License
|
||||
----------------------------------------------------------------------------------------
|
||||
|
||||
* Copyright 2002 (C) Nathaniel G. Auvil. All Rights Reserved.
|
||||
*
|
||||
* Redistribution and use of this software and associated documentation
|
||||
* ("Software"), with or without modification, are permitted provided
|
||||
* that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain copyright
|
||||
* statements and notices. Redistributions must also contain a
|
||||
* copy of this document.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the
|
||||
* above copyright notice, this list of conditions and the
|
||||
* following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. The name "jCharts" or "Nathaniel G. Auvil" must not be used to
|
||||
* endorse or promote products derived from this Software without
|
||||
* prior written permission of Nathaniel G. Auvil. For written
|
||||
* permission, please contact nathaniel_auvil@users.sourceforge.net
|
||||
*
|
||||
* 4. Products derived from this Software may not be called "jCharts"
|
||||
* nor may "jCharts" appear in their names without prior written
|
||||
* permission of Nathaniel G. Auvil. jCharts is a registered
|
||||
* trademark of Nathaniel G. Auvil.
|
||||
*
|
||||
* 5. Due credit should be given to the jCharts Project
|
||||
* (http://jcharts.sourceforge.net/).
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Nathaniel G. Auvil AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
|
||||
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* jCharts OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,24 @@
|
|||
Copyright (c) 2003-present, Jodd Team (https://jodd.org)
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,24 @@
|
|||
Copyright (c) 2012, Robert Futrell
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the author nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,21 @@
|
|||
Copyright (c) 2004-2007 QOS.ch
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,119 @@
|
|||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES
|
||||
NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE
|
||||
AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
|
||||
ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE
|
||||
OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS
|
||||
LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION
|
||||
OR WORKS PROVIDED HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer exclusive
|
||||
Copyright and Related Rights (defined below) upon the creator and subsequent
|
||||
owner(s) (each and all, an "owner") of an original work of authorship and/or
|
||||
a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for the
|
||||
purpose of contributing to a commons of creative, cultural and scientific
|
||||
works ("Commons") that the public can reliably and without fear of later claims
|
||||
of infringement build upon, modify, incorporate in other works, reuse and
|
||||
redistribute as freely as possible in any form whatsoever and for any purposes,
|
||||
including without limitation commercial purposes. These owners may contribute
|
||||
to the Commons to promote the ideal of a free culture and the further production
|
||||
of creative, cultural and scientific works, or to gain reputation or greater
|
||||
distribution for their Work in part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any expectation
|
||||
of additional consideration or compensation, the person associating CC0 with
|
||||
a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
|
||||
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
|
||||
and publicly distribute the Work under its terms, with knowledge of his or
|
||||
her Copyright and Related Rights in the Work and the meaning and intended
|
||||
legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be protected
|
||||
by copyright and related or neighboring rights ("Copyright and Related Rights").
|
||||
Copyright and Related Rights include, but are not limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display, communicate,
|
||||
and translate a Work;
|
||||
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
|
||||
iii. publicity and privacy rights pertaining to a person's image or likeness
|
||||
depicted in a Work;
|
||||
|
||||
iv. rights protecting against unfair competition in regards to a Work, subject
|
||||
to the limitations in paragraph 4(a), below;
|
||||
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal protection
|
||||
of databases, and under any national implementation thereof, including any
|
||||
amended or successor version of such directive); and
|
||||
|
||||
vii. other similar, equivalent or corresponding rights throughout the world
|
||||
based on applicable law or treaty, and any national implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention of,
|
||||
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
|
||||
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
|
||||
and Related Rights and associated claims and causes of action, whether now
|
||||
known or unknown (including existing as well as future claims and causes of
|
||||
action), in the Work (i) in all territories worldwide, (ii) for the maximum
|
||||
duration provided by applicable law or treaty (including future time extensions),
|
||||
(iii) in any current or future medium and for any number of copies, and (iv)
|
||||
for any purpose whatsoever, including without limitation commercial, advertising
|
||||
or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the
|
||||
benefit of each member of the public at large and to the detriment of Affirmer's
|
||||
heirs and successors, fully intending that such Waiver shall not be subject
|
||||
to revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason be
|
||||
judged legally invalid or ineffective under applicable law, then the Waiver
|
||||
shall be preserved to the maximum extent permitted taking into account Affirmer's
|
||||
express Statement of Purpose. In addition, to the extent the Waiver is so
|
||||
judged Affirmer hereby grants to each affected person a royalty-free, non
|
||||
transferable, non sublicensable, non exclusive, irrevocable and unconditional
|
||||
license to exercise Affirmer's Copyright and Related Rights in the Work (i)
|
||||
in all territories worldwide, (ii) for the maximum duration provided by applicable
|
||||
law or treaty (including future time extensions), (iii) in any current or
|
||||
future medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional purposes
|
||||
(the "License"). The License shall be deemed effective as of the date CC0
|
||||
was applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder of
|
||||
the License, and in such case Affirmer hereby affirms that he or she will
|
||||
not (i) exercise any of his or her remaining Copyright and Related Rights
|
||||
in the Work or (ii) assert any associated claims and causes of action with
|
||||
respect to the Work, in either case contrary to Affirmer's express Statement
|
||||
of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered,
|
||||
licensed or otherwise affected by this document.
|
||||
|
||||
b. Affirmer offers the Work as-is and makes no representations or warranties
|
||||
of any kind concerning the Work, express, implied, statutory or otherwise,
|
||||
including without limitation warranties of title, merchantability, fitness
|
||||
for a particular purpose, non infringement, or the absence of latent or other
|
||||
defects, accuracy, or the present or absence of errors, whether or not discoverable,
|
||||
all to the greatest extent permissible under applicable law.
|
||||
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without limitation
|
||||
any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims
|
||||
responsibility for obtaining any necessary consents, permissions or other
|
||||
rights required for any use of the Work.
|
||||
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a party
|
||||
to this document and has no duty or obligation with respect to this CC0 or
|
||||
use of the Work.
|
|
@ -0,0 +1,119 @@
|
|||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES
|
||||
NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE
|
||||
AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
|
||||
ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE
|
||||
OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS
|
||||
LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION
|
||||
OR WORKS PROVIDED HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer exclusive
|
||||
Copyright and Related Rights (defined below) upon the creator and subsequent
|
||||
owner(s) (each and all, an "owner") of an original work of authorship and/or
|
||||
a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for the
|
||||
purpose of contributing to a commons of creative, cultural and scientific
|
||||
works ("Commons") that the public can reliably and without fear of later claims
|
||||
of infringement build upon, modify, incorporate in other works, reuse and
|
||||
redistribute as freely as possible in any form whatsoever and for any purposes,
|
||||
including without limitation commercial purposes. These owners may contribute
|
||||
to the Commons to promote the ideal of a free culture and the further production
|
||||
of creative, cultural and scientific works, or to gain reputation or greater
|
||||
distribution for their Work in part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any expectation
|
||||
of additional consideration or compensation, the person associating CC0 with
|
||||
a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
|
||||
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
|
||||
and publicly distribute the Work under its terms, with knowledge of his or
|
||||
her Copyright and Related Rights in the Work and the meaning and intended
|
||||
legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be protected
|
||||
by copyright and related or neighboring rights ("Copyright and Related Rights").
|
||||
Copyright and Related Rights include, but are not limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display, communicate,
|
||||
and translate a Work;
|
||||
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
|
||||
iii. publicity and privacy rights pertaining to a person's image or likeness
|
||||
depicted in a Work;
|
||||
|
||||
iv. rights protecting against unfair competition in regards to a Work, subject
|
||||
to the limitations in paragraph 4(a), below;
|
||||
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal protection
|
||||
of databases, and under any national implementation thereof, including any
|
||||
amended or successor version of such directive); and
|
||||
|
||||
vii. other similar, equivalent or corresponding rights throughout the world
|
||||
based on applicable law or treaty, and any national implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention of,
|
||||
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
|
||||
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
|
||||
and Related Rights and associated claims and causes of action, whether now
|
||||
known or unknown (including existing as well as future claims and causes of
|
||||
action), in the Work (i) in all territories worldwide, (ii) for the maximum
|
||||
duration provided by applicable law or treaty (including future time extensions),
|
||||
(iii) in any current or future medium and for any number of copies, and (iv)
|
||||
for any purpose whatsoever, including without limitation commercial, advertising
|
||||
or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the
|
||||
benefit of each member of the public at large and to the detriment of Affirmer's
|
||||
heirs and successors, fully intending that such Waiver shall not be subject
|
||||
to revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason be
|
||||
judged legally invalid or ineffective under applicable law, then the Waiver
|
||||
shall be preserved to the maximum extent permitted taking into account Affirmer's
|
||||
express Statement of Purpose. In addition, to the extent the Waiver is so
|
||||
judged Affirmer hereby grants to each affected person a royalty-free, non
|
||||
transferable, non sublicensable, non exclusive, irrevocable and unconditional
|
||||
license to exercise Affirmer's Copyright and Related Rights in the Work (i)
|
||||
in all territories worldwide, (ii) for the maximum duration provided by applicable
|
||||
law or treaty (including future time extensions), (iii) in any current or
|
||||
future medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional purposes
|
||||
(the "License"). The License shall be deemed effective as of the date CC0
|
||||
was applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder of
|
||||
the License, and in such case Affirmer hereby affirms that he or she will
|
||||
not (i) exercise any of his or her remaining Copyright and Related Rights
|
||||
in the Work or (ii) assert any associated claims and causes of action with
|
||||
respect to the Work, in either case contrary to Affirmer's express Statement
|
||||
of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered,
|
||||
licensed or otherwise affected by this document.
|
||||
|
||||
b. Affirmer offers the Work as-is and makes no representations or warranties
|
||||
of any kind concerning the Work, express, implied, statutory or otherwise,
|
||||
including without limitation warranties of title, merchantability, fitness
|
||||
for a particular purpose, non infringement, or the absence of latent or other
|
||||
defects, accuracy, or the present or absence of errors, whether or not discoverable,
|
||||
all to the greatest extent permissible under applicable law.
|
||||
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without limitation
|
||||
any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims
|
||||
responsibility for obtaining any necessary consents, permissions or other
|
||||
rights required for any use of the Work.
|
||||
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a party
|
||||
to this document and has no duty or obligation with respect to this CC0 or
|
||||
use of the Work.
|
|
@ -0,0 +1,46 @@
|
|||
Indiana University Extreme! Lab Software License
|
||||
|
||||
Version 1.1.1
|
||||
|
||||
Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. The end-user documentation included with the redistribution, if any,
|
||||
must include the following acknowledgment:
|
||||
|
||||
"This product includes software developed by the Indiana University
|
||||
Extreme! Lab (http://www.extreme.indiana.edu/)."
|
||||
|
||||
Alternately, this acknowledgment may appear in the software itself,
|
||||
if and wherever such third-party acknowledgments normally appear.
|
||||
|
||||
4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab"
|
||||
must not be used to endorse or promote products derived from this
|
||||
software without prior written permission. For written permission,
|
||||
please contact http://www.extreme.indiana.edu/.
|
||||
|
||||
5. Products derived from this software may not use "Indiana Univeristy"
|
||||
name nor may "Indiana Univeristy" appear in their name, without prior
|
||||
written permission of the Indiana University.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHORS, COPYRIGHT HOLDERS OR ITS CONTRIBUTORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,28 @@
|
|||
(BSD Style License)
|
||||
|
||||
Copyright (c) 2003-2006, Joe Walnes
|
||||
Copyright (c) 2006-2019, XStream Committers
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this list of
|
||||
conditions and the following disclaimer. Redistributions in binary form must reproduce
|
||||
the above copyright notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
|
||||
Neither the name of XStream nor the names of its contributors may be used to endorse
|
||||
or promote products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
|
||||
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
|
@ -0,0 +1,195 @@
|
|||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
subprojects {
|
||||
dependencies {
|
||||
api(project(":src:core"))
|
||||
testCompile(project(":src:core", "testClasses"))
|
||||
}
|
||||
}
|
||||
|
||||
project("ftp") {
|
||||
dependencies {
|
||||
implementation("commons-net:commons-net:3.6")
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("http") {
|
||||
dependencies {
|
||||
// for SearchTextExtension
|
||||
api(project(":src:components"))
|
||||
testCompile(project(":src:components", "testClasses"))
|
||||
|
||||
api("com.thoughtworks.xstream:xstream") {
|
||||
because("HTTPResultConverter uses XStream in public API")
|
||||
}
|
||||
|
||||
compileOnly("javax.activation:javax.activation-api") {
|
||||
because("ParseCurlCommandAction uses new MimetypesFileTypeMap()")
|
||||
}
|
||||
|
||||
implementation("com.github.ben-manes.caffeine:caffeine")
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
implementation("org.apache.commons:commons-text") {
|
||||
because("StringEscapeUtils")
|
||||
}
|
||||
implementation("org.jodd:jodd-lagarto")
|
||||
implementation("org.jsoup:jsoup")
|
||||
implementation("oro:oro")
|
||||
implementation("commons-collections:commons-collections")
|
||||
implementation("commons-net:commons-net:3.6")
|
||||
implementation("com.helger:ph-commons:9.2.1") {
|
||||
// We don't really need to use/distribute jsr305
|
||||
exclude("com.google.code.findbugs", "jsr305")
|
||||
}
|
||||
implementation("com.helger:ph-css:6.1.1") {
|
||||
// We don't really need to use/distribute jsr305
|
||||
exclude("com.google.code.findbugs", "jsr305")
|
||||
}
|
||||
implementation("dnsjava:dnsjava:2.1.8")
|
||||
implementation("org.apache.httpcomponents:httpmime:4.5.8")
|
||||
implementation("org.brotli:dec:0.1.2")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
project("java") {
|
||||
dependencies {
|
||||
implementation("org.apache.commons:commons-dbcp2:2.5.0")
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("ArrayUtils")
|
||||
}
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("jdbc") {
|
||||
dependencies {
|
||||
implementation("org.apache.commons:commons-dbcp2:2.5.0")
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils, ObjectUtils")
|
||||
}
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("jms") {
|
||||
dependencies {
|
||||
testCompile(project(":src:core", "testClasses"))
|
||||
api("com.github.ben-manes.caffeine:caffeine") {
|
||||
because("MessageRenderer#getValueFromFile(..., caffeine.cache.Cache)")
|
||||
}
|
||||
// TODO: technically speaking, jms_1.1_spec should be compileOnly
|
||||
// since we either include a JMS implementation or we can't use JMS at all
|
||||
implementation("org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1")
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("junit") {
|
||||
dependencies {
|
||||
api("junit:junit:4.12")
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("ArrayUtils")
|
||||
}
|
||||
implementation("org.exparity:hamcrest-date") {
|
||||
because("hamcrest-date.jar was historically shipped with JMeter")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("junit-sample") {
|
||||
dependencies {
|
||||
api("junit:junit:4.12")
|
||||
}
|
||||
}
|
||||
|
||||
project("ldap") {
|
||||
dependencies {
|
||||
implementation("org.apache.commons:commons-text") {
|
||||
because("StringEscapeUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("mail") {
|
||||
dependencies {
|
||||
api("javax.mail:mail:1.5.0-b01") {
|
||||
exclude("javax.activation", "activation")
|
||||
}
|
||||
// There's no javax.activation:activation:1.2.0, so we use com.sun...
|
||||
runtimeOnly("com.sun.activation:javax.activation")
|
||||
// This is an API-only jar. javax.activation is present in Java 8,
|
||||
// however it is not there in Java 9
|
||||
compileOnly("javax.activation:javax.activation-api")
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("mongodb") {
|
||||
dependencies {
|
||||
api("org.mongodb:mongo-java-driver:2.11.3")
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("native") {
|
||||
dependencies {
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("StringUtils")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project("tcp") {
|
||||
dependencies {
|
||||
implementation("org.apache.commons:commons-lang3") {
|
||||
because("ArrayUtils")
|
||||
}
|
||||
implementation("commons-io:commons-io") {
|
||||
because("IOUtils")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@
|
|||
* 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.
|
||||
*
|
||||
*/
|
||||
package org.apache.jmeter.protocol.http.sampler;
|
||||
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* 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.vlsi.gradle.release.ReleaseExtension
|
||||
import com.github.vlsi.gradle.release.ReleaseParams
|
||||
|
||||
rootProject.configure<ReleaseExtension> {
|
||||
voteText.set { it.voteTextGen() }
|
||||
}
|
||||
|
||||
fun ReleaseParams.voteTextGen(): String = """
|
||||
The first release candidate for JMeter $version ($shortGitSha) has been
|
||||
prepared, and your votes are solicited.
|
||||
|
||||
This release is mainly a bugfix
|
||||
|
||||
Please, test this release candidate (with load tests and/or functional
|
||||
tests) using Java 8+ on Linux/Windows/macOS, especially on the changes.
|
||||
Feedback is very welcome within the next 72 hours.
|
||||
|
||||
You can read the New and Noteworthy section with some screenshots to
|
||||
illustrate improvements and full list of changes at:
|
||||
$previewSiteUri/site/changes.html
|
||||
|
||||
JMeter is a Java desktop application designed to load test functional
|
||||
behavior and measure performance. The current version targets Java 8+
|
||||
|
||||
Download - Archives/hashes/sigs:
|
||||
$svnStagingUri
|
||||
(dist revision TBD:SVN revision of svnmucc stage result)
|
||||
|
||||
RAT report:
|
||||
$previewSiteUri/rat/rat-report.txt
|
||||
|
||||
SHA512 hashes of archives for this vote: see footnote [1]
|
||||
|
||||
Site preview is here:
|
||||
$previewSiteUri/site/
|
||||
|
||||
JavaDoc API preview is here:
|
||||
$previewSiteUri/site/api
|
||||
|
||||
Maven staging repository is accessible here:
|
||||
$nexusRepositoryUri/org/apache/$tlpUrl/
|
||||
|
||||
Tag:
|
||||
$sourceCodeTagUrl
|
||||
|
||||
Keys are here:
|
||||
https://www.apache.org/dist/$tlpUrl/KEYS
|
||||
|
||||
N.B.
|
||||
To create the jars and test $tlp: "./gradlew build".
|
||||
|
||||
$tlp $version requires Java 8 or later to run.
|
||||
|
||||
Some known issues and incompatible changes are listed on changes page.
|
||||
$previewSiteUri/site/changes.html#Known%20problems%20and%20workarounds
|
||||
|
||||
|
||||
All feedback and vote are welcome.
|
||||
|
||||
[ ] +1 I support this release
|
||||
[ ] +0 I am OK with this release
|
||||
[ ] -0 OK, but....
|
||||
[ ] -1 I do not support this release (please indicate why)
|
||||
|
||||
The vote will remain open for at least 72 hours.
|
||||
|
||||
The PMC members please indicate the mention "(binding)" with your vote.
|
||||
|
||||
|
||||
Note: If the vote passes, the intention is to release the archive files
|
||||
and rename the RC tag as the release tag.
|
||||
|
||||
Thanks in advance!
|
||||
|
||||
===
|
||||
[1] SHA512 hashes of archives for this vote:
|
||||
|
||||
${artifacts.joinToString(System.lineSeparator()) { it.sha512 + System.lineSeparator() + "*" + it.name }}
|
||||
""".trimIndent()
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
|
@ -29,20 +29,50 @@
|
|||
Before you can compile JMeter, you will need a few things:
|
||||
<ul>
|
||||
<li>a Java 8 compatible JDK (Java Development Kit)</li>
|
||||
<li>a working installation of <a href="http://ant.apache.org">Ant</a> (at least version 1.9.1)</li>
|
||||
<li>Optional: <a href="https://gradle.org/">Gradle</a> installation</li>
|
||||
<li>the JMeter sources as shown in the next section</li>
|
||||
</ul>
|
||||
|
||||
<h3>Acquiring the source</h3>
|
||||
<p>The full source is distributed alongside the binary, and you can also find it <a href="./svnindex.html">in the source repositories.</a></p>
|
||||
<p>The official source releases of Apache JMeter can be downloaded from <a href="download_jmeter.cgi">download page</a>.</p>
|
||||
|
||||
<h3>Compiling and packaging JMeter using Gradle</h3>
|
||||
<p>
|
||||
The source archive, SVN and GIT do not contain any of the required library files.
|
||||
JMeter can be built entirely using Gradle.
|
||||
The basic command is:</p>
|
||||
<source>
|
||||
./gradlew build
|
||||
</source>
|
||||
<p>
|
||||
See the list of available tasks via <code>./gradlew tasks</code> (or <code>./gradlew tasks --all</code>)
|
||||
for the other tasks that can be used.
|
||||
</p>
|
||||
|
||||
<h3>Opening project via IntelliJ IDEA</h3>
|
||||
<p>You require IntelliJ 2018.3.1 or newer.</p>
|
||||
|
||||
<ul>
|
||||
<li>Open the build.gradle.kts file with IntelliJ IDEA and choose "Open as Project"</li>
|
||||
<li>Make sure "Create separate module per source set" is selected</li>
|
||||
<li>Make sure "Use default gradle wrapper" is selected</li>
|
||||
<li>In the "File already exists" dialogue, choose "Yes" to overwrite</li>
|
||||
<li>In the "Open Project" dialogue, choose "Delete Existing Project and Import"</li>
|
||||
</ul>
|
||||
|
||||
<h3>Compiling and packaging JMeter using Eclipse</h3>
|
||||
<h4>Option 1 : Setting up Eclipse project with Ant task</h4>
|
||||
Once you have downloaded the sources using git or svn, you can setup the Eclipse project by running:
|
||||
<h4>Option 1 : Importing Eclipse project via Eclipse's "import Gradle project" wizard</h4>
|
||||
Recent Eclipse versions can import Gradle projects automatically, so use
|
||||
<menuchoice>
|
||||
<guimenuitem>File</guimenuitem>
|
||||
<guimenuitem>Import...</guimenuitem>
|
||||
</menuchoice>
|
||||
Then choose <menuchoice><guimenuitem>Existing Gradle Project</guimenuitem></menuchoice> and proceed
|
||||
with the import.
|
||||
|
||||
<source>ant setup-eclipse-project</source>
|
||||
<h4>Option 2 : Setting up Eclipse project with Gradle task</h4>
|
||||
Once you have downloaded the sources, you can setup the Eclipse project by running:
|
||||
|
||||
<source>./gradlew eclipse</source>
|
||||
|
||||
You can then import the project using
|
||||
<menuchoice>
|
||||
|
@ -51,65 +81,7 @@ You can then import the project using
|
|||
<guimenuitem>Existing projects into Workspace</guimenuitem>
|
||||
</menuchoice> and select the folder containing JMeter sources.
|
||||
|
||||
<h4>Option 2 : Setting up Eclipse project manually</h4>
|
||||
The first step is to download dependencies by running the Ant command:</p>
|
||||
<source>
|
||||
ant download_jars
|
||||
</source>
|
||||
<p>Or you can download the binary distribution archive for a release and unpack it into the same directory structure as the source.
|
||||
This will ensure that the <code>lib/</code> directory contains the jar files needed for running JMeter.
|
||||
There are a few additional jars that are needed to build JMeter, download these using:
|
||||
</p>
|
||||
<source>
|
||||
ant download_jars
|
||||
</source>
|
||||
<p>
|
||||
This will retrieve any missing jars.
|
||||
</p>
|
||||
<note>
|
||||
If you are behind a proxy, you can set a few build properties in <code>build-local.properties</code> for ant to use the proxy:
|
||||
<source>
|
||||
proxy.use=true
|
||||
proxy.host=proxy.example.invalid
|
||||
proxy.port=8080
|
||||
proxy.user=your_user_name
|
||||
proxy.pass=your_password
|
||||
</source>
|
||||
You might also want to skip some tests - that are failing without proper access to the internet - by adding some more
|
||||
properties into <code>build-local.properties</code>:
|
||||
<source>
|
||||
skip.bug52310=true
|
||||
skip.bug60607=true
|
||||
skip.batchtest_Http4ImplPreemptiveBasicAuth=true
|
||||
skip.batchtest_SlowCharsFeature=true
|
||||
skip.batchtest_TestKeepAlive=true
|
||||
skip.test_http=true
|
||||
skip.test_TestDNSCacheManager.testWithCustomResolverAnd1Server=true
|
||||
</source>
|
||||
</note>
|
||||
|
||||
<p>
|
||||
Once you have downloaded the source from SVN or the release archives and run the ant <code>download_jars</code> target to
|
||||
install the dependent jars, you can configure Eclipse. The easiest way to do this is to replace the Eclipse <code>.classpath</code>
|
||||
file with the <code>eclipse.classpath</code> file provided with JMeter. This will set up the source-paths and most of the libraries.
|
||||
</p>
|
||||
<p>
|
||||
Ensure you read <code>eclipse.md</code> for project configuration.
|
||||
</p>
|
||||
|
||||
|
||||
<h3>Compiling and packaging JMeter using Ant</h3>
|
||||
<p>
|
||||
JMeter can be built entirely using Ant.
|
||||
The basic command is:</p>
|
||||
<source>
|
||||
ant install
|
||||
</source>
|
||||
<p>
|
||||
See <code>build.xml</code> (or call <code>ant -p</code>) for the other targets that can be used. Note that you can skip the word <code><em>install</em></code> after <code>ant</code> as it is the default target.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section name="Contributing to JMeter">
|
||||
<h2>We love contribution</h2>
|
||||
<p>
|
||||
|
@ -129,11 +101,11 @@ Before submitting your patch ensure you do the following:<br/>
|
|||
|
||||
Check that patch compiles and follows Tab space policy by running:
|
||||
</p>
|
||||
<source>ant package-and-check</source>
|
||||
<source>./gradlew check</source>
|
||||
<p>
|
||||
Check that patch does not break JUnit tests by running:
|
||||
</p>
|
||||
<source>ant test</source>
|
||||
<source>./gradlew test</source>
|
||||
|
||||
<h3>Create a PR using GIT</h3>
|
||||
<ul>
|
||||
|
@ -143,17 +115,20 @@ Check that patch does not break JUnit tests by running:
|
|||
<li>Create a branch using for example bugzilla id: <source>git branch BUGID</source></li>
|
||||
<li>Checkout the new branch : <source>git checkout BUGID</source></li>
|
||||
<li>commit your fix there : <source>git commit -m 'Fix to BUGID' list of files</source></li>
|
||||
<li>Please avoid creating merge commits in the PR. We embrace small changes, and merge commits are harder to review</li>
|
||||
<li>Add JMeter repository as upstream : <source>git remote add upstream http://www.github.com/apache/jmeter</source></li>
|
||||
<li>push it : <source>git push origin BUGID</source></li>
|
||||
<li>Create a PR and link it in the bugzilla issue</li>
|
||||
</ul>
|
||||
|
||||
<note>We have added a <code>.gitattributes</code> file to configure line endings of the files under version control.
|
||||
Those settings can lead to strange looking <em>changes</em> on some newly checked out files, e.g. JavaScript or CSS files,
|
||||
where the only change is the line ending.<br/>
|
||||
To get rid of those problems set <code>core.autocrlf</code> to <code>input</code> before you clone the repository using
|
||||
the following command:
|
||||
<source>git config --global core.autocrlf input</source>
|
||||
<note>Different operation systems have different defaults for end-of-line markers.
|
||||
Typical configuration is CRLF for Windows and LF for macOS and GNU/Linux.<br/>
|
||||
It is recommended to follow that configuration by appropriate settings of <code>core.autocrlf</code>.
|
||||
For Windows <source>git config --global core.autocrlf true</source>, and for macOS and GNU/Linux set <source>git config --global core.autocrlf input</source>
|
||||
Git will automatically recognize text files in the repository thanks to <code>.gitattributes</code>,
|
||||
and Git will convert line endings for text files to the appropriate platform-native format (according to <code>core.autocrlf</code>)<br/>
|
||||
Certain files (e.g. <code>*.sh</code> or <code>*.bat</code>) have predefined end of line policy
|
||||
no matter the configuration of the developer workstation.
|
||||
</note>
|
||||
|
||||
<h3>Create a PR using Patch</h3>
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<document>
|
||||
|
||||
<properties>
|
||||
<author email="dev.AT.jmeter.DOT.apache.DOT.org">Apache JMeter Project</author>
|
||||
<title>Source Repositories</title>
|
||||
</properties>
|
||||
|
||||
<body>
|
||||
|
||||
<section name="Download the Source">
|
||||
|
||||
<p>Most users of the source code probably don't need to have day to
|
||||
day access to the source code as it changes. For these users we
|
||||
provide easy to unpack source code downloads via our <a
|
||||
href="download_jmeter.cgi">download page</a>. </p>
|
||||
|
||||
</section>
|
||||
|
||||
<section name="Access the SVN Version Controlled Source Code">
|
||||
|
||||
<p>For information on connecting to the ASF Subversion repositories, see the <a
|
||||
href="http://www.apache.org/dev/version-control.html">version control
|
||||
page</a>. </p>
|
||||
|
||||
|
||||
<p>Modules available for access are listed below.</p>
|
||||
|
||||
<subsection name="Subversion" anchor="subversion">
|
||||
|
||||
<p><a href="http://subversion.apache.org">Subversion</a> is an open-source version control system. The root url of the
|
||||
ASF Subversion repository is <a href="http://svn.apache.org/repos/asf/">http://svn.apache.org/repos/asf/</a> for non-committers and <a href="https://svn.apache.org/repos/asf/">https://svn.apache.org/repos/asf/</a> for committers. </p>
|
||||
|
||||
<p><b>NOTE</b>:
|
||||
When checking out a subproject using Subversion, ensure that you are checking out a tag, a branch or trunk (the main-line) and not all tags and branches to avoid filling up your hard-disk and wasting bandwidth. </p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Project</th>
|
||||
<th>http (read-only)</th>
|
||||
<th>https (committers)</th>
|
||||
<th>View-SVN</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Apache JMeter</td>
|
||||
<td><a href="http://svn.apache.org/repos/asf/jmeter/trunk">http://svn.apache.org/repos/asf/jmeter/trunk</a></td>
|
||||
<td><a href="https://svn.apache.org/repos/asf/jmeter/trunk">https://svn.apache.org/repos/asf/jmeter/trunk</a></td>
|
||||
<td><a href="http://svn.apache.org/viewcvs.cgi/jmeter/">http://svn.apache.org/viewcvs.cgi/jmeter/</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</subsection>
|
||||
</section>
|
||||
<section name="Access the GIT Version Controlled Source Code">
|
||||
|
||||
<p>For information on connecting to the GIT mirror repositories, see the <a
|
||||
href="http://www.apache.org/dev/git.html">version control
|
||||
page</a>. </p>
|
||||
|
||||
<subsection name="Git" anchor="git">
|
||||
|
||||
<p>Apache maintains read-only GIT mirrors of Apache codebases, for JMeter, the mirror is accessible at the urls below.</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Project</th>
|
||||
<th>GIT (read-only)</th>
|
||||
<th>GITHUB (read-only)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Apache JMeter</td>
|
||||
<td><a href="git://git.apache.org/jmeter.git">git://git.apache.org/jmeter.git</a></td>
|
||||
<td><a href="https://github.com/apache/jmeter">https://github.com/apache/jmeter</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</subsection>
|
||||
|
||||
</section>
|
||||
|
||||
</body>
|
||||
</document>
|
|
@ -13,7 +13,6 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
resource.loader.1.resource.path = xdocs/stylesheets
|
||||
# set true to debug vsl files
|
||||
runtime.references.strict=true
|
||||
input.encoding=utf-8
|
||||
|
|
Loading…
Reference in New Issue