• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3 */
4
5apply plugin: 'kotlin'
6apply plugin: 'maven'
7
8apply from: rootProject.file('gradle/compile-options.gradle')
9
10ext.configureKotlin()
11
12dependencies {
13    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
14    compile project(":atomicfu-transformer")
15    compile "org.apache.maven:maven-core:$maven_version"
16    compile "org.apache.maven:maven-plugin-api:$maven_version"
17    compile 'org.apache.maven.plugin-tools:maven-plugin-annotations:3.5'
18}
19
20def pomFile = file("$buildDir/pom.xml")
21def outputDir = compileKotlin.destinationDirectory
22def buildSnapshots = rootProject.properties['build_snapshot_train'] != null
23
24evaluationDependsOn(':atomicfu-transformer')
25
26task generatePomFile(dependsOn: [compileKotlin, ':atomicfu-transformer:publishToMavenLocal']) {
27    def buildDir = project.buildDir // because Maven model also has "project"
28    outputs.file(pomFile)
29    doLast {
30        install.repositories.mavenInstaller.pom.with {
31            groupId = project.group
32            artifactId = project.name
33            version = project.version
34            packaging = 'maven-plugin'
35
36            withXml {
37                asNode().with {
38                    appendNode('build').with {
39                        appendNode('directory', buildDir)
40                        appendNode('outputDirectory', outputDir.get().getAsFile())
41                    }
42                    appendNode('properties').with {
43                        appendNode('project.build.sourceEncoding', 'UTF-8')
44                    }
45                    appendNode('repositories').with {
46                        appendNode('repository').with {
47                            appendNode('id', 'dev')
48                            appendNode('url', 'https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev')
49                        }
50
51                        if (buildSnapshots) {
52                            appendNode('repository').with {
53                                appendNode('id', 'kotlin-snapshots')
54                                appendNode('url', "https://oss.sonatype.org/content/repositories/snapshots")
55                            }
56                        }
57                    }
58                }
59            }
60        }
61        install.repositories.mavenInstaller.pom.writeTo(pomFile)
62        assert pomFile.file, "$pomFile: was not generated"
63        logger.info("POM is generated in $pomFile")
64    }
65}
66
67String mavenUserHome = System.getProperty("maven.user.home")
68String mavenRepoLocal = System.getProperty("maven.repo.local")
69
70// runs the plugin description generator
71task generatePluginDescriptor(type: Exec, dependsOn: generatePomFile) {
72    def pluginDescriptorFile = outputDir.file('META-INF/maven/plugin.xml')
73
74    workingDir projectDir
75    boolean isWindows = System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0
76    def args = isWindows ? ['cmd', '/c', 'mvnw.cmd'] : ['sh', './mvnw']
77    if (mavenUserHome != null) args.add("-Dmaven.user.home=${new File(mavenUserHome).getAbsolutePath()}")
78    if (mavenRepoLocal != null) args.add("-Dmaven.repo.local=${new File(mavenRepoLocal).getAbsolutePath()}")
79    args.addAll([
80        '--settings', './settings.xml',
81        '--errors',
82        '--batch-mode',
83        '--file', pomFile.toString(),
84        'org.apache.maven.plugins:maven-plugin-plugin:3.5.1:descriptor'
85    ])
86    commandLine args
87    doLast {
88        def descriptorFile = pluginDescriptorFile.get().getAsFile()
89        assert descriptorFile, "$descriptorFile: was not generated"
90        logger.info("Plugin descriptor is generated in $descriptorFile")
91    }
92}
93
94project.jar.dependsOn(generatePluginDescriptor)
95