import java.nio.file.Paths import java.time.Instant /* * Copyright 2018 dorkbox, llc * * Licensed 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. */ buildscript { // load properties from custom location def propsFile = Paths.get("${projectDir}/../../gradle.properties").toAbsolutePath().normalize().toFile() println("Loading custom property data from: ${propsFile}") def props = new Properties() propsFile.withInputStream { props.load(it) } props.each { key, val -> project.ext.set(key, val) } // for plugin publishing repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "com.gradle.publish:plugin-publish-plugin:0.9.10" } } plugins { id 'java' id 'java-gradle-plugin' id 'maven-publish' id 'signing' id "org.jetbrains.kotlin.jvm" version "1.2.51" // close and release on sonatype id 'io.codearte.nexus-staging' version '0.11.0' } // for publishing the plugin to gradle apply plugin: "com.gradle.plugin-publish" project.description = 'License definitions and legal management plugin for the Gradle build system' project.group = 'com.dorkbox' project.version = '1.1.0' project.ext.name = 'Gradle Licensing Plugin' project.ext.id = 'Licensing' project.ext.url = 'https://git.dorkbox.com/dorkbox/Licensing' project.ext.tags = ['licensing', 'legal', 'notice', 'license', 'dependencies'] sourceSets { main { java { setSrcDirs Collections.singletonList('src') } resources { setSrcDirs Collections.singletonList('resources') srcDirs '.' include 'LICENSE*' } } } repositories { jcenter() } dependencies { compileOnly 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.51' } tasks.withType(JavaCompile) { options.encoding = 'UTF-8' options.incremental = true } tasks.withType(Jar) { duplicatesStrategy DuplicatesStrategy.FAIL manifest { attributes['Implementation-Version'] = project.version attributes['Build-Date'] = Instant.now().toString() } } /////////////////////////////// ////// Plugin Publishing + Release /////////////////////////////// gradlePlugin { plugins { licensing { id = "${project.group}.${project.ext.id}" implementationClass = 'dorkbox.license.LicensePlugin' } } } pluginBundle { website = project.ext.url vcsUrl = project.ext.url plugins { licensing { id = "${project.group}.${project.ext.id}" displayName = project.ext.name description = project.description tags = project.ext.tags version = project.version } } } /////////////////////////////// ////// Maven Publishing + Release /////////////////////////////// task sourceJar(type: Jar) { description = "Creates a JAR that contains the source code." from sourceSets.main.allSource classifier = "sources" } task javaDocJar(type: Jar) { description = "Creates a JAR that contains the javadocs." classifier = "javadoc" } // for testing, we don't publish to maven central, but only to local maven publishing { publications { licensing(MavenPublication) { from components.java artifact(javaDocJar) artifact(sourceJar) groupId project.group artifactId project.ext.id version project.version pom { name = project.ext.id url = project.ext.url description = project.description issueManagement { url = "${project.ext.url}/issues".toString() system = 'Gitea Issues' } organization { name = 'dorkbox, llc' url = 'https://dorkbox.com' } developers { developer { name = 'dorkbox, llc' email = 'email@dorkbox.com' } } scm { url = project.ext.url connection = "scm:${project.ext.url}.git".toString() } // this plugin automates including the "license" section in the POM // with license only specific information (name/url). Everything else // must be explicitly added the POM licenses { license { name = 'The Apache Software License, Version 2.0' url = 'http://www.apache.org/licenses/LICENSE-2.0' } } } } } repositories { maven { url "https://oss.sonatype.org/service/local/staging/deploy/maven2" credentials { username sonatypeUsername password sonatypePassword } } } } nexusStaging { username sonatypeUsername password sonatypePassword } // we don't use maven with the plugin (it's uploaded separately to gradle plugins) tasks.withType(PublishToMavenRepository) { onlyIf { repository == publishing.repositories.maven && publication == publishing.publications.licensing } } tasks.withType(PublishToMavenLocal) { onlyIf { publication == publishing.publications.licensing } } signing { required { hasProperty('sonatypeUsername') } sign publishing.publications.licensing } // output the URL name in the console project.afterEvaluate { def URL = 'https://oss.sonatype.org/content/repositories/releases/' def projectName = project.group.toString().replaceAll('\\.', '/') def name = project.ext.id def version = project.version println("Maven URL: ${URL}${projectName}/${name}/${version}/") }