Skip to content

Commit

Permalink
Merge pull request #354 from RADAR-base/useRadarPlugin
Browse files Browse the repository at this point in the history
Use radar-commons plugins and coroutines
  • Loading branch information
blootsvoets committed Oct 16, 2023
2 parents caa60e3 + 96206aa commit 10e7a85
Show file tree
Hide file tree
Showing 112 changed files with 3,722 additions and 5,641 deletions.
9 changes: 5 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
FROM --platform=$BUILDPLATFORM gradle:7.5-jdk17 as builder
FROM --platform=$BUILDPLATFORM gradle:8.3-jdk17 as builder

RUN mkdir -p /code/java-sdk
WORKDIR /code/java-sdk
ENV GRADLE_USER_HOME=/code/.gradlecache \
GRADLE_OPTS=-Djdk.lang.Process.launchMechanism=vfork
GRADLE_OPTS="-Djdk.lang.Process.launchMechanism=vfork -Dorg.gradle.vfs.watch=false"

COPY java-sdk/buildSrc /code/java-sdk/buildSrc
COPY java-sdk/*.gradle.kts java-sdk/gradle.properties /code/java-sdk/
COPY java-sdk/radar-schemas-commons/build.gradle.kts /code/java-sdk/radar-schemas-commons/
COPY java-sdk/radar-schemas-core/build.gradle.kts /code/java-sdk/radar-schemas-core/
COPY java-sdk/radar-schemas-registration/build.gradle.kts /code/java-sdk/radar-schemas-registration/
COPY java-sdk/radar-schemas-tools/build.gradle.kts /code/java-sdk/radar-schemas-tools/
COPY java-sdk/radar-catalog-server/build.gradle.kts /code/java-sdk/radar-catalog-server/
RUN gradle downloadDependencies copyDependencies startScripts --no-watch-fs
RUN gradle downloadDependencies copyDependencies startScripts

COPY commons /code/commons
COPY specifications /code/specifications
Expand All @@ -22,7 +23,7 @@ COPY java-sdk/radar-schemas-registration/src /code/java-sdk/radar-schemas-regist
COPY java-sdk/radar-schemas-tools/src /code/java-sdk/radar-schemas-tools/src
COPY java-sdk/radar-catalog-server/src /code/java-sdk/radar-catalog-server/src

RUN gradle jar --no-watch-fs
RUN gradle jar

FROM eclipse-temurin:17-jre

Expand Down
302 changes: 36 additions & 266 deletions java-sdk/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.radarbase.gradle.plugin.radarKotlin
import org.radarbase.gradle.plugin.radarPublishing

plugins {
id("io.github.gradle-nexus.publish-plugin")
id("com.github.ben-manes.versions")
kotlin("jvm") apply false
id("org.jetbrains.dokka") apply false
id("org.radarbase.radar-root-project") version Versions.radarCommons
id("org.radarbase.radar-dependency-management") version Versions.radarCommons
id("org.radarbase.radar-kotlin") version Versions.radarCommons apply false
id("org.radarbase.radar-publishing") version Versions.radarCommons apply false
id("com.github.davidmc24.gradle.plugin.avro-base") version Versions.avroGenerator apply false
kotlin("plugin.allopen") version Versions.kotlin apply false
}

allprojects {
version = "0.8.6-SNAPSHOT"
group = "org.radarbase"
radarRootProject {
projectVersion.set(Versions.project)
gradleVersion.set(Versions.gradle)
}

// Configuration
Expand All @@ -19,33 +21,21 @@ val githubUrl = "https://github.com/${githubRepoName}.git"
val githubIssueUrl = "https://github.com/$githubRepoName/issues"

subprojects {
apply(plugin = "java")
apply(plugin = "org.jetbrains.kotlin.jvm")
apply(plugin = "org.radarbase.radar-kotlin")

repositories {
mavenCentral()
maven(url = "https://packages.confluent.io/maven/")
maven(url = "https://oss.sonatype.org/content/repositories/snapshots/")
radarKotlin {
javaVersion.set(Versions.java)
kotlinVersion.set(Versions.kotlin)
slf4jVersion.set(Versions.slf4j)
log4j2Version.set(Versions.log4j2)
junitVersion.set(Versions.junit)
}

afterEvaluate {
configurations.all {
resolutionStrategy.cacheChangingModulesFor(0, TimeUnit.SECONDS)
resolutionStrategy.cacheDynamicVersionsFor(0, TimeUnit.SECONDS)
exclude(group = "org.slf4j", module = "slf4j-log4j12")
}
}

enableTesting()

tasks.withType<Jar> {
manifest {
attributes(
"Implementation-Title" to project.name,
"Implementation-Version" to project.version
)
}
}
}

// Configure applications
Expand All @@ -54,35 +44,6 @@ configure(listOf(
project(":radar-catalog-server"),
)) {
apply(plugin = "application")

extensions.configure(JavaApplication::class) {
applicationDefaultJvmArgs = listOf(
"-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager",
)
}

setJavaVersion(17)

tasks.withType<Tar> {
compression = Compression.GZIP
archiveExtension.set("tar.gz")
}

tasks.register("downloadDependencies") {
configurations.named("compileClasspath").map { it.files }
configurations.named("runtimeClasspath").map { it.files }
doLast {
println("Downloaded compile-time dependencies")
}
}

tasks.register<Copy>("copyDependencies") {
from(configurations.named("runtimeClasspath").map { it.files })
into("$buildDir/third-party/")
doLast {
println("Copied third-party runtime dependencies")
}
}
}

// Configure libraries
Expand All @@ -92,219 +53,28 @@ configure(listOf(
project(":radar-schemas-registration")
)) {
apply(plugin = "java-library")
apply(plugin = "org.radarbase.radar-kotlin")
apply(plugin = "org.radarbase.radar-publishing")

setJavaVersion(11)

enableDokka()

enablePublishing()
}

tasks.withType<DependencyUpdatesTask> {
val stableVersionPattern = "(RELEASE|FINAL|GA|-ce|^[0-9,.v-]+)$".toRegex(RegexOption.IGNORE_CASE)

rejectVersionIf {
!stableVersionPattern.containsMatchIn(candidate.version)
radarKotlin {
javaVersion.set(11)
}
}

nexusPublishing {
fun Project.propertyOrEnv(propertyName: String, envName: String): String? {
return if (hasProperty(propertyName)) {
property(propertyName)?.toString()
} else {
System.getenv(envName)
}
}

repositories {
sonatype {
username.set(propertyOrEnv("ossrh.user", "OSSRH_USER"))
password.set(propertyOrEnv("ossrh.password", "OSSRH_PASSWORD"))
}
}
}

tasks.wrapper {
gradleVersion = "7.6"
}

/** Set the given Java [version] for compiled Java and Kotlin code. */
fun Project.setJavaVersion(version: Int) {
tasks.withType<JavaCompile> {
options.release.set(version)
}
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = version.toString()
languageVersion = "1.7"
apiVersion = "1.7"
}
}
}

