From 019c3335afd9977bdfc6a4749df9ee03feb05aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Vonheiden?= <bjoern.vonheiden@hotmail.de> Date: Fri, 12 Mar 2021 12:04:23 +0100 Subject: [PATCH] Extract code quality plugins into convention plugins Create convention plugins to reduce complexity of the root build.gradle file --- .../build.gradle | 6 +- theodolite-benchmarks/build.gradle | 79 +------------------ theodolite-benchmarks/buildSrc/build.gradle | 8 ++ .../groovy/theodolite.java-commons.gradle | 7 ++ .../groovy/theodolite.java-conventions.gradle | 70 ++++++++++++++++ .../src/main/groovy/theodolite.java-uc.gradle | 7 ++ .../flink-commons/build.gradle | 8 +- .../uc1-application-flink/build.gradle | 4 + .../uc1-application/build.gradle | 4 + .../uc1-workload-generator/build.gradle | 4 + .../uc2-application-flink/build.gradle | 4 + .../uc2-application/build.gradle | 4 + .../uc2-workload-generator/build.gradle | 4 + .../uc3-application-flink/build.gradle | 4 + .../uc3-application/build.gradle | 4 + .../uc3-workload-generator/build.gradle | 4 + .../uc4-application-flink/build.gradle | 4 + .../uc4-application/build.gradle | 4 + .../uc4-workload-generator/build.gradle | 4 + .../workload-generator-commons/build.gradle | 8 +- 20 files changed, 159 insertions(+), 82 deletions(-) create mode 100644 theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-commons.gradle create mode 100644 theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-uc.gradle diff --git a/theodolite-benchmarks/application-kafkastreams-commons/build.gradle b/theodolite-benchmarks/application-kafkastreams-commons/build.gradle index c1ce7502e..01daacba9 100644 --- a/theodolite-benchmarks/application-kafkastreams-commons/build.gradle +++ b/theodolite-benchmarks/application-kafkastreams-commons/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'theodolite.java-commons' +} + dependencies { // These dependencies are used internally, and not exposed to consumers on their own compile classpath. // implementation 'org.slf4j:slf4j-simple:1.7.25' @@ -7,4 +11,4 @@ dependencies { // Use JUnit test framework testImplementation 'junit:junit:4.12' - } \ No newline at end of file +} diff --git a/theodolite-benchmarks/build.gradle b/theodolite-benchmarks/build.gradle index 01085ba4f..3395dcf80 100644 --- a/theodolite-benchmarks/build.gradle +++ b/theodolite-benchmarks/build.gradle @@ -6,7 +6,6 @@ buildscript { } } dependencies { - classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.6.0" classpath "com.github.jengelman.gradle.plugins:shadow:6.0.0" } } @@ -23,10 +22,7 @@ allprojects { } subprojects { - apply plugin: 'checkstyle' - apply plugin: 'pmd' - apply plugin: 'com.github.spotbugs' - apply plugin: 'java-library' + apply plugin: 'theodolite.java-conventions' } configure(useCaseProjects){ @@ -38,14 +34,6 @@ configure(useCaseApplicationsFlink){ applicationDefaultJvmArgs = ["-Dlog4j.configuration=log4j.properties"] } -// Java version for all subprojects -subprojects { - java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - // Check for updates every build configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' @@ -117,7 +105,7 @@ configure(useCaseApplicationsFlink) { // Use JUnit test framework testImplementation 'junit:junit:4.12' } - + run.classpath = sourceSets.main.runtimeClasspath jar { @@ -149,69 +137,6 @@ configure(useCaseGenerators) { } } -// Per default XML reports for SpotBugs are generated -// Include this to generate HTML reports -tasks.withType(com.github.spotbugs.snom.SpotBugsTask) { - reports { - // Either HTML or XML reports can be activated - html.enabled true - xml.enabled false - } -} - -// Subprojects quality tools tasks -subprojects { - task pmd { - group 'Quality Assurance' - description 'Run PMD' - - dependsOn 'pmdMain' - dependsOn 'pmdTest' - } - - task checkstyle { - group 'Quality Assurance' - description 'Run Checkstyle' - - dependsOn 'checkstyleMain' - dependsOn 'checkstyleTest' - } - - task spotbugs { - group 'Quality Assurance' - description 'Run SpotBugs' - - dependsOn 'spotbugsMain' - dependsOn 'spotbugsTest' - } -} - -// Subprojects quality tools configuration -subprojects { - pmd { - ruleSets = [] // Gradle requires to clean the rule sets first - ruleSetFiles = files("$rootProject.projectDir/config/pmd.xml") - ignoreFailures = false - toolVersion = "6.7.0" - } - - checkstyle { - configDirectory = file("$rootProject.projectDir/config") - configFile = file("$rootProject.projectDir/config/checkstyle.xml") - maxWarnings = 0 - ignoreFailures = false - toolVersion = "8.12" - } - - spotbugs { - excludeFilter = file("$rootProject.projectDir/config/spotbugs-exclude-filter.xml") - reportLevel = "low" - effort = "max" - ignoreFailures = false - toolVersion = '4.1.4' - } -} - allprojects { eclipse { classpath { diff --git a/theodolite-benchmarks/buildSrc/build.gradle b/theodolite-benchmarks/buildSrc/build.gradle index 678405245..7abe60a90 100644 --- a/theodolite-benchmarks/buildSrc/build.gradle +++ b/theodolite-benchmarks/buildSrc/build.gradle @@ -1,3 +1,11 @@ plugins { id 'groovy-gradle-plugin' } + +repositories { + gradlePluginPortal() // so that external plugins can be resolved in dependencies section +} + +dependencies { + implementation 'gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.6.0' +} diff --git a/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-commons.gradle b/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-commons.gradle new file mode 100644 index 000000000..f195d6e11 --- /dev/null +++ b/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-commons.gradle @@ -0,0 +1,7 @@ +plugins { + // common java conventions + id 'theodolite.java-conventions' + + // provide library capability in commons + id 'java-library' +} diff --git a/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-conventions.gradle b/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-conventions.gradle index e69de29bb..773872648 100644 --- a/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-conventions.gradle +++ b/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-conventions.gradle @@ -0,0 +1,70 @@ +plugins { + id 'java' + id 'checkstyle' + id 'pmd' + + // NOTE: external plugin version is specified in implementation dependency artifact of the project's build file + id 'com.github.spotbugs' +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +// Per default XML reports for SpotBugs are generated +// Include this to generate HTML reports +tasks.withType(com.github.spotbugs.snom.SpotBugsTask) { + reports { + // Either HTML or XML reports can be activated + html.enabled true + xml.enabled false + } +} + +task pmd { + group 'Quality Assurance' + description 'Run PMD' + + dependsOn 'pmdMain' + dependsOn 'pmdTest' +} + +task checkstyle { + group 'Quality Assurance' + description 'Run Checkstyle' + + dependsOn 'checkstyleMain' + dependsOn 'checkstyleTest' +} + +task spotbugs { + group 'Quality Assurance' + description 'Run SpotBugs' + + dependsOn 'spotbugsMain' + dependsOn 'spotbugsTest' +} + +pmd { + ruleSets = [] // Gradle requires to clean the rule sets first + ruleSetFiles = files("$rootProject.projectDir/config/pmd.xml") + ignoreFailures = false + toolVersion = "6.7.0" +} + +checkstyle { + configDirectory = file("$rootProject.projectDir/config") + configFile = file("$rootProject.projectDir/config/checkstyle.xml") + maxWarnings = 0 + ignoreFailures = false + toolVersion = "8.12" +} + +spotbugs { + excludeFilter = file("$rootProject.projectDir/config/spotbugs-exclude-filter.xml") + reportLevel = "low" + effort = "max" + ignoreFailures = false + toolVersion = '4.1.4' +} diff --git a/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-uc.gradle b/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-uc.gradle new file mode 100644 index 000000000..b182c9d7f --- /dev/null +++ b/theodolite-benchmarks/buildSrc/src/main/groovy/theodolite.java-uc.gradle @@ -0,0 +1,7 @@ +plugins { + // common java conventions + id 'theodolite.java-conventions' + + // make executable + id 'application' +} diff --git a/theodolite-benchmarks/flink-commons/build.gradle b/theodolite-benchmarks/flink-commons/build.gradle index 26b3a68ff..a1f048b67 100644 --- a/theodolite-benchmarks/flink-commons/build.gradle +++ b/theodolite-benchmarks/flink-commons/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'theodolite.java-commons' +} + ext { flinkVersion = '1.12.0' scalaBinaryVersion = '2.12' @@ -10,7 +14,7 @@ dependencies { implementation 'com.google.guava:guava:30.1-jre' compile group: 'org.apache.flink', name: "flink-connector-kafka_${scalaBinaryVersion}", version: "${flinkVersion}" compile group: 'org.apache.flink', name: 'flink-java', version: "${flinkVersion}" - + // Use JUnit test framework testImplementation 'junit:junit:4.12' - } \ No newline at end of file + } diff --git a/theodolite-benchmarks/uc1-application-flink/build.gradle b/theodolite-benchmarks/uc1-application-flink/build.gradle index 8b8552dbc..5626314b0 100644 --- a/theodolite-benchmarks/uc1-application-flink/build.gradle +++ b/theodolite-benchmarks/uc1-application-flink/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc1.application.HistoryServiceFlinkJob" diff --git a/theodolite-benchmarks/uc1-application/build.gradle b/theodolite-benchmarks/uc1-application/build.gradle index 3b197e851..c13b89627 100644 --- a/theodolite-benchmarks/uc1-application/build.gradle +++ b/theodolite-benchmarks/uc1-application/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc1.application.HistoryService" diff --git a/theodolite-benchmarks/uc1-workload-generator/build.gradle b/theodolite-benchmarks/uc1-workload-generator/build.gradle index 9cc0bdbf0..490dbb663 100644 --- a/theodolite-benchmarks/uc1-workload-generator/build.gradle +++ b/theodolite-benchmarks/uc1-workload-generator/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc1.workloadgenerator.LoadGenerator" diff --git a/theodolite-benchmarks/uc2-application-flink/build.gradle b/theodolite-benchmarks/uc2-application-flink/build.gradle index b5e847553..173c3ceac 100644 --- a/theodolite-benchmarks/uc2-application-flink/build.gradle +++ b/theodolite-benchmarks/uc2-application-flink/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'theodolite.java-uc' +} + allprojects { repositories { maven { diff --git a/theodolite-benchmarks/uc2-application/build.gradle b/theodolite-benchmarks/uc2-application/build.gradle index e4d3f5346..919555031 100644 --- a/theodolite-benchmarks/uc2-application/build.gradle +++ b/theodolite-benchmarks/uc2-application/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc2.application.HistoryService" diff --git a/theodolite-benchmarks/uc2-workload-generator/build.gradle b/theodolite-benchmarks/uc2-workload-generator/build.gradle index f2c3e5d2e..498e05fc8 100644 --- a/theodolite-benchmarks/uc2-workload-generator/build.gradle +++ b/theodolite-benchmarks/uc2-workload-generator/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc2.workloadgenerator.LoadGenerator" diff --git a/theodolite-benchmarks/uc3-application-flink/build.gradle b/theodolite-benchmarks/uc3-application-flink/build.gradle index d50fa8efe..a1ed6ba07 100644 --- a/theodolite-benchmarks/uc3-application-flink/build.gradle +++ b/theodolite-benchmarks/uc3-application-flink/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'theodolite.java-uc' +} + allprojects { repositories { maven { diff --git a/theodolite-benchmarks/uc3-application/build.gradle b/theodolite-benchmarks/uc3-application/build.gradle index aa96b6dbf..ee4917278 100644 --- a/theodolite-benchmarks/uc3-application/build.gradle +++ b/theodolite-benchmarks/uc3-application/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc3.application.HistoryService" diff --git a/theodolite-benchmarks/uc3-workload-generator/build.gradle b/theodolite-benchmarks/uc3-workload-generator/build.gradle index c3ca94290..22103aaf2 100644 --- a/theodolite-benchmarks/uc3-workload-generator/build.gradle +++ b/theodolite-benchmarks/uc3-workload-generator/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc3.workloadgenerator.LoadGenerator" diff --git a/theodolite-benchmarks/uc4-application-flink/build.gradle b/theodolite-benchmarks/uc4-application-flink/build.gradle index 0ad804c62..9ef66cb39 100644 --- a/theodolite-benchmarks/uc4-application-flink/build.gradle +++ b/theodolite-benchmarks/uc4-application-flink/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc4.application.AggregationServiceFlinkJob" diff --git a/theodolite-benchmarks/uc4-application/build.gradle b/theodolite-benchmarks/uc4-application/build.gradle index 9cb1b311d..061650e31 100644 --- a/theodolite-benchmarks/uc4-application/build.gradle +++ b/theodolite-benchmarks/uc4-application/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc4.application.AggregationService" diff --git a/theodolite-benchmarks/uc4-workload-generator/build.gradle b/theodolite-benchmarks/uc4-workload-generator/build.gradle index 8865ec939..5d419e67c 100644 --- a/theodolite-benchmarks/uc4-workload-generator/build.gradle +++ b/theodolite-benchmarks/uc4-workload-generator/build.gradle @@ -1 +1,5 @@ +plugins { + id 'theodolite.java-uc' +} + mainClassName = "theodolite.uc4.workloadgenerator.LoadGenerator" diff --git a/theodolite-benchmarks/workload-generator-commons/build.gradle b/theodolite-benchmarks/workload-generator-commons/build.gradle index c42fff041..06dd5b2b8 100644 --- a/theodolite-benchmarks/workload-generator-commons/build.gradle +++ b/theodolite-benchmarks/workload-generator-commons/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'theodolite.java-commons' +} + dependencies { implementation 'com.google.guava:guava:30.1-jre' implementation 'com.hazelcast:hazelcast:4.1.1' @@ -6,7 +10,7 @@ dependencies { implementation('org.industrial-devops:titan-ccp-common:0.1.0-SNAPSHOT') { changing = true } implementation('org.industrial-devops:titan-ccp-common-kafka:0.1.0-SNAPSHOT') { changing = true } implementation 'org.apache.kafka:kafka-streams:2.6.0' // TODO required? - + // Use JUnit test framework testImplementation 'junit:junit:4.12' -} \ No newline at end of file +} -- GitLab