| ext.configureJvmProject = { Project project -> |
| project.configure(project) { |
| configurations { |
| sources |
| } |
| |
| task sourcesJar(type: Jar, dependsOn: classes) { |
| classifier = 'sources' |
| from sourceSets.main.kotlin |
| } |
| |
| tasks.withType(JavaCompile) { |
| options.fork = true |
| options.forkOptions.javaHome = file(JDK_18) |
| } |
| |
| tasks.withType(project.compileKotlin.class) { |
| kotlinOptions.jdkHome = JDK_18 |
| } |
| |
| test { |
| executable = "$JDK_16/bin/java" |
| } |
| } |
| } |
| |
| ext.configureJavaOnlyJvm6Project = { Project project -> |
| project.tasks.withType(JavaCompile) { |
| sourceCompatibility = 1.6 |
| targetCompatibility = 1.6 |
| options.fork = true |
| options.forkOptions.javaHome = file(JDK_16) |
| } |
| } |
| |
| ext.configureJvm6Project = { Project project -> |
| project.configure(project) { |
| configurations { |
| sources |
| } |
| |
| project.ext.jvmTarget = "1.6" |
| project.ext.javaHome = JDK_16 |
| |
| task sourcesJar(type: Jar, dependsOn: classes) { |
| classifier = 'sources' |
| from sourceSets.main.kotlin |
| } |
| |
| configureJavaOnlyJvm6Project(project) |
| |
| tasks.withType(project.compileKotlin.class) { |
| kotlinOptions.jdkHome = JDK_16 |
| kotlinOptions.jvmTarget = "1.6" |
| } |
| |
| test { |
| executable = "$JDK_16/bin/java" |
| } |
| } |
| } |
| |
| ext.compileJava9Sources = { Project project, String moduleName, Collection<FileCollection> moduleOutputs = [project.sourceSets.main.output] -> |
| // module-info.java should be in java9 source set by convention |
| SourceDirectorySet java9SourceSet = project.sourceSets.java9.java |
| project.tasks.getByName("compileJava9Java").configure { JavaCompile it -> |
| dependsOn(moduleOutputs) |
| it.sourceCompatibility = 1.9 |
| it.targetCompatibility = 1.9 |
| it.destinationDir = file("${java9SourceSet.outputDir}/META-INF/versions/9") |
| it.options.fork = true |
| it.options.forkOptions.javaHome = file(JDK_9) |
| it.options.sourcepath = files(java9SourceSet.srcDirs) |
| |
| doFirst { |
| def moduleFiles = files(*moduleOutputs) |
| def modulePath = project.configurations.compileClasspath.filter { !(it in moduleFiles.files) } |
| |
| options.compilerArgs = [ |
| '--module-path', modulePath.asPath, |
| '--patch-module', "$moduleName=${moduleFiles.asPath}" |
| ] |
| |
| classpath = files() |
| } |
| } |
| } |
| |
| ext.manifestAttributes = { Manifest manifest, Project project, String component = null, boolean multiRelease = false -> |
| project.configure(manifest) { |
| attributes \ |
| 'Implementation-Vendor': 'JetBrains', |
| 'Implementation-Title': project.archivesBaseName, |
| 'Implementation-Version': project.buildNumber |
| |
| if (component != null) { |
| attributes \ |
| 'Kotlin-Runtime-Component': component, |
| 'Kotlin-Version': project.kotlinLanguageVersion |
| } |
| if (multiRelease) { |
| attributes \ |
| 'Multi-Release': 'true' |
| } |
| } |
| } |
| |
| task preparePublication { |
| def properties = project.properties |
| assert project.version != 'unspecified' |
| |
| Map<String, String> repositoryProviders = ['sonatype-nexus-staging' : 'sonatype', 'sonatype-nexus-snapshots' : 'sonatype'] |
| project.ext.isRelease = !project.version.toString().contains('-SNAPSHOT') |
| |
| String repo = properties["deployRepo"] ?: properties['deploy-repo'] |
| String repoProvider = repositoryProviders.get(repo, repo) |
| project.ext.isSonatypePublish = repoProvider == 'sonatype' |
| project.ext.isSonatypeRelease = isSonatypePublish && isRelease |
| |
| project.ext['signing.keyId'] = project.properties['kotlin.key.name'] |
| project.ext['signing.password'] = project.properties['kotlin.key.passphrase'] |
| |
| String sonatypeSnapshotsUrl = (isSonatypePublish && !isRelease) ? "https://oss.sonatype.org/content/repositories/snapshots/" : null |
| |
| ext.repoUrl = properties["deployRepoUrl"] ?: sonatypeSnapshotsUrl ?: properties["deploy-url"] ?: "file://${rootProject.buildDir}/repo".toString() |
| ext.username = properties["deployRepoUsername"] ?: properties["kotlin.${repoProvider}.user"] |
| ext.password = properties["deployRepoPassword"] ?: properties["kotlin.${repoProvider}.password"] |
| |
| logger.info("Deployment repository preliminary url: $repoUrl ($repoProvider)") |
| |
| doLast { |
| println("Deployment repository url: $repoUrl") |
| } |
| } |
| |
| ext.signPom = { Project project, MavenDeployer deployer -> |
| deployer.beforeDeployment { MavenDeployment deployment -> |
| if (project.signing.required) |
| project.signing.signPom(deployment) |
| } |
| } |
| |
| ext.configurePublishing = { Project project -> |
| project.configure(project) { |
| apply plugin: 'maven' |
| |
| if (!project.hasProperty('prebuiltJar')) { |
| apply plugin: 'signing' |
| |
| signing { |
| required { (project.properties["signingRequired"] ?: project.isSonatypeRelease) } |
| sign configurations.archives |
| } |
| |
| signArchives { |
| enabled signing.required |
| } |
| } |
| |
| uploadArchives { |
| def prepareTask = rootProject.preparePublication |
| dependsOn prepareTask |
| |
| doFirst { |
| repositories.mavenDeployer.repository.url = prepareTask.repoUrl |
| } |
| |
| repositories { |
| mavenDeployer { |
| signPom(project, it) |
| |
| repository(url: prepareTask.repoUrl) { |
| authentication(userName: prepareTask.username, password: prepareTask.password) |
| } |
| pom.project { |
| name "${project.group}:${project.name}" |
| packaging 'jar' |
| // optionally artifactId can be defined here |
| description project.description |
| url 'https://kotlinlang.org/' |
| licenses { |
| license { |
| name 'The Apache License, Version 2.0' |
| url 'http://www.apache.org/licenses/LICENSE-2.0.txt' |
| } |
| } |
| scm { |
| url 'https://github.com/JetBrains/kotlin' |
| connection 'scm:git:https://github.com/JetBrains/kotlin.git' |
| developerConnection 'scm:git:https://github.com/JetBrains/kotlin.git' |
| } |
| developers { |
| developer { |
| name 'Kotlin Team' |
| organization = 'JetBrains' |
| organizationUrl 'https://www.jetbrains.com' |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| task publish(dependsOn: uploadArchives) |
| } |
| } |
| |
| allprojects { project -> |
| project.ext.javadocJar = { lambda = {} -> |
| ArtifactsKt.javadocJar(project, lambda) |
| } |
| |
| dependencies.ext.kotlinStdlib = { suffix -> |
| DependenciesKt.kotlinStdlib(project, suffix, null) |
| } |
| } |