From 720b9e2fb0968905e5a80f6099eab37554a6af58 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 17 Nov 2021 03:06:39 +0100 Subject: build: move scripts into script plugins Script plugins allow applying other plugins from plugins { } blocks, which simplifies the build script. --- .../groovy/tools.refinery.java-conventions.gradle | 45 +++++++++++++++++ .../groovy/tools.refinery.jmh-conventions.gradle | 58 ++++++++++++++++++++++ .../groovy/tools.refinery.junit-conventions.gradle | 33 ++++++++++++ .../groovy/tools.refinery.mwe2-conventions.gradle | 16 ++++++ .../groovy/tools.refinery.xtend-conventions.gradle | 37 ++++++++++++++ .../groovy/tools.refinery.xtext-conventions.gradle | 21 ++++++++ 6 files changed, 210 insertions(+) create mode 100644 buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle create mode 100644 buildSrc/src/main/groovy/tools.refinery.jmh-conventions.gradle create mode 100644 buildSrc/src/main/groovy/tools.refinery.junit-conventions.gradle create mode 100644 buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle create mode 100644 buildSrc/src/main/groovy/tools.refinery.xtend-conventions.gradle create mode 100644 buildSrc/src/main/groovy/tools.refinery.xtext-conventions.gradle (limited to 'buildSrc/src/main') diff --git a/buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle new file mode 100644 index 00000000..6bea6e46 --- /dev/null +++ b/buildSrc/src/main/groovy/tools.refinery.java-conventions.gradle @@ -0,0 +1,45 @@ +plugins { + id 'eclipse' +} + +repositories { + mavenCentral() + maven { + url 'https://repo.eclipse.org/content/groups/releases/' + } +} + +sourceCompatibility = '17' +targetCompatibility = '17' + +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 new file mode 100644 index 00000000..0a82ae4b --- /dev/null +++ b/buildSrc/src/main/groovy/tools.refinery.jmh-conventions.gradle @@ -0,0 +1,58 @@ +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.junit-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.junit-conventions.gradle new file mode 100644 index 00000000..d62207b7 --- /dev/null +++ b/buildSrc/src/main/groovy/tools.refinery.junit-conventions.gradle @@ -0,0 +1,33 @@ +plugins { + id 'jacoco' + id 'tools.refinery.java-conventions' +} + +dependencies { + testImplementation libs.hamcrest + testImplementation libs.junit.api + testRuntimeOnly libs.junit.engine + testImplementation libs.junit.params + testImplementation libs.mockito.core + testImplementation libs.mockito.junit +} + +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 +} diff --git a/buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle b/buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle new file mode 100644 index 00000000..fe213d42 --- /dev/null +++ b/buildSrc/src/main/groovy/tools.refinery.mwe2-conventions.gradle @@ -0,0 +1,16 @@ +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 new file mode 100644 index 00000000..98fc131c --- /dev/null +++ b/buildSrc/src/main/groovy/tools.refinery.xtend-conventions.gradle @@ -0,0 +1,37 @@ +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 new file mode 100644 index 00000000..3fd2f9d6 --- /dev/null +++ b/buildSrc/src/main/groovy/tools.refinery.xtext-conventions.gradle @@ -0,0 +1,21 @@ +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/**', + ] +} -- cgit v1.2.3-70-g09d2