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 ------ 13 files changed, 227 insertions(+), 207 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 (limited to 'buildSrc') 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/**', - ] -} -- cgit v1.2.3-54-g00ecf