| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| plugins { |
| id 'com.github.johnrengelman.shadow' version '7.0.0' apply false |
| id "com.diffplug.spotless" version "6.4.2" apply false |
| } |
| |
| description = "Flink Training Exercises" |
| |
| allprojects { |
| group = 'org.apache.flink' |
| version = '1.15-SNAPSHOT' |
| |
| apply plugin: 'com.diffplug.spotless' |
| |
| spotless { |
| format 'misc', { |
| target '*.gradle', '*.md', '.gitignore' |
| |
| trimTrailingWhitespace() |
| indentWithSpaces(4) |
| endWithNewline() |
| } |
| |
| format 'markdown', { |
| target '*.md' |
| |
| licenseHeader '<!--\n' + |
| 'Licensed to the Apache Software Foundation (ASF) under one\n' + |
| 'or more contributor license agreements. See the NOTICE file\n' + |
| 'distributed with this work for additional information\n' + |
| 'regarding copyright ownership. The ASF licenses this file\n' + |
| 'to you under the Apache License, Version 2.0 (the\n' + |
| '"License"); you may not use this file except in compliance\n' + |
| 'with the License. You may obtain a copy of the License at\n' + |
| '\n' + |
| ' http://www.apache.org/licenses/LICENSE-2.0\n' + |
| '\n' + |
| 'Unless required by applicable law or agreed to in writing,\n' + |
| 'software distributed under the License is distributed on an\n' + |
| '"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n' + |
| 'KIND, either express or implied. See the License for the\n' + |
| 'specific language governing permissions and limitations\n' + |
| 'under the License.\n' + |
| '-->\n\n', '(# )|(\\[.*\\]\\(.*\\))' |
| |
| } |
| |
| format 'gradle', { |
| target '*.gradle' |
| |
| licenseHeader '/*\n' + |
| ' * Licensed to the Apache Software Foundation (ASF) under one or more\n' + |
| ' * contributor license agreements. See the NOTICE file distributed with\n' + |
| ' * this work for additional information regarding copyright ownership.\n' + |
| ' * The ASF licenses this file to You under the Apache License, Version 2.0\n' + |
| ' * (the "License"); you may not use this file except in compliance with\n' + |
| ' * the License. You may obtain a copy of the License at\n' + |
| ' *\n' + |
| ' * http://www.apache.org/licenses/LICENSE-2.0\n' + |
| ' *\n' + |
| ' * Unless required by applicable law or agreed to in writing, software\n' + |
| ' * distributed under the License is distributed on an "AS IS" BASIS,\n' + |
| ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n' + |
| ' * See the License for the specific language governing permissions and\n' + |
| ' * limitations under the License.\n' + |
| ' */\n\n', '(.*\\{)|(.* = .*)|(apply plugin:)' |
| } |
| } |
| } |
| |
| subprojects { |
| apply plugin: 'java' |
| if (project.properties['org.gradle.project.enable_scala'].trim() == 'true') { |
| apply plugin: 'scala' |
| } |
| apply plugin: 'com.github.johnrengelman.shadow' |
| apply plugin: 'checkstyle' |
| apply plugin: 'eclipse' |
| |
| ext { |
| javaVersion = '1.8' |
| flinkVersion = '1.15.0' |
| scalaBinaryVersion = '2.12' |
| log4jVersion = '2.12.1' |
| junitVersion = '4.13' |
| } |
| |
| sourceCompatibility = javaVersion |
| targetCompatibility = javaVersion |
| tasks.withType(JavaCompile) { |
| options.encoding = 'UTF-8' |
| } |
| |
| // declare where to find the dependencies of your project |
| repositories { |
| // for access from China, you may need to uncomment this line |
| // maven { url 'https://maven.aliyun.com/repository/public/' } |
| mavenCentral() |
| maven { |
| url "https://repository.apache.org/content/repositories/snapshots/" |
| mavenContent { |
| snapshotsOnly() |
| } |
| } |
| } |
| |
| // common set of dependencies |
| dependencies { |
| shadow "org.apache.logging.log4j:log4j-slf4j-impl:${log4jVersion}" |
| shadow "org.apache.logging.log4j:log4j-api:${log4jVersion}" |
| shadow "org.apache.logging.log4j:log4j-core:${log4jVersion}" |
| |
| shadow "org.apache.flink:flink-clients:${flinkVersion}" |
| shadow "org.apache.flink:flink-java:${flinkVersion}" |
| shadow "org.apache.flink:flink-streaming-java:${flinkVersion}" |
| shadow "org.apache.flink:flink-streaming-scala_${scalaBinaryVersion}:${flinkVersion}" |
| |
| // allows using Flink's web UI when running in the IDE: |
| shadow "org.apache.flink:flink-runtime-web:${flinkVersion}" |
| |
| if (project != project(":common")) { |
| implementation project(path: ':common') |
| testImplementation(project(":common")) { |
| capabilities { requireCapability("$group:common-test") } |
| } |
| } |
| } |
| |
| // add solution source dirs: |
| sourceSets { |
| main.java.srcDirs += 'src/solution/java' |
| tasks.withType(ScalaCompile) { |
| main.scala.srcDirs += 'src/solution/scala' |
| } |
| |
| // Add shadow configuration to runtime class path so that the |
| // dynamically-generated tasks by IntelliJ are able to run and have |
| // all dependencies they need. (Luckily, this does not influence what |
| // ends up in the final shadowJar.) |
| main.runtimeClasspath += configurations.shadow |
| |
| test.compileClasspath += configurations.shadow |
| test.runtimeClasspath += configurations.shadow |
| } |
| |
| project.plugins.withId('application') { |
| ['javaExerciseClassName', 'javaSolutionClassName'].each { property -> |
| createTrainingRunTask(project, property) |
| } |
| } |
| pluginManager.withPlugin('scala') { |
| project.plugins.withId('application') { |
| ['scalaExerciseClassName', 'scalaSolutionClassName'].each { property -> |
| createTrainingRunTask(project, property) |
| } |
| } |
| } |
| |
| spotless { |
| java { |
| googleJavaFormat('1.7').aosp() |
| |
| // \# refers to static imports |
| importOrder('org.apache.flink', 'org.apache.flink.shaded', '', 'javax', 'java', 'scala', '\\#') |
| removeUnusedImports() |
| |
| targetExclude("**/generated*/*.java") |
| |
| licenseHeader '/*\n' + |
| ' * Licensed to the Apache Software Foundation (ASF) under one\n' + |
| ' * or more contributor license agreements. See the NOTICE file\n' + |
| ' * distributed with this work for additional information\n' + |
| ' * regarding copyright ownership. The ASF licenses this file\n' + |
| ' * to you under the Apache License, Version 2.0 (the\n' + |
| ' * "License"); you may not use this file except in compliance\n' + |
| ' * with the License. You may obtain a copy of the License at\n' + |
| ' *\n' + |
| ' * http://www.apache.org/licenses/LICENSE-2.0\n' + |
| ' *\n' + |
| ' * Unless required by applicable law or agreed to in writing, software\n' + |
| ' * distributed under the License is distributed on an "AS IS" BASIS,\n' + |
| ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n' + |
| ' * See the License for the specific language governing permissions and\n' + |
| ' * limitations under the License.\n' + |
| ' */\n\n' |
| } |
| } |
| |
| pluginManager.withPlugin('scala') { |
| spotless { |
| scala { |
| scalafmt('2.7.5').configFile("${rootProject.projectDir}/.scalafmt.conf") |
| |
| licenseHeader '/*\n' + |
| ' * Licensed to the Apache Software Foundation (ASF) under one\n' + |
| ' * or more contributor license agreements. See the NOTICE file\n' + |
| ' * distributed with this work for additional information\n' + |
| ' * regarding copyright ownership. The ASF licenses this file\n' + |
| ' * to you under the Apache License, Version 2.0 (the\n' + |
| ' * "License"); you may not use this file except in compliance\n' + |
| ' * with the License. You may obtain a copy of the License at\n' + |
| ' *\n' + |
| ' * http://www.apache.org/licenses/LICENSE-2.0\n' + |
| ' *\n' + |
| ' * Unless required by applicable law or agreed to in writing, software\n' + |
| ' * distributed under the License is distributed on an "AS IS" BASIS,\n' + |
| ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n' + |
| ' * See the License for the specific language governing permissions and\n' + |
| ' * limitations under the License.\n' + |
| ' */\n\n', 'package ' |
| } |
| } |
| } |
| |
| jar { |
| manifest { |
| attributes 'Built-By': System.getProperty('user.name'), |
| 'Build-Jdk': System.getProperty('java.version') |
| } |
| } |
| |
| shadowJar { |
| mergeServiceFiles() |
| dependencies { |
| exclude(dependency("org.apache.flink:force-shading")) |
| exclude(dependency('com.google.code.findbugs:jsr305')) |
| exclude(dependency('org.slf4j:.*')) |
| exclude(dependency('log4j:.*')) |
| exclude(dependency('org.apache.logging.log4j:log4j-to-slf4j')) |
| // already provided dependencies from serializer frameworks |
| exclude(dependency('com.esotericsoftware.kryo:kryo')) |
| exclude(dependency('javax.servlet:servlet-api')) // TODO: check if needed |
| exclude(dependency('org.apache.httpcomponents:httpclient')) // TODO: check if needed |
| } |
| } |
| |
| assemble.dependsOn(shadowJar) |
| } |
| |
| tasks.register('printRunTasks') { |
| println '------------------------------------------------------------' |
| println 'Flink Training Tasks runnable from root project \'' + project.name + '\'' |
| println '------------------------------------------------------------' |
| |
| subprojects.findAll { project -> |
| boolean first = true; |
| project.tasks.withType(JavaExec) { task -> |
| if (task.group == 'flink-training') { |
| if (first) { |
| println '' |
| println '> Subproject \'' + project.name + '\'' |
| first = false; |
| } |
| println './gradlew :' + project.name + ':' + task.name |
| } |
| } |
| } |
| } |
| |
| static def void createTrainingRunTask(Project project, String property) { |
| if (project.ext.has(property)) { |
| project.tasks.create(name: classNamePropertyToTaskName(property), type: JavaExec) { |
| classpath = project.sourceSets.main.runtimeClasspath |
| mainClass = project.ext.get(property) |
| group = 'flink-training' |
| } |
| } |
| } |
| |
| static def String classNamePropertyToTaskName(String property) { |
| return 'run' + |
| property.charAt(0).toString().toUpperCase() + |
| property.substring(1, property.lastIndexOf('ClassName')) |
| |
| } |