diff --git a/build-flags.gradle b/build-flags.gradle index be7edf7..445e9d5 100644 --- a/build-flags.gradle +++ b/build-flags.gradle @@ -42,3 +42,7 @@ if (!projectsWithFlags('java').isEmpty()) { apply from: "${libDir}/java-versionprops.gradle" apply from: "${libDir}/java-publish.gradle" } + +if (!projectsWithFlags('kotlin').isEmpty()) { + apply from: "${libDir}/kotlin.gradle" +} diff --git a/lib/common-dependencies.gradle b/lib/common-dependencies.gradle index ea5fb52..6592fc2 100644 --- a/lib/common-dependencies.gradle +++ b/lib/common-dependencies.gradle @@ -3,7 +3,7 @@ import org.yaml.snakeyaml.Yaml buildscript { repositories { mavenCentral() - jcenter() + gradlePluginPortal() } dependencies { @@ -76,7 +76,7 @@ configure(dependencyManagementProject) { apply plugin: com.github.benmanes.gradle.versions.VersionsPlugin repositories { - jcenter() + google() // Since we manage plugin versions here too. gradlePluginPortal() mavenCentral() diff --git a/lib/java-rpc-proto.gradle b/lib/java-rpc-proto.gradle index a3d59a2..18f77ce 100644 --- a/lib/java-rpc-proto.gradle +++ b/lib/java-rpc-proto.gradle @@ -111,6 +111,13 @@ configure(projectsWithFlags('java')) { if (processResourcesTask != null) { processResourcesTask.dependsOn(task) } + + def sourcesJarTask = tasks.findByName(sourceSet.getTaskName('sources', 'jar')) + if (sourcesJarTask) { + // A workaround for 'sourcesJar' uses this output of task ':generateProto' without + // declaring an explicit or implicit dependency. + sourcesJarTask.dependsOn(task) + } project.ext.getGenerateSourcesTask().dependsOn(task) } } diff --git a/lib/java-rpc-thrift.gradle b/lib/java-rpc-thrift.gradle index 1b763a7..f8c4762 100644 --- a/lib/java-rpc-thrift.gradle +++ b/lib/java-rpc-thrift.gradle @@ -22,6 +22,11 @@ configure(projectsWithFlags('java')) { description: "Compiles the ${sourceSet.name} .thrift files." ]) + def sourcesJarTask = project.tasks.findByName(sourceSet.getTaskName('sources', 'jar')) + if (sourcesJarTask) { + sourcesJarTask.dependsOn(task) + } + // Use afterEvaluate to give subprojects a chance to override the properties. project.afterEvaluate { def srcDirs = project.findProperty(sourceSet.getTaskName('', 'thriftSrcDirs')) diff --git a/lib/java-versionprops.gradle b/lib/java-versionprops.gradle index 4c5e24d..dc404df 100644 --- a/lib/java-versionprops.gradle +++ b/lib/java-versionprops.gradle @@ -40,5 +40,6 @@ configure(projectsWithFlags('java', 'publish')) { } // Ensure version.properties is available during the build. + tasks.sourcesJar.dependsOn(tasks.versionProperties) tasks.processResources.dependsOn(tasks.versionProperties) } diff --git a/lib/java.gradle b/lib/java.gradle index 12cac3b..1262dc6 100644 --- a/lib/java.gradle +++ b/lib/java.gradle @@ -57,6 +57,12 @@ configure(projectsWithFlags('java')) { sourceSet.java.srcDir file("${project.ext.genSrcDir}/${sourceSet.name}/java") sourceSet.resources.srcDir file("${project.ext.genSrcDir}/${sourceSet.name}/resources") } + afterEvaluate { + Task generateSourcesTask = project.tasks.findByName('generateSources') + if (generateSourcesTask != null) { + tasks.sourcesJar.dependsOn(generateSourcesTask) + } + } java { withJavadocJar() diff --git a/lib/kotlin.gradle b/lib/kotlin.gradle new file mode 100644 index 0000000..a25546b --- /dev/null +++ b/lib/kotlin.gradle @@ -0,0 +1,35 @@ +configure(projectsWithFlags('kotlin')) { + + apply plugin: 'kotlin' + apply plugin: "org.jlleitschuh.gradle.ktlint" + + def target = "1.8" + def compilerArgs = ["-Xjsr305=strict", "-java-parameters"] + compileKotlin { + kotlinOptions.jvmTarget = target + kotlinOptions.freeCompilerArgs = compilerArgs + } + compileTestKotlin { + kotlinOptions.jvmTarget = target + kotlinOptions.freeCompilerArgs = compilerArgs + } + + ktlint { + // https://github.com/pinterest/ktlint/issues/764 + version.set("0.36.0") + verbose.set(true) + reporters { + reporter "html" + } + // https://github.com/pinterest/ktlint/issues/527 + disabledRules = ["import-ordering"] + + filter { + exclude("**/gen-src/**") + } + } + + // A workaround for 'runKtlintCheckOverMainSourceSet' uses this output of task ':generateProto' without + // declaring an explicit or implicit dependency. + tasks.runKtlintCheckOverMainSourceSet.dependsOn(project.ext.getGenerateSourcesTask()) +}