/** Add JUnit testing and logging, PMD, and Checkstyle to a project. */
fun Project.enableTesting() {
dependencies {
val log4j2Version: String by project
val testRuntimeOnly by configurations
testRuntimeOnly("org.apache.logging.log4j:log4j-core:$log4j2Version")
testRuntimeOnly("org.apache.logging.log4j:log4j-slf4j2-impl:$log4j2Version")
testRuntimeOnly("org.apache.logging.log4j:log4j-jul:$log4j2Version")

val junitVersion: String by project
val testImplementation by configurations
testImplementation("org.junit.jupiter:junit-jupiter:$junitVersion")
}

tasks.withType<Test> {
systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")
useJUnitPlatform()
inputs.dir("${project.rootDir}/../commons")
inputs.dir("${project.rootDir}/../specifications")
testLogging {
events("skipped", "failed")
setExceptionFormat("full")
showExceptions = true
showCauses = true
showStackTraces = true
showStandardStreams = true
}
}

apply(plugin = "checkstyle")

tasks.withType<Checkstyle> {
ignoreFailures = false

configFile = file("$rootDir/config/checkstyle/checkstyle.xml")

source = fileTree("$projectDir/src/main/java") {
include("**/*.java")
}
}

apply(plugin = "pmd")

tasks.withType<Pmd> {
ignoreFailures = false

source = fileTree("$projectDir/src/main/java") {
include("**/*.java")
}

isConsoleOutput = true

ruleSets = listOf()

ruleSetFiles = files("$rootDir/config/pmd/ruleset.xml")
}
}

/** Enable Dokka documentation generation for a project. */
fun Project.enableDokka() {
apply(plugin = "org.jetbrains.dokka")

dependencies {
val dokkaVersion: String by project
val dokkaHtmlPlugin by configurations
dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:$dokkaVersion")

val jacksonVersion: String by project
val dokkaPlugin by configurations
dokkaPlugin(platform("com.fasterxml.jackson:jackson-bom:$jacksonVersion"))
val dokkaRuntime by configurations
dokkaRuntime(platform("com.fasterxml.jackson:jackson-bom:$jacksonVersion"))

val jsoupVersion: String by project
dokkaPlugin("org.jsoup:jsoup:$jsoupVersion")
dokkaRuntime("org.jsoup:jsoup:$jsoupVersion")
}
}

/** Enable publishing a project to a Maven repository. */
fun Project.enablePublishing() {
val myProject = this

val sourcesJar by tasks.registering(Jar::class) {
from(myProject.the<SourceSetContainer>()["main"].allSource)
archiveClassifier.set("sources")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
val classes by tasks
dependsOn(classes)
}

val dokkaJar by tasks.registering(Jar::class) {
from("$buildDir/dokka/javadoc")
archiveClassifier.set("javadoc")
val dokkaJavadoc by tasks
dependsOn(dokkaJavadoc)
}

val assemble by tasks
assemble.dependsOn(sourcesJar)
assemble.dependsOn(dokkaJar)

apply(plugin = "maven-publish")

val mavenJar by extensions.getByType<PublishingExtension>().publications.creating(MavenPublication::class) {
from(components["java"])

artifact(sourcesJar)
artifact(dokkaJar)

afterEvaluate {
pom {
name.set(myProject.name)
description.set(myProject.description)
url.set(githubUrl)
licenses {
license {
name.set("The Apache Software License, Version 2.0")
url.set("https://www.apache.org/licenses/LICENSE-2.0.txt")
distribution.set("repo")
}
}
developers {
developer {
id.set("blootsvoets")
name.set("Joris Borgdorff")
email.set("joris@thehyve.nl")
organization.set("The Hyve")
}
developer {
id.set("nivemaham")
name.set("Nivethika Mahasivam")
email.set("nivethika@thehyve.nl")
organization.set("The Hyve")
}
}
issueManagement {
system.set("GitHub")
url.set(githubIssueUrl)
}
organization {
name.set("RADAR-base")
url.set("https://radar-base.org")
}
scm {
connection.set("scm:git:$githubUrl")
url.set(githubUrl)
}
radarPublishing {
githubUrl.set("https://github.com/$githubRepoName")
developers {
developer {
id.set("blootsvoets")
name.set("Joris Borgdorff")
email.set("joris@thehyve.nl")
organization.set("The Hyve")
}
developer {
id.set("nivemaham")
name.set("Nivethika Mahasivam")
email.set("nivethika@thehyve.nl")
organization.set("The Hyve")
}
}
}

apply(plugin = "signing")

extensions.configure(SigningExtension::class) {
useGpgCmd()
isRequired = true
sign(tasks["sourcesJar"], tasks["dokkaJar"])
sign(mavenJar)
}

tasks.withType<Sign> {
onlyIf { gradle.taskGraph.hasTask(myProject.tasks["publish"]) }
}
}
21 changes: 21 additions & 0 deletions java-sdk/buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
kotlin("jvm") version "1.9.10"
}

repositories {
mavenCentral()
}

tasks.withType<JavaCompile> {
sourceCompatibility = "17"
targetCompatibility = "17"
}

tasks.withType<KotlinCompile> {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
Loading

0 comments on commit 10e7a85

Please sign in to comment.