group = "dev.fyloz.trial.colorrecipesexplorer" plugins { id("java") id("org.jetbrains.kotlin.jvm") version "1.4.10" id("org.jetbrains.dokka") version "1.4.10" id("com.leobia.gradle.sassjavacompiler") version "0.2.1" id("io.freefair.lombok") version "5.2.1" id("org.springframework.boot") version "2.3.4.RELEASE" id("org.jetbrains.kotlin.plugin.spring") version "1.4.10" id("org.jetbrains.kotlin.plugin.jpa") version "1.4.10" } repositories { mavenCentral() } dependencies { implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.4.10")) implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10") implementation("org.jetbrains.kotlin:kotlin-reflect:1.4.10") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.11.3") implementation("javax.xml.bind:jaxb-api:2.3.0") implementation("io.jsonwebtoken:jjwt:0.9.1") implementation("org.apache.poi:poi-ooxml:4.1.0") implementation("org.apache.pdfbox:pdfbox:2.0.4") implementation("com.atlassian.commonmark:commonmark:0.13.1") implementation("commons-io:commons-io:2.6") implementation("org.springframework.boot:spring-boot-starter-data-jpa:2.3.4.RELEASE") implementation("org.springframework.boot:spring-boot-starter-jdbc:2.3.4.RELEASE") implementation("org.springframework.boot:spring-boot-starter-thymeleaf:2.3.4.RELEASE") implementation("org.springframework.boot:spring-boot-starter-web:2.3.4.RELEASE") implementation("org.springframework.boot:spring-boot-starter-validation:2.3.4.RELEASE") implementation("org.springframework.boot:spring-boot-starter-security:2.3.4.RELEASE") implementation("org.springframework.boot:spring-boot-configuration-processor:2.3.4.RELEASE") implementation("org.springframework.boot:spring-boot-devtools:2.3.4.RELEASE") testImplementation("org.springframework:spring-test:5.1.6.RELEASE") testImplementation("org.mockito:mockito-core:3.6.0") testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0") testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.2") testImplementation("org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE") testImplementation("org.springframework.boot:spring-boot-test-autoconfigure:2.3.4.RELEASE") testImplementation("org.jetbrains.kotlin:kotlin-test:1.4.10") testImplementation("org.jetbrains.kotlin:kotlin-test-junit:1.4.10") runtimeOnly("com.h2database:h2:1.4.199") runtimeOnly("mysql:mysql-connector-java:8.0.22") compileOnly("org.projectlombok:lombok:1.18.10") } java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } sourceSets { main { java kotlin } test { kotlin } } tasks.test { useJUnitPlatform() testLogging { events("passed", "skipped", "failed") } } tasks.withType { options.compilerArgs.addAll(arrayOf("--release", "11")) } tasks.withType { kotlinOptions.jvmTarget = "11" } tasks.dokkaHtml { outputDirectory.set(rootDir.resolve("dokka")) } // Custom tasks tasks.register("buildBackend") { val outputDirectory = "dist/backend" println("Building Spring backend to ${projectDir.absolutePath}/$outputDirectory") dependsOn(tasks.bootJar) doLast { // Creates the output directory if it does not exists. val outputDirectoryFile = File("${projectDir.absolutePath}/$outputDirectory") if (!outputDirectoryFile.exists() || !outputDirectoryFile.isDirectory) { outputDirectoryFile.mkdirs() } exec { if (isUnixOs()) commandLineUnix("cp build/libs/${project.name}.jar ${outputDirectoryFile.absolutePath}/${project.name}.jar") else commandLineWindows("xcopy build\\libs\\${project.name}.jar ${outputDirectoryFile.absolutePath}/${project.name}.jar") } } } tasks.register("buildFrontend") { val outputDirectory = "dist/frontend" println("Building Angular frontend to ${projectDir.absolutePath}/$outputDirectory") val configuration = project.gradle.startParameter.projectProperties["frontendConfiguration"] ?: "production" println("Using configuration $configuration") // Creates the output directory if it does not exists. val outputDirectoryFile = File("${projectDir.absolutePath}/$outputDirectory") if (!outputDirectoryFile.exists() || !outputDirectoryFile.isDirectory) { outputDirectoryFile.mkdirs() } exec { commandLineUniversal("cd src/main/frontend && npm install") } exec { commandLineUniversal("cd src/main/frontend && ng build --configuration=$configuration --output-hashing=none --stats-json --source-map=false") } exec { if (isUnixOs()) commandLineUnix("cp -r src/main/frontend/dist/color-recipes-explorer-frontend/* ${outputDirectoryFile.absolutePath}") else commandLineWindows("xcopy src\\main\\frontend\\dist\\color-recipes-explorer-frontend\\* ${outputDirectoryFile.absolutePath}") } } fun isUnixOs(): Boolean = "windows" !in System.getProperty("os.name").toLowerCase() fun ExecSpec.commandLineUnix(command: String) = commandLine("sh", "-c", command) fun ExecSpec.commandLineWindows(command: String) = commandLine("cmd", "/c", command) fun ExecSpec.commandLineUniversal(command: String) = if (isUnixOs()) commandLineUnix(command) else commandLineWindows(command)