From e033a5282368ab1fff250bcfa0ce7cf93c569ed9 Mon Sep 17 00:00:00 2001 From: nathan Date: Sat, 12 Jan 2019 23:59:52 +0100 Subject: [PATCH] Updated build scripts to kotlin --- build.gradle.kts | 723 ++++++++++++++++++++++++-------------------- gradlew | 2 +- gradlew.bat | 2 +- settings.gradle.kts | 6 +- 4 files changed, 403 insertions(+), 330 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9160c268..81997af7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,504 +14,577 @@ * limitations under the License. */ +import Build_gradle.Extras.bcVersion import java.nio.file.Paths import java.time.Instant - -buildscript { - // load properties from custom location - def propsFile = Paths.get("${projectDir}/../../gradle.properties").normalize().toFile() - if (propsFile.canRead()) { - 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)} - } - else { - ext.sonatypeUsername = "" - ext.sonatypePassword = "" - } - - // for plugin publishing and license sources - repositories { - maven {url "https://plugins.gradle.org/m2/"} - } - dependencies { - // this is the only way to also get the source code for IDE auto-complete - classpath "gradle.plugin.com.dorkbox:Licensing:1.3" - classpath "gradle.plugin.com.dorkbox:Licensing:1.3:sources" - } -} +import java.util.Properties +import kotlin.reflect.full.declaredMemberProperties +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask +import org.jetbrains.kotlin.backend.common.onlyIf plugins { - id 'java' - id 'maven-publish' - id 'signing' + java + signing + `maven-publish` // close and release on sonatype - id 'io.codearte.nexus-staging' version '0.20.0' + id("io.codearte.nexus-staging") version "0.20.0" - id "com.dorkbox.CrossCompile" version "1.0.1" - id "com.dorkbox.VersionUpdate" version "1.4" + id("com.dorkbox.CrossCompile") version "1.0.1" + id("com.dorkbox.Licensing") version "1.4" + id("com.dorkbox.VersionUpdate") version "1.4.1" - // setup checking for the latest version of a plugin or dependency (and updating the gradle build) - id "se.patrikerdes.use-latest-versions" version "0.2.3" + // setup checking for the latest version of a plugin or dependency + id("com.github.ben-manes.versions") version "0.20.0" + + kotlin("jvm") version "1.3.11" } -// this is the only way to also get the source code for IDE auto-complete -apply plugin: "com.dorkbox.Licensing" -// give us access to api/implementation differences for building java libraries -apply plugin: 'java-library' +println("Gradle ${project.gradle.gradleVersion}") -project.description = 'Encrypted, high-performance, and event-driven/reactive network stack for Java 6+' -project.group = 'com.dorkbox' -project.version = '2.13' +// load properties from custom location +val propsFile = File("$projectDir/../../gradle.properties").normalize() +if (propsFile.canRead()) { + println("Loading custom property data from: [$propsFile]") -project.ext.name = 'Network' -project.ext.url = 'https://git.dorkbox.com/dorkbox/Network' + val props = Properties() + props.load(propsFile.inputStream()) + props.forEach { (k, v) -> project.extra.set(k as String, v as String) } +} -sourceCompatibility = 1.8 -targetCompatibility = 1.8 + +object Extras { + // set for the project + const val description = "Encrypted, high-performance, and event-driven/reactive network stack for Java 6+" + const val group = "com.dorkbox" + const val version = "2.13" + + // set as project.ext + const val name = "Network" + const val id = "Network" + const val vendor = "Dorkbox LLC" + const val url = "https://git.dorkbox.com/dorkbox/Network" + val buildDate = Instant.now().toString() + + val JAVA_VERSION = JavaVersion.VERSION_1_6.toString() + + val bcVersion = "1.60" + + var sonatypeUsername = "" + var sonatypePassword = "" +} + +/////////////////////////////// +///// assign 'Extras' to project or project.ext +/////////////////////////////// +description = Extras.description +group = Extras.group +version = Extras.version + +Extras::class.declaredMemberProperties.forEach { + if (!project.hasProperty(it.name)) { + when { + it.isConst -> project.extra.set(it.name, it.getter.call()) + else -> project.extra.set(it.name, it.getter.call(Extras::class.objectInstance)) + } + } +} + +// assign sonatype info if present +Extras.sonatypeUsername = project.extra["sonatypeUsername"] as String +Extras.sonatypePassword = project.extra["sonatypePassword"] as String licensing { license(License.APACHE_2) { - author 'dorkbox, llc' - url project.ext.url - note project.description + author(Extras.vendor) + url(Extras.url) + note(Extras.description) } - license('Dorkbox Utils', License.APACHE_2) { - author 'dorkbox, llc' - url 'https://git.dorkbox.com/dorkbox/Utilities' + license("Dorkbox Utils", License.APACHE_2) { + author(Extras.vendor) + url("https://git.dorkbox.com/dorkbox/Utilities") } - license('Bennidi Iterator', License.MIT) { - copyright 2012 - author 'Benjamin Diedrichsen' - url 'https://github.com/bennidi/mbassador' - note 'Fast iterators from the MBassador project' + license("Bennidi Iterator", License.MIT) { + copyright(2012) + author("Benjamin Diedrichsen") + url("https://github.com/bennidi/mbassador") + note("Fast iterators from the MBassador project") } - license('BouncyCastle', License.MIT) { - copyright 2009 - author 'The Legion Of The Bouncy Castle' - url 'http://www.bouncycastle.org' + license("BouncyCastle", License.MIT) { + copyright(2009) + author("The Legion Of The Bouncy Castle") + url("http://www.bouncycastle.org") } - license('ObjectPool', License.APACHE_2) { - author 'dorkbox, llc' - url 'https://git.dorkbox.com/dorkbox/ObjectPool' + license("ObjectPool", License.APACHE_2) { + author("dorkbox, llc") + url("https://git.dorkbox.com/dorkbox/ObjectPool") } - license('FastThreadLocal', License.BSD_3) { - copyright 2014 - author 'Lightweight Java Game Library Project' - author 'Riven' - url 'https://github.com/LWJGL/lwjgl3/blob/5819c9123222f6ce51f208e022cb907091dd8023/modules/core/src/main/java/org/lwjgl/system/FastThreadLocal.java' + license("FastThreadLocal", License.BSD_3) { + copyright(2014) + author("Lightweight Java Game Library Project") + author("Riven") + url("https://github.com/LWJGL/lwjgl3/blob/5819c9123222f6ce51f208e022cb907091dd8023/modules/core/src/main/java/org/lwjgl/system/FastThreadLocal.java") } - license('Javassist', License.BSD_3) { - copyright 1999 - author 'Shigeru Chiba' - author 'Bill Burke' - author 'Jason T. Greene' - url 'http://www.csg.is.titech.ac.jp/~chiba/java' - note 'Licensed under the MPL/LGPL/Apache triple license' + license("Javassist", License.BSD_3) { + copyright(1999) + author("Shigeru Chiba") + author("Bill Burke") + author("Jason T. Greene") + url("http://www.csg.is.titech.ac.jp/~chiba/java") + note("Licensed under the MPL/LGPL/Apache triple license") } - license('Kryo', License.BSD_3) { - copyright 2008 - author 'Nathan Sweet' - url 'https://github.com/EsotericSoftware/kryo' + license("Kryo", License.BSD_3) { + copyright(2008) + author("Nathan Sweet") + url("https://github.com/EsotericSoftware/kryo") } - license('kryo-serializers', License.APACHE_2) { - copyright 2010 - author 'Martin Grotzke' - author 'Rafael Winterhalter' - url 'https://github.com/magro/kryo-serializers' + license("kryo-serializers", License.APACHE_2) { + copyright(2010) + author("Martin Grotzke") + author("Rafael Winterhalter") + url("https://github.com/magro/kryo-serializers") } - license('KryoNet RMI', License.BSD_3) { - copyright 2008 - author 'Nathan Sweet' - url 'https://github.com/EsotericSoftware/kryonet' + license("KryoNet RMI", License.BSD_3) { + copyright(2008) + author("Nathan Sweet") + url("https://github.com/EsotericSoftware/kryonet") } - license('LAN HostDiscovery from Apache Commons JCS', License.APACHE_2) { - copyright 2014 - author 'The Apache Software Foundation' - url 'https://issues.apache.org/jira/browse/JCS-40' + license("LAN HostDiscovery from Apache Commons JCS", License.APACHE_2) { + copyright(2014) + author("The Apache Software Foundation") + url("https://issues.apache.org/jira/browse/JCS-40") } - license('LZ4 and XXhash', License.APACHE_2) { - copyright 2011 - copyright 2012 - author 'Yann Collet' - author 'Adrien Grand' - url 'https://github.com/jpountz/lz4-java' + license("LZ4 and XXhash", License.APACHE_2) { + copyright(2011) + copyright(2012) + author("Yann Collet") + author("Adrien Grand") + url("https://github.com/jpountz/lz4-java") } - license('MathUtils, IntArray, IntMap', License.APACHE_2) { - copyright 2013 - author 'Mario Zechner ' - author 'Nathan Sweet ' - url 'http://github.com/libgdx/libgdx/' + license("MathUtils, IntArray, IntMap", License.APACHE_2) { + copyright(2013) + author("Mario Zechner ") + author("Nathan Sweet ") + url("http://github.com/libgdx/libgdx/") } - license('MinLog-SLF4J', License.APACHE_2) { - copyright 2008 - author 'dorkbox, llc' - author 'Nathan Sweet' - author 'Dan Brown' - url 'https://git.dorkbox.com/dorkbox/MinLog-SLF4J' - url 'https://github.com/EsotericSoftware/minlog' - note 'Drop-in replacement for MinLog to log through SLF4j.' + license("MinLog-SLF4J", License.APACHE_2) { + copyright(2008) + author("dorkbox, llc") + author("Nathan Sweet") + author("Dan Brown") + url("https://git.dorkbox.com/dorkbox/MinLog-SLF4J") + url("https://github.com/EsotericSoftware/minlog") + note("Drop-in replacement for MinLog to log through SLF4j.") } - license('ReflectASM', License.BSD_3) { - copyright 2008 - author 'Nathan Sweet' - url 'https://github.com/EsotericSoftware/reflectasm' + license("ReflectASM", License.BSD_3) { + copyright(2008) + author("Nathan Sweet") + url("https://github.com/EsotericSoftware/reflectasm") } - license('SLF4J', License.MIT) { - copyright 2008 - author 'QOS.ch' - url 'http://www.slf4j.org' + license("SLF4J", License.MIT) { + copyright(2008) + author("QOS.ch") + url("http://www.slf4j.org") } - license('TypeTools', License.APACHE_2) { - copyright 2017 - author 'Jonathan Halterman' - url 'https://github.com/jhalterman/typetools/' - note 'Tools for resolving generic types' - } - - license('XBill DNS', License.BSD_3) { - copyright 2005 - author 'Brian Wellington' - url 'http://www.xbill.org/dnsjava' + license("TypeTools", License.APACHE_2) { + copyright(2017) + author("Jonathan Halterman") + url("https://github.com/jhalterman/typetools/") + note("Tools for resolving generic types") } } sourceSets { main { java { - setSrcDirs Collections.singletonList('src') + setSrcDirs(listOf("src")) + + // want to include java files for the source. 'setSrcDirs' resets includes... + include("**/*.java") } } + test { java { - setSrcDirs Collections.singletonList('test') + setSrcDirs(listOf("test")) + + // want to include java files for the source. 'setSrcDirs' resets includes... + include("**/*.java") } } } - repositories { - mavenLocal() // this must be first! jcenter() } - -ext { - bcVersion = '1.60' -} - dependencies { - implementation(project('Utilities')) { + implementation(project("Utilities")) { // don't include any of the project dependencies for anything - transitive = false + isTransitive = false } // our main dependencies are ALSO the same as the limited utilities (they are not automatically pulled in from other sourceSets) // needed by the utilities (custom since we don't want to include everything). IntelliJ includes everything, but our builds do not - api 'net.java.dev.jna:jna:4.5.2' - api 'net.java.dev.jna:jna-platform:4.5.2' + api("io.netty:netty-all:4.1.32.Final") + api("com.esotericsoftware:kryo:4.0.2") + api("net.jpountz.lz4:lz4:1.3.0") - api 'io.netty:netty-all:4.1.22.Final' - api 'com.esotericsoftware:kryo:4.0.2' - api 'net.jpountz.lz4:lz4:1.3.0' + api("org.bouncycastle:bcprov-jdk15on:$bcVersion") + api("org.bouncycastle:bcpg-jdk15on:$bcVersion") + api("org.bouncycastle:bcmail-jdk15on:$bcVersion") + api("org.bouncycastle:bctls-jdk15on:$bcVersion") - api "org.bouncycastle:bcprov-jdk15on:$bcVersion" - api "org.bouncycastle:bcpg-jdk15on:$bcVersion" - api "org.bouncycastle:bcmail-jdk15on:$bcVersion"z - api "org.bouncycastle:bctls-jdk15on:$bcVersion" - api "com.dorkbox:ObjectPool:2.11" + api("com.dorkbox:ObjectPool:2.11") - api 'org.slf4j:slf4j-api:1.7.25' + implementation ("org.slf4j:slf4j-api:1.7.25") - testCompile 'junit:junit:4.12' - testCompile ("ch.qos.logback:logback-classic:1.1.6") + testCompile("junit:junit:4.12") + testCompile("ch.qos.logback:logback-classic:1.2.3") } - -project('Utilities') { - tasks.withType(Test) { +project("Utilities") { + tasks.withType { // want to remove utilities project from unit tests. It's unnecessary to run unit tests for the entire Utilities project - exclude('**/*') + exclude("**/*") } - tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' - options.incremental = true - - // setup compile options. we specifically want to suppress usage of "Unsafe" - options.compilerArgs = ['-XDignore.symbol.file', '-Xlint:deprecation'] + tasks.withType { + options.encoding = "UTF-8" + options.isIncremental = true } } + /////////////////////////////// ////// Task defaults /////////////////////////////// -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' +tasks.withType { + options.encoding = "UTF-8" + + sourceCompatibility = Extras.JAVA_VERSION + targetCompatibility = Extras.JAVA_VERSION } -tasks.withType(Jar) { - duplicatesStrategy DuplicatesStrategy.FAIL - - manifest { - attributes['Implementation-Version'] = version - attributes['Build-Date'] = Instant.now().toString() - } +tasks.withType { + duplicatesStrategy = DuplicatesStrategy.FAIL } + /////////////////////////////// ////// UTILITIES COMPILE (for inclusion into jars) /////////////////////////////// -static String[] javaFile(String... fileNames) { - def fileList = [] as ArrayList +fun javaFile(vararg fileNames: String): Iterable { + val fileList = ArrayList() - for (name in fileNames) { - def fixed = name.replace('.', '/') + '.java' - fileList.add(fixed) + fileNames.forEach { name -> + fileList.add(name.replace('.', '/') + ".java") } return fileList } -task compileUtils(type: JavaCompile) { +task("compileUtils") { // we don't want the default include of **/*.java - getIncludes().clear() + includes.clear() - source = Collections.singletonList('../Utilities/src') - include javaFile('dorkbox.util.OS', - 'dorkbox.util.OSType', - 'dorkbox.util.Property', - 'dorkbox.util.NamedThreadFactory', - 'dorkbox.util.DelayTimer', - 'dorkbox.util.IO', - 'dorkbox.util.FileUtil', - 'dorkbox.util.Base64Fast', - 'dorkbox.util.RandomUtil', - 'dorkbox.util.Sys', - 'dorkbox.util.HashUtil', - 'dorkbox.util.NativeLoader', + source = fileTree("../Utilities/src") + include(javaFile( + "dorkbox.util.OS", + "dorkbox.util.OSType", + "dorkbox.util.Property", + "dorkbox.util.NamedThreadFactory", + "dorkbox.util.DelayTimer", + "dorkbox.util.IO", + "dorkbox.util.FileUtil", + "dorkbox.util.Base64Fast", + "dorkbox.util.RandomUtil", + "dorkbox.util.Sys", + "dorkbox.util.HashUtil", + "dorkbox.util.NativeLoader", - 'dorkbox.util.FastThreadLocal', - 'dorkbox.util.LocationResolver', - 'dorkbox.util.MathUtil', - 'dorkbox.util.MersenneTwisterFast', - 'dorkbox.util.NativeLoader', - 'dorkbox.util.NativeLoader', + "dorkbox.util.FastThreadLocal", + "dorkbox.util.LocationResolver", + "dorkbox.util.MathUtil", + "dorkbox.util.MersenneTwisterFast", + "dorkbox.util.NativeLoader", + "dorkbox.util.NativeLoader", - 'dorkbox.util.generics.TypeResolver', - 'dorkbox.util.generics.DefaultMethodHelper', // this class must be compiled java 8+ - 'dorkbox.util.generics.ClassHelper', + "dorkbox.util.generics.TypeResolver", + // "dorkbox.util.generics.DefaultMethodHelper", // this class must be compiled java 8+ + "dorkbox.util.generics.ClassHelper", - 'dorkbox.util.bytes.BigEndian', - 'dorkbox.util.bytes.UByte', - 'dorkbox.util.bytes.UInteger', - 'dorkbox.util.bytes.ULong', - 'dorkbox.util.bytes.Unsigned', - 'dorkbox.util.bytes.UNumber', - 'dorkbox.util.bytes.UShort', - 'dorkbox.util.bytes.ByteArrayWrapper', - 'dorkbox.util.bytes.OptimizeUtilsByteArray', - 'dorkbox.util.bytes.OptimizeUtilsByteBuf', + "dorkbox.util.bytes.BigEndian", + "dorkbox.util.bytes.UByte", + "dorkbox.util.bytes.UInteger", + "dorkbox.util.bytes.ULong", + "dorkbox.util.bytes.Unsigned", + "dorkbox.util.bytes.UNumber", + "dorkbox.util.bytes.UShort", + "dorkbox.util.bytes.ByteArrayWrapper", + "dorkbox.util.bytes.OptimizeUtilsByteArray", + "dorkbox.util.bytes.OptimizeUtilsByteBuf", - 'dorkbox.util.exceptions.SecurityException', - 'dorkbox.util.exceptions.InitializationException', + "dorkbox.util.exceptions.SecurityException", + "dorkbox.util.exceptions.InitializationException", - 'dorkbox.util.collections.ObjectIntMap', - 'dorkbox.util.collections.IntMap', - 'dorkbox.util.collections.IntArray', - 'dorkbox.util.collections.ConcurrentIterator', - 'dorkbox.util.collections.ConcurrentEntry', - 'dorkbox.util.collections.LockFreeHashMap', - 'dorkbox.util.collections.LockFreeIntMap', - 'dorkbox.util.collections.LockFreeIntBiMap', - 'dorkbox.util.collections.LockFreeObjectIntBiMap', + "dorkbox.util.collections.ObjectIntMap", + "dorkbox.util.collections.IntMap", + "dorkbox.util.collections.IntArray", + "dorkbox.util.collections.ConcurrentIterator", + "dorkbox.util.collections.ConcurrentEntry", + "dorkbox.util.collections.LockFreeHashMap", + "dorkbox.util.collections.LockFreeIntMap", + "dorkbox.util.collections.LockFreeIntBiMap", + "dorkbox.util.collections.LockFreeObjectIntBiMap", - 'dorkbox.util.crypto.CryptoECC', - 'dorkbox.util.crypto.CryptoAES') + "dorkbox.util.crypto.CryptoECC", + "dorkbox.util.crypto.CryptoAES")) // entire packages/directories - include('dorkbox/util/serialization/**/*.java') - include('dorkbox/util/entropy/**/*.java') - include('dorkbox/util/storage/**/*.java') + include("dorkbox/util/serialization/**/*.java") + include("dorkbox/util/entropy/**/*.java") + include("dorkbox/util/storage/**/*.java") - classpath = sourceSets.main.compileClasspath + classpath = sourceSets["main"].compileClasspath destinationDir = file("$rootDir/build/classes_utilities") } -/////////////////////////////// -////// Compile files to different target version -/////////////////////////////// -//task compileFilesToJava8(type: JavaCompile) { -// // we don't want the default include of **/*.java -// getIncludes().clear() -// -// source = Collections.singletonList('../Utilities/src') -// -// include 'dorkbox/util/generics/DefaultMethodHelper.java' -// -// sourceCompatibility = 1.8 -// targetCompatibility = 1.8 -// -// classpath = sourceSets.main.compileClasspath -// destinationDir = sourceSets.main.output.classesDir -//} +///////////////////////////////// +//////// Compile some of the files to java 8 +///////////////////////////////// +task("compileUtilsJava8") { + // we don't want the default include of **/*.java + includes.clear() + + source = fileTree("../Utilities/src") + + // this class must be compiled java 8+ + include(javaFile("dorkbox.util.generics.DefaultMethodHelper")) + + sourceCompatibility = JavaVersion.VERSION_1_8.toString() + targetCompatibility = JavaVersion.VERSION_1_8.toString() + + classpath = sourceSets["main"].compileClasspath + destinationDir = file("$rootDir/build/classes_utilities") + + println("Compiling $includes to Java $sourceCompatibility") +} + +tasks.compileJava.get().apply { + println("Compiling classes to Java $sourceCompatibility") +} + /////////////////////////////// ////// Jar Tasks /////////////////////////////// -jar { - dependsOn compileUtils +tasks.jar.get().apply { + dependsOn("compileUtils", "compileUtilsJava8") // include applicable class files from subset of Utilities project - from compileUtils.destinationDir + from((tasks["compileUtils"] as JavaCompile).destinationDir) + + manifest { + // https://docs.oracle.com/javase/tutorial/deployment/jar/packageman.html + attributes["Name"] = Extras.name + + attributes["Specification-Title"] = Extras.name + attributes["Specification-Version"] = Extras.version + attributes["Specification-Vendor"] = Extras.vendor + + attributes["Implementation-Title"] = "${Extras.group}.${Extras.id}" + attributes["Implementation-Version"] = Extras.buildDate + attributes["Implementation-Vendor"] = Extras.vendor + } } -///////////////////////////// -//// Maven Publishing + Release -///////////////////////////// -task sourceJar(type: Jar) { +/////////////////////////////// +////// Maven Publishing + Release +/////////////////////////////// +val sourceJar = task("sourceJar") { description = "Creates a JAR that contains the source code." - from sourceSets.main.java + from(sourceSets["main"].java) - classifier = "sources" + archiveClassifier.set("sources") } -task javaDocJar(type: Jar) { +val javaDocJar = task("javaDocJar") { description = "Creates a JAR that contains the javadocs." - classifier = "javadoc" + archiveClassifier.set("javadoc") } -// for testing, we don't publish to maven central, but only to local maven + +/////////////////////////////// +// functions to make changing the maven POM easier +@Suppress("UNCHECKED_CAST") +fun org.gradle.api.publish.maven.MavenPom.removeDependenciesByArtifactId(vararg names: String) { + withXml { + (asNode().get("dependencies") as List).forEach {deps -> + (deps.children() as List).filter { it -> + val text = (it.get("artifactId") as List).firstOrNull()?.text() + if (text == null) { + false + } else { + names.contains(text) + } + }.forEach { node-> + node.parent().remove(node) + } + } + } +} + +/////////////////////////////// +////// PUBLISH TO SONATYPE / MAVEN CENTRAL +////// +////// TESTING : local maven repo +////// +////// RELEASE : sonatype / maven central, then +/////////////////////////////// publishing { publications { - maven(MavenPublication) { - from components.java + create("maven") { + groupId = Extras.group + artifactId = Extras.id + version = Extras.version + + from(components["java"]) - artifact(javaDocJar) artifact(sourceJar) - - groupId project.group - artifactId project.ext.name - version project.version + artifact(javaDocJar) pom { - withXml { - // eliminate logback and utilities (no need in maven POMs) - def root = asNode() + name.set(Extras.name) + description.set(Extras.description) + url.set(Extras.url) - root.dependencies.'*'.findAll() { - it.artifactId.text() == "Utilities" - }.each() { - it.parent().remove(it) - } - } - - name = project.ext.name - url = project.ext.url - description = project.description + removeDependenciesByArtifactId("Utilities") issueManagement { - url = "${project.ext.url}/issues".toString() - system = 'Gitea Issues' + url.set("${Extras.url}/issues") + system.set("Gitea Issues") } - organization { - name = 'dorkbox, llc' - url = 'https://dorkbox.com' + name.set(Extras.vendor) + url.set("https://dorkbox.com") } - developers { developer { - name = 'dorkbox, llc' - email = 'email@dorkbox.com' + id.set("dorkbox") + name.set(Extras.vendor) + email.set("email@dorkbox.com") } } - scm { - url = project.ext.url - connection = "scm:${project.ext.url}.git".toString() + url.set(Extras.url) + connection.set("scm:${Extras.url}.git") } } + + } + } + + + repositories { + maven { + setUrl("https://oss.sonatype.org/service/local/staging/deploy/maven2") + credentials { + username = Extras.sonatypeUsername + password = Extras.sonatypePassword + } } } - repositories { - maven { - url "https://oss.sonatype.org/service/local/staging/deploy/maven2" - credentials { - username sonatypeUsername - password sonatypePassword - } + + tasks.withType { + onlyIf { + publication == publishing.publications["maven"] && repository == publishing.repositories["maven"] } } + + tasks.withType { + onlyIf { + publication == publishing.publications["maven"] + } + } + + // output the release URL in the console + tasks["releaseRepository"].doLast { + val url = "https://oss.sonatype.org/content/repositories/releases/" + val projectName = Extras.group.replace('.', '/') + val name = Extras.name + val version = Extras.version + + println("Maven URL: $url$projectName/$name/$version/") + } } nexusStaging { - username sonatypeUsername - password sonatypePassword + username = Extras.sonatypeUsername + password = Extras.sonatypePassword } signing { - sign publishing.publications.maven + sign(publishing.publications["maven"]) } -// output the release URL in the console -releaseRepository.doLast { - def URL = 'https://oss.sonatype.org/content/repositories/releases/' - def projectName = project.group.toString().replaceAll('\\.', '/') - def name = project.ext.name - def version = project.version - - println("Maven URL: ${URL}${projectName}/${name}/${version}/") -} - -// 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.maven - } -} -tasks.withType(PublishToMavenLocal) { - onlyIf { - publication == publishing.publications.maven +/////////////////////////////// +///// Prevent anything other than a release from showing version updates +//// https://github.com/ben-manes/gradle-versions-plugin/blob/master/README.md +/////////////////////////////// +tasks.named("dependencyUpdates") { + resolutionStrategy { + componentSelection { + all { + val rejected = listOf("alpha", "beta", "rc", "cr", "m", "preview") + .map { qualifier -> Regex("(?i).*[.-]$qualifier[.\\d-]*") } + .any { it.matches(candidate.version) } + if (rejected) { + reject("Release candidate") + } + } + } } + + // optional parameters + checkForGradleUpdate = true } -///////////////////////////// -//// Gradle Wrapper Configuration. -/// Run this task, then refresh the gradle project -///////////////////////////// -task updateWrapper(type: Wrapper) { - gradleVersion = '5.1' +/////////////////////////////// +////// Gradle Wrapper Configuration. +///// Run this task, then refresh the gradle project +/////////////////////////////// +val wrapperUpdate by tasks.creating(Wrapper::class) { + gradleVersion = "5.1.1" distributionUrl = distributionUrl.replace("bin", "all") - setDistributionType(Wrapper.DistributionType.ALL) } + + diff --git a/gradlew b/gradlew index cccdd3d5..af6708ff 100755 --- a/gradlew +++ b/gradlew @@ -28,7 +28,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" diff --git a/gradlew.bat b/gradlew.bat index f9553162..6d57edc7 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/settings.gradle.kts b/settings.gradle.kts index 6b0a7790..0d36e437 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,9 +16,9 @@ include("Utilities") for (project in rootProject.children) { - project.projectDir = file("../$project.name") + project.projectDir = file("../${project.name}") project.buildFileName = "utilities.gradle" - assert (project.projectDir.directory) - assert (project.buildFile.file) + assert (project.projectDir.isDirectory) + assert (project.buildFile.isFile) }