plugins { id 'java' id 'application' id 'idea' // Creates fat JAR id 'com.github.johnrengelman.shadow' version '7.0.0' // Adds dependencyUpdates task id 'com.github.ben-manes.versions' version '0.39.0' id 'com.vaadin' version '20.0.3' } distZip.enabled = shadowDistZip.enabled = false distTar.enabled = shadowDistTar.enabled = false // Only necessary for debugging JARs locally mainClassName = 'com.amazonaws.greengrass.cddlatencydashboard.vaadin.EmbeddedVaadin' group = 'CDDLatencyDashboard' version = '1.0-SNAPSHOT' def temp = "temp" def tempName = "$group-$version-$temp" + ".jar" description = """""" sourceCompatibility = 1.8 targetCompatibility = 1.8 tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } def gradleDependencyVersion = '6.8.1' wrapper { gradleVersion = gradleDependencyVersion distributionType = Wrapper.DistributionType.ALL } repositories { mavenCentral() maven { url "http://maven.vaadin.com/vaadin-addons" } maven { url "https://plugins.gradle.org/m2/" } maven { url 'https://jitpack.io' } } // Guidance from: https://stackoverflow.com/questions/23446233/compile-jar-from-url-in-gradle def githubJar = { organization, module, revision, name -> File file = new File("$buildDir/libs/${name}.jar") file.parentFile.mkdirs() if (!file.exists()) { def url = "https://github.com/$organization/$module/raw/v$revision/sdk/GreengrassJavaSDK.jar" new URL(url).withInputStream { downloadStream -> file.withOutputStream { fileOut -> fileOut << downloadStream } } } files(file.absolutePath) } def awsGreengrassCoreSdkJava = '1.4.1' def cddVersion = '0.8.74' def gsonVersion = '2.8.7' def slf4jVersion = '2.0.0-alpha1' def jcabiVersion = '0.19.0' def awsSdkVersion = '1.12.8' def jacksonVersion = '2.12.3' def awsLambdaJavaCoreVersion = '1.2.1' def immutablesValueVersion = '2.8.9-ea-1' def jettyVersion = '9.4.42.v20210604' def daggerVersion = '2.37' def vaadinVersion = '14.1.17' dependencies { implementation githubJar('aws', 'aws-greengrass-core-sdk-java', awsGreengrassCoreSdkJava, 'GreengrassJavaSDK') annotationProcessor "org.immutables:value:$immutablesValueVersion" compile "org.immutables:value:$immutablesValueVersion" compile "org.immutables:gson:$immutablesValueVersion" compile githubJar('aws', 'aws-greengrass-core-sdk-java', awsGreengrassCoreSdkJava, 'GreengrassJavaSDK') compile "com.github.aws-samples:aws-greengrass-lambda-functions:$cddVersion" // Dagger code generation annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" // Dependency injection with Dagger compile "com.google.dagger:dagger:$daggerVersion" compile "com.google.code.gson:gson:$gsonVersion" compile "org.slf4j:slf4j-log4j12:$slf4jVersion" compile "com.jcabi:jcabi-log:$jcabiVersion" compile "com.amazonaws:aws-java-sdk-core:$awsSdkVersion" compile "com.fasterxml.jackson.core:jackson-core:$jacksonVersion" compile "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion" compile "com.amazonaws:aws-lambda-java-core:$awsLambdaJavaCoreVersion" compile "org.eclipse.jetty:jetty-continuation:$jettyVersion" compile "org.eclipse.jetty:jetty-server:$jettyVersion" compile "org.eclipse.jetty.websocket:websocket-server:$jettyVersion" compile "org.eclipse.jetty.websocket:javax-websocket-server-impl:$jettyVersion" implementation enforcedPlatform("com.vaadin:vaadin-bom:$vaadinVersion") // Vaadin 14 implementation("com.vaadin:vaadin-core") { // Webjars are only needed when running in Vaadin 13 compatibility mode ["com.vaadin.webjar", "org.webjars.bowergithub.insites", "org.webjars.bowergithub.polymer", "org.webjars.bowergithub.polymerelements", "org.webjars.bowergithub.vaadin", "org.webjars.bowergithub.webcomponents"] .forEach { group -> exclude(group: group) } } compile "com.vaadin:flow-server-production-mode:$vaadinVersion" compile "javax.servlet:javax.servlet-api:4.0.1" } // Required to build Vaadin frontend assemble.dependsOn vaadinBuildFrontend // Required to stage the shadow JAR without the Greengrass library shadowJar { archiveClassifier = temp } // Required to finalize the shadow JAR with the Greengrass library task finalizeShadowJar(type: Jar) { archiveClassifier = "all" from zipTree("$buildDir/libs/$tempName") from(file("$buildDir/libs/GreengrassJavaSDK.jar")) { into('lib') } manifest { attributes('Main-Class': mainClassName) } } // Required to trigger finalization of the shadow JAR shadowJar.finalizedBy finalizeShadowJar