From 2457f042578634478965212067df82bef2cb8eb4 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 17 Nov 2021 03:56:45 +0100 Subject: build: library and application convetion plugins --- buildSrc/build.gradle | 4 ++ .../main/groovy/refinery-java-application.gradle | 11 ++++ .../main/groovy/refinery-java-conventions.gradle | 76 ++++++++++++++++++++++ .../src/main/groovy/refinery-java-library.gradle | 4 ++ buildSrc/src/main/groovy/refinery-jmh.gradle | 58 +++++++++++++++++ buildSrc/src/main/groovy/refinery-mwe2.gradle | 16 +++++ buildSrc/src/main/groovy/refinery-xtend.gradle | 37 +++++++++++ .../main/groovy/refinery-xtext-conventions.gradle | 21 ++++++ .../groovy/tools.refinery.java-conventions.gradle | 75 --------------------- .../groovy/tools.refinery.jmh-conventions.gradle | 58 ----------------- .../groovy/tools.refinery.mwe2-conventions.gradle | 16 ----- .../groovy/tools.refinery.xtend-conventions.gradle | 37 ----------- .../groovy/tools.refinery.xtext-conventions.gradle | 21 ------ gradle/libs.versions.toml | 2 +- language-ide/build.gradle | 4 +- language-model/build.gradle | 5 +- language-to-store/build.gradle | 5 +- language-web/build.gradle | 15 ++--- language/build.gradle | 8 +-- store/build.gradle | 5 +- 20 files changed, 244 insertions(+), 234 deletions(-) create mode 100644 buildSrc/src/main/groovy/refinery-java-application.gradle create mode 100644 buildSrc/src/main/groovy/refinery-java-conventions.gradle create mode 100644 buildSrc/src/main/groovy/refinery-java-library.gradle create mode 100644 buildSrc/src/main/groovy/refinery-jmh.gradle create mode 100644 buildSrc/src/main/groovy/refinery-mwe2.gradle create mode 100644 buildSrc/src/main/groovy/refinery-xtend.gradle create mode 100644 buildSrc/src/main/groovy/refinery-xtext-conventions.gradle delete mode 100644 buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle delete mode 100644 buildSrc/src/main/groovy/tools.refinery.jmh-conventions.gradle delete mode 100644 buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle delete mode 100644 buildSrc/src/main/groovy/tools.refinery.xtend-conventions.gradle delete mode 100644 buildSrc/src/main/groovy/tools.refinery.xtext-conventions.gradle diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 74fe04fb..05b2363b 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -7,6 +7,10 @@ repositories { } dependencies { + implementation libs.shadowGradle implementation libs.sonarqubeGradle implementation libs.xtendGradle } + +sourceCompatibility = '17' +targetCompatibility = '17' diff --git a/buildSrc/src/main/groovy/refinery-java-application.gradle b/buildSrc/src/main/groovy/refinery-java-application.gradle new file mode 100644 index 00000000..1566f3c0 --- /dev/null +++ b/buildSrc/src/main/groovy/refinery-java-application.gradle @@ -0,0 +1,11 @@ +plugins { + id 'application' + id 'com.github.johnrengelman.shadow' + id 'refinery-java-conventions' +} + +distTar.enabled = false +distZip.enabled = false + +shadowDistTar.enabled = false +shadowDistZip.enabled = false diff --git a/buildSrc/src/main/groovy/refinery-java-conventions.gradle b/buildSrc/src/main/groovy/refinery-java-conventions.gradle new file mode 100644 index 00000000..fcdc8ea9 --- /dev/null +++ b/buildSrc/src/main/groovy/refinery-java-conventions.gradle @@ -0,0 +1,76 @@ +plugins { + id 'eclipse' + id 'jacoco' + id 'java' +} + +repositories { + mavenCentral() + maven { + url 'https://repo.eclipse.org/content/groups/releases/' + } +} + +dependencies { + testImplementation libs.hamcrest + testImplementation libs.junit.api + testRuntimeOnly libs.junit.engine + testImplementation libs.junit.params + testImplementation libs.mockito.core + testImplementation libs.mockito.junit +} + +sourceCompatibility = '17' +targetCompatibility = '17' + +def jacocoTestReport = tasks.named('jacocoTestReport') +jacocoTestReport.configure { + dependsOn test + reports { + xml.required = true + } +} + +tasks.named('test') { + useJUnitPlatform { + excludeTags 'slow' + } + finalizedBy jacocoTestReport +} + +tasks.register('slowTest', Test) { + useJUnitPlatform() + finalizedBy jacocoTestReport +} + +tasks.named('jar') { + manifest { + attributes 'Bundle-SymbolicName': project.name + } +} + +def generateEclipseSourceFolders = tasks.register('generateEclipseSourceFolders') + +tasks.register('prepareEclipse') { + dependsOn generateEclipseSourceFolders + dependsOn tasks.named('eclipseJdt') +} + +tasks.named('eclipseClasspath') { + dependsOn generateEclipseSourceFolders +} + +eclipse { + classpath.file.whenMerged { + for (entry in entries) { + if (entry.path.endsWith('-gen')) { + entry.entryAttributes['ignore_optional_problems'] = true + } + } + } + + jdt.file.withProperties { properties -> + // Allow @SupperessWarnings to suppress SonarLint warnings + properties['org.eclipse.jdt.core.compiler.problem.unhandledWarningToken'] = 'ignore' + } +} diff --git a/buildSrc/src/main/groovy/refinery-java-library.gradle b/buildSrc/src/main/groovy/refinery-java-library.gradle new file mode 100644 index 00000000..daa80f17 --- /dev/null +++ b/buildSrc/src/main/groovy/refinery-java-library.gradle @@ -0,0 +1,4 @@ +plugins { + id 'java-library' + id 'refinery-java-conventions' +} diff --git a/buildSrc/src/main/groovy/refinery-jmh.gradle b/buildSrc/src/main/groovy/refinery-jmh.gradle new file mode 100644 index 00000000..553c469b --- /dev/null +++ b/buildSrc/src/main/groovy/refinery-jmh.gradle @@ -0,0 +1,58 @@ +plugins { + id 'org.sonarqube' + id 'refinery-java-conventions' +} + +configurations { + jmh { + extendsFrom implementation + } +} + +sourceSets { + jmh { + java.srcDirs = ['src/jmh/java'] + resources.srcDirs = ['src/jmh/resources'] + compileClasspath += sourceSets.main.runtimeClasspath + compileClasspath += sourceSets.test.runtimeClasspath + } +} + +dependencies { + jmhImplementation libs.jmh.core + jmhAnnotationProcessor libs.jmh.annprocess +} + +tasks.register('jmh', JavaExec) { + dependsOn tasks.named('jmhClasses') + main = 'org.openjdk.jmh.Main' + classpath = sourceSets.jmh.compileClasspath + sourceSets.jmh.runtimeClasspath +} + +eclipse.classpath { + plusConfigurations += [configurations.jmhCompileClasspath, configurations.jmhRuntimeClasspath] + + file.whenMerged { classpath -> + for (entry in classpath.entries) { + // Workaround from https://github.com/gradle/gradle/issues/4802#issuecomment-407902081 + if (entry in org.gradle.plugins.ide.eclipse.model.AbstractClasspathEntry) { + def usedBy = (entry.entryAttributes['gradle_used_by_scope'] ?: '').split(',') + if (usedBy == ['jmh']) { + // Allow test helper classes to be used in benchmarks from Eclipse + // and do not expose JMH dependencies to the main source code. + entry.entryAttributes['test'] = true + } else if ((usedBy.contains('main') || usedBy.contains('test')) && !usedBy.contains('jmh')) { + // main and test sources are also used by jmh sources. + usedBy += 'jmh' + entry.entryAttributes['gradle_used_by_scope'] = usedBy.join(',') + } + } + } + } +} + +sonarqube.properties { + properties['sonar.tests'] += [ + 'src/jmh/java', + ] +} diff --git a/buildSrc/src/main/groovy/refinery-mwe2.gradle b/buildSrc/src/main/groovy/refinery-mwe2.gradle new file mode 100644 index 00000000..c7f15e82 --- /dev/null +++ b/buildSrc/src/main/groovy/refinery-mwe2.gradle @@ -0,0 +1,16 @@ +plugins { + id 'eclipse' + id 'refinery-java-conventions' +} + +configurations { + mwe2 { + extendsFrom implementation + } +} + +dependencies { + mwe2 libs.mwe2.launch +} + +eclipse.classpath.plusConfigurations += [configurations.mwe2] diff --git a/buildSrc/src/main/groovy/refinery-xtend.gradle b/buildSrc/src/main/groovy/refinery-xtend.gradle new file mode 100644 index 00000000..9281ab1f --- /dev/null +++ b/buildSrc/src/main/groovy/refinery-xtend.gradle @@ -0,0 +1,37 @@ +plugins { + id 'org.sonarqube' + id 'org.xtext.xtend' + id 'refinery-java-conventions' +} + +sourceSets { + main { + xtendOutputDir = 'src/main/xtend-gen' + } + test { + xtendOutputDir = 'src/test/xtend-gen' + } +} + +xtend.generator { + // As of Xtext 2.26.0.M2, the Xbase compiler doesn't know how to handle Java 12 and up + // and the build fails with a NullPointerException if such Java version is specified. + javaSourceLevel = '11' +} + +tasks.named('clean') { + delete 'src/main/xtend-gen' + delete 'src/test/xtend-gen' +} + +sonarqube.properties { + properties['sonar.exclusions'] += [ + 'src/main/xtend-gen/**', + 'src/test/xtend-gen/**', + ] +} + +tasks.named('generateEclipseSourceFolders') { + dependsOn tasks.named('generateXtext') + dependsOn tasks.named('generateTestXtext') +} diff --git a/buildSrc/src/main/groovy/refinery-xtext-conventions.gradle b/buildSrc/src/main/groovy/refinery-xtext-conventions.gradle new file mode 100644 index 00000000..a91d723e --- /dev/null +++ b/buildSrc/src/main/groovy/refinery-xtext-conventions.gradle @@ -0,0 +1,21 @@ +plugins { + id 'org.sonarqube' + id 'refinery-java-conventions' +} + +sourceSets { + main { + java.srcDirs += ['src/main/xtext-gen'] + resources.srcDirs += ['src/main/xtext-gen'] + } +} + +tasks.named('clean') { + delete 'src/main/xtext-gen' +} + +sonarqube.properties { + properties['sonar.exclusions'] += [ + 'src/main/xtext-gen/**', + ] +} diff --git a/buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle deleted file mode 100644 index 2712d391..00000000 --- a/buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle +++ /dev/null @@ -1,75 +0,0 @@ -plugins { - id 'eclipse' - id 'jacoco' -} - -repositories { - mavenCentral() - maven { - url 'https://repo.eclipse.org/content/groups/releases/' - } -} - -dependencies { - testImplementation libs.hamcrest - testImplementation libs.junit.api - testRuntimeOnly libs.junit.engine - testImplementation libs.junit.params - testImplementation libs.mockito.core - testImplementation libs.mockito.junit -} - -sourceCompatibility = '17' -targetCompatibility = '17' - -def jacocoTestReport = tasks.named('jacocoTestReport') -jacocoTestReport.configure { - dependsOn test - reports { - xml.required = true - } -} - -tasks.named('test') { - useJUnitPlatform { - excludeTags 'slow' - } - finalizedBy jacocoTestReport -} - -tasks.register('slowTest', Test) { - useJUnitPlatform() - finalizedBy jacocoTestReport -} - -tasks.named('jar') { - manifest { - attributes 'Bundle-SymbolicName': project.name - } -} - -def generateEclipseSourceFolders = tasks.register('generateEclipseSourceFolders') - -tasks.register('prepareEclipse') { - dependsOn generateEclipseSourceFolders - dependsOn tasks.named('eclipseJdt') -} - -tasks.named('eclipseClasspath') { - dependsOn generateEclipseSourceFolders -} - -eclipse { - classpath.file.whenMerged { - for (entry in entries) { - if (entry.path.endsWith('-gen')) { - entry.entryAttributes['ignore_optional_problems'] = true - } - } - } - - jdt.file.withProperties { properties -> - // Allow @SupperessWarnings to suppress SonarLint warnings - properties['org.eclipse.jdt.core.compiler.problem.unhandledWarningToken'] = 'ignore' - } -} diff --git a/buildSrc/src/main/groovy/tools.refinery.jmh-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.jmh-conventions.gradle deleted file mode 100644 index 0a82ae4b..00000000 --- a/buildSrc/src/main/groovy/tools.refinery.jmh-conventions.gradle +++ /dev/null @@ -1,58 +0,0 @@ -plugins { - id 'org.sonarqube' - id 'tools.refinery.java-conventions' -} - -configurations { - jmh { - extendsFrom implementation - } -} - -sourceSets { - jmh { - java.srcDirs = ['src/jmh/java'] - resources.srcDirs = ['src/jmh/resources'] - compileClasspath += sourceSets.main.runtimeClasspath - compileClasspath += sourceSets.test.runtimeClasspath - } -} - -dependencies { - jmhImplementation libs.jmh.core - jmhAnnotationProcessor libs.jmh.annprocess -} - -tasks.register('jmh', JavaExec) { - dependsOn tasks.named('jmhClasses') - main = 'org.openjdk.jmh.Main' - classpath = sourceSets.jmh.compileClasspath + sourceSets.jmh.runtimeClasspath -} - -eclipse.classpath { - plusConfigurations += [configurations.jmhCompileClasspath, configurations.jmhRuntimeClasspath] - - file.whenMerged { classpath -> - for (entry in classpath.entries) { - // Workaround from https://github.com/gradle/gradle/issues/4802#issuecomment-407902081 - if (entry in org.gradle.plugins.ide.eclipse.model.AbstractClasspathEntry) { - def usedBy = (entry.entryAttributes['gradle_used_by_scope'] ?: '').split(',') - if (usedBy == ['jmh']) { - // Allow test helper classes to be used in benchmarks from Eclipse - // and do not expose JMH dependencies to the main source code. - entry.entryAttributes['test'] = true - } else if ((usedBy.contains('main') || usedBy.contains('test')) && !usedBy.contains('jmh')) { - // main and test sources are also used by jmh sources. - usedBy += 'jmh' - entry.entryAttributes['gradle_used_by_scope'] = usedBy.join(',') - } - } - } - } -} - -sonarqube.properties { - properties['sonar.tests'] += [ - 'src/jmh/java', - ] -} diff --git a/buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle deleted file mode 100644 index fe213d42..00000000 --- a/buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle +++ /dev/null @@ -1,16 +0,0 @@ -plugins { - id 'eclipse' - id 'tools.refinery.java-conventions' -} - -configurations { - mwe2 { - extendsFrom implementation - } -} - -dependencies { - mwe2 libs.mwe2.launch -} - -eclipse.classpath.plusConfigurations += [configurations.mwe2] diff --git a/buildSrc/src/main/groovy/tools.refinery.xtend-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.xtend-conventions.gradle deleted file mode 100644 index 98fc131c..00000000 --- a/buildSrc/src/main/groovy/tools.refinery.xtend-conventions.gradle +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - id 'org.sonarqube' - id 'org.xtext.xtend' - id 'tools.refinery.java-conventions' -} - -sourceSets { - main { - xtendOutputDir = 'src/main/xtend-gen' - } - test { - xtendOutputDir = 'src/test/xtend-gen' - } -} - -xtend.generator { - // As of Xtext 2.26.0.M2, the Xbase compiler doesn't know how to handle Java 12 and up - // and the build fails with a NullPointerException if such Java version is specified. - javaSourceLevel = '11' -} - -tasks.named('clean') { - delete 'src/main/xtend-gen' - delete 'src/test/xtend-gen' -} - -sonarqube.properties { - properties['sonar.exclusions'] += [ - 'src/main/xtend-gen/**', - 'src/test/xtend-gen/**', - ] -} - -tasks.named('generateEclipseSourceFolders') { - dependsOn tasks.named('generateXtext') - dependsOn tasks.named('generateTestXtext') -} diff --git a/buildSrc/src/main/groovy/tools.refinery.xtext-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.xtext-conventions.gradle deleted file mode 100644 index 3fd2f9d6..00000000 --- a/buildSrc/src/main/groovy/tools.refinery.xtext-conventions.gradle +++ /dev/null @@ -1,21 +0,0 @@ -plugins { - id 'org.sonarqube' - id 'tools.refinery.java-conventions' -} - -sourceSets { - main { - java.srcDirs += ['src/main/xtext-gen'] - resources.srcDirs += ['src/main/xtext-gen'] - } -} - -tasks.named('clean') { - delete 'src/main/xtext-gen' -} - -sonarqube.properties { - properties['sonar.exclusions'] += [ - 'src/main/xtext-gen/**', - ] -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3f08c9ab..978aa36b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,6 +26,7 @@ mockito-junit = { group = "org.mockito", name = "mockito-junit-jupiter", version mwe-utils = { group = "org.eclipse.emf", name = "org.eclipse.emf.mwe.utils", version = "1.6.2.M1" } mwe2-launch = { group = "org.eclipse.emf", name = "org.eclipse.emf.mwe2.launch", version.ref = "mwe2" } mwe2-lib = { group = "org.eclipse.emf", name = "org.eclipse.emf.mwe2.lib", version.ref = "mwe2" } +shadowGradle = { group = "gradle.plugin.com.github.johnrengelman", name = "shadow", version = "7.1.0" } slf4j-simple = { group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4j" } slf4j-log4j = { group = "org.slf4j", name = "log4j-over-slf4j", version.ref = "slf4j" } sonarqubeGradle = { group = "org.sonarsource.scanner.gradle", name = "sonarqube-gradle-plugin", version = "3.3" } @@ -43,5 +44,4 @@ xtext-xbase = { group = "org.eclipse.xtext", name = "org.eclipse.xtext.xbase", v xtext-xbase-ide = { group = "org.eclipse.xtext", name = "org.eclipse.xtext.xbase.ide", version.ref = "xtext" } [plugins] -shadow = { id = "com.github.johnrengelman.shadow", version = "7.1.0" } frontend = { id = "org.siouan.frontend-jdk11", version = "5.3.0" } diff --git a/language-ide/build.gradle b/language-ide/build.gradle index 91f21109..3786762b 100644 --- a/language-ide/build.gradle +++ b/language-ide/build.gradle @@ -1,6 +1,6 @@ plugins { - id 'java-library' - id 'tools.refinery.xtext-conventions' + id 'refinery-java-library' + id 'refinery-xtext-conventions' } dependencies { diff --git a/language-model/build.gradle b/language-model/build.gradle index 0add85d9..4c30e62f 100644 --- a/language-model/build.gradle +++ b/language-model/build.gradle @@ -1,8 +1,7 @@ plugins { - id 'java-library' id 'java-test-fixtures' - id 'tools.refinery.java-conventions' - id 'tools.refinery.mwe2-conventions' + id 'refinery-java-library' + id 'refinery-mwe2' } dependencies { diff --git a/language-to-store/build.gradle b/language-to-store/build.gradle index 92de9458..f1c1564d 100644 --- a/language-to-store/build.gradle +++ b/language-to-store/build.gradle @@ -1,7 +1,6 @@ plugins { - id 'java-library' - id 'tools.refinery.java-conventions' - id 'tools.refinery.xtend-conventions' + id 'refinery-java-library' + id 'refinery-xtext-conventions' } dependencies { diff --git a/language-web/build.gradle b/language-web/build.gradle index 9f092e5e..7306869b 100644 --- a/language-web/build.gradle +++ b/language-web/build.gradle @@ -1,9 +1,7 @@ plugins { - id 'java' - id 'application' alias libs.plugins.frontend - alias libs.plugins.shadow - id 'tools.refinery.xtext-conventions' + id 'refinery-java-application' + id 'refinery-xtext-conventions' } import org.siouan.frontendgradleplugin.infrastructure.gradle.RunNpmYarn @@ -99,6 +97,8 @@ tasks.named('check') { dependsOn(eslint, stylelint) } +mainClassName = serverMainClass + tasks.named('jar') { dependsOn assembleFrontend from(productionResources) { @@ -106,13 +106,6 @@ tasks.named('jar') { } } -mainClassName = serverMainClass -distTar.enabled = false -distZip.enabled = false - -shadowDistTar.enabled = false -shadowDistZip.enabled = false - tasks.named('shadowJar') { dependsOn assembleFrontend from(project.convention.getPlugin(JavaPluginConvention).sourceSets.main.output) diff --git a/language/build.gradle b/language/build.gradle index 4208979f..7f956a47 100644 --- a/language/build.gradle +++ b/language/build.gradle @@ -1,9 +1,9 @@ plugins { - id 'java-library' id 'java-test-fixtures' - id 'tools.refinery.xtext-conventions' - id 'tools.refinery.mwe2-conventions' - id 'tools.refinery.xtend-conventions' + id 'refinery-java-library' + id 'refinery-mwe2' + id 'refinery-xtend' + id 'refinery-xtext-conventions' } dependencies { diff --git a/store/build.gradle b/store/build.gradle index 43a496ba..8d091a81 100644 --- a/store/build.gradle +++ b/store/build.gradle @@ -1,7 +1,6 @@ plugins { - id 'java-library' - id 'tools.refinery.java-conventions' - id 'tools.refinery.jmh-conventions' + id 'refinery-java-library' + id 'refinery-jmh' } dependencies { -- cgit v1.2.3-54-g00ecf