WIP getting gradle kotlin-dsl to build project

This commit is contained in:
nathan 2018-04-27 22:06:53 +02:00
parent eaefa67172
commit 4970583d2e

View File

@ -4,6 +4,7 @@ import org.jetbrains.kotlin.gradle.dsl.Coroutines
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper.getTestVariants import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper.getTestVariants
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper.srcDir import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper.srcDir
import java.time.Instant
plugins { plugins {
java java
@ -19,6 +20,8 @@ apply {
kotlin.experimental.coroutines = Coroutines.ENABLE kotlin.experimental.coroutines = Coroutines.ENABLE
// version = getWPILibVersion() ?: getVersionFromGitTag(fallback = "0.0.0") // fall back to git describe if no WPILib version is set
group = "com.dorkbox" group = "com.dorkbox"
version = "3.13-SNAPSHOT" version = "3.13-SNAPSHOT"
description = """Dorkbox-SystemTray""" description = """Dorkbox-SystemTray"""
@ -29,23 +32,40 @@ java {
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8
} }
//configure<JavaPluginConvention> {
// setSourceCompatibility(1.7)
// setTargetCompatibility(1.7)
//// if (project.hasProperty("env")) {
//// var env = project.property("env");
//// sourceSets.getByName("main")
//// .resources.srcDirs("src/main/profile/" + env)
//// }
//}
// make working with sourcesets easier // make working with sourceSets easier
val sourceSets = java.sourceSets val sourceSets = java.sourceSets
fun sourceSets(block: SourceSetContainer.() -> Unit) = sourceSets.apply(block) fun sourceSets(block: SourceSetContainer.() -> Unit) = sourceSets.apply(block)
val SourceSetContainer.main: SourceSet get() = getByName("main") val SourceSetContainer.main: SourceSet get() = maybeCreate("main")
fun SourceSetContainer.main(block: SourceSet.() -> Unit) = main.apply(block) fun SourceSetContainer.main(block: SourceSet.() -> Unit) = main.apply(block)
sourceSets.create("utilities") val SourceSetContainer.test: SourceSet get() = maybeCreate("test")
val SourceSetContainer.utilities: SourceSet get() = getByName("utilities") fun SourceSetContainer.test(block: SourceSet.() -> Unit) = test.apply(block)
val SourceSetContainer.utilities: SourceSet get() = maybeCreate("utilities")
fun SourceSetContainer.utilities(block: SourceSet.() -> Unit) = utilities.apply(block) fun SourceSetContainer.utilities(block: SourceSet.() -> Unit) = utilities.apply(block)
val SourceSetContainer.test: SourceSet get() = getByName("test") // testing jars
fun SourceSetContainer.test(block: SourceSet.() -> Unit) = test.apply(block) val SourceSetContainer.swingExample: SourceSet get() = maybeCreate("swingExample")
fun SourceSetContainer.swingExample(block: SourceSet.() -> Unit) = swingExample.apply(block)
val org.gradle.api.tasks.SourceSetContainer.javaFxExample: SourceSet get() = maybeCreate("javaFxExample")
fun SourceSetContainer.javaFxExample(block: SourceSet.() -> Unit) = javaFxExample.apply(block)
//val org.gradle.api.tasks.SourceSetContainer.testSwt: SourceSet get() = maybeCreate("testSwt")
//fun SourceSetContainer.testSwt(block: SourceSet.() -> Unit) = testSwt.apply(block)
//val SourceSet.kotlin: SourceDirectorySet //val SourceSet.kotlin: SourceDirectorySet
// get() = (this as HasConvention).convention.getPlugin<KotlinSourceSet>().kotlin // get() = (this as HasConvention).convention.getPlugin<KotlinSourceSet>().kotlin
var SourceDirectorySet.sourceDirs: Iterable<File> var SourceDirectorySet.sourceDirs: Iterable<File>
get() = srcDirs get() = srcDirs
set(value) { set(value) {
@ -53,7 +73,6 @@ var SourceDirectorySet.sourceDirs: Iterable<File>
} }
fun javaFile(vararg fileNames: String): Iterable<String> { fun javaFile(vararg fileNames: String): Iterable<String> {
var fileList = ArrayList<String>() var fileList = ArrayList<String>()
@ -65,95 +84,113 @@ fun javaFile(vararg fileNames: String): Iterable<String> {
return fileList return fileList
} }
sourceSets { sourceSets {
utilities { utilities {
java { java {
sourceDirs = files("../Utilities/src") sourceDirs = files("../Utilities/src")
include(javaFile( include(javaFile("dorkbox.util.SwingUtil",
"dorkbox.util.SwingUtil", "dorkbox.util.OS",
"dorkbox.util.OS", "dorkbox.util.OSUtil",
"dorkbox.util.OSUtil", "dorkbox.util.OSType",
"dorkbox.util.OSType", "dorkbox.util.ImageResizeUtil",
"dorkbox.util.ImageResizeUtil", "dorkbox.util.ImageUtil",
"dorkbox.util.ImageUtil", "dorkbox.util.CacheUtil",
"dorkbox.util.CacheUtil", "dorkbox.util.IO",
"dorkbox.util.IO", "dorkbox.util.JavaFX",
"dorkbox.util.JavaFX", "dorkbox.util.Property",
"dorkbox.util.Property", "dorkbox.util.Swt",
"dorkbox.util.Swt", "dorkbox.util.Keep",
"dorkbox.util.Keep", "dorkbox.util.FontUtil",
"dorkbox.util.FontUtil", "dorkbox.util.ScreenUtil",
"dorkbox.util.ScreenUtil", "dorkbox.util.ClassLoaderUtil",
"dorkbox.util.ClassLoaderUtil", "dorkbox.util.NamedThreadFactory",
"dorkbox.util.NamedThreadFactory", "dorkbox.util.ActionHandlerLong",
"dorkbox.util.ActionHandlerLong", "dorkbox.util.FileUtil",
"dorkbox.util.FileUtil", "dorkbox.util.MathUtil",
"dorkbox.util.MathUtil", "dorkbox.util.LocationResolver",
"dorkbox.util.LocationResolver", "dorkbox.util.Desktop"))
"dorkbox.util.Desktop"
// "", // entire packages/directories
))
// entire packages/directory
include("dorkbox/util/jna/**/*") include("dorkbox/util/jna/**/*")
include("dorkbox/util/windows/**/*") include("dorkbox/util/windows/**/*")
include("dorkbox/util/swing/**/*") include("dorkbox/util/swing/**/*")
// include("jna/linux/GObject.java")
filter.includes.clear()
// filter.includes.add("OS.java")
// filter.includes.add("ImageResizeUtil.java")
// filter.includes.add("jna/linux/GObject.java")
} }
// java.sourceDirs = files("../Utilities/src")
// java.source(get("OS", "OSType"))
// resources.sourceDirs = get("OS", "OSType")
} }
main { main {
java { java {
sourceDirs = files("src") sourceDirs = files("src")
java.srcDir(sourceSets.utilities.java) srcDir(sourceSets.utilities.java)
resources {
sourceDirs = files("src")
include("dorkbox/systemTray/gnomeShell/extension.js", "dorkbox/systemTray/util/error_32.png")
}
} }
} }
test { test {
java.sourceDirs = files("test") java.sourceDirs = files("test")
// resources.sourceDirs = files("test/res")
} }
}
// setup the sources jar to use all of the sources specified in our "main" source set swingExample {
val sourcesJar by tasks.creating(Jar::class) { java {
classifier = "sources" sourceDirs = files("test")
from(java.sourceSets["main"].allSource) include(javaFile("dorkbox.TestTray", "dorkbox.CustomSwingUI"))
}
publishing { srcDir(sourceSets.main.allJava)
(publications) { compileClasspath = sourceSets.main.compileClasspath
"mavenJava"(MavenPublication::class) {
from(components["java"]) resources {
artifactId = "SystemTray" sourceDirs = files("test")
artifact(sourcesJar) include("dorkbox/*.png")
}
}
}
javaFxExample {
java {
sourceDirs = files("test")
include(javaFile("dorkbox.TestTray", "dorkbox.TestTrayJavaFX", "dorkbox.CustomSwingUI"))
srcDir(sourceSets.main.allJava)
compileClasspath = sourceSets.main.compileClasspath
resources {
sourceDirs = files("test")
include("dorkbox/*.png")
}
} }
} }
} }
repositories { repositories {
mavenLocal() mavenLocal()
maven { setUrl("http://repo.maven.apache.org/maven2") } mavenCentral()
maven { setUrl("http://cfmlprojects.org/artifacts") } }
project(":Utilities") {
tasks.withType<Test> {
// want to remove utilities project from unit tests. It's unnecessary to run unit tests for the entire Utilities project
exclude("**/*")
}
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
options.isIncremental = true
options.isFork = true
options.forkOptions.executable = "javac"
// setup compile options. we specifically want to suppress usage of "Unsafe"
options.compilerArgs = listOf("-XDignore.symbol.file", "-Xlint:deprecation")
}
} }
dependencies { dependencies {
// compile(project(":Utilities")) { compile(project(":Utilities")) {
// isTransitive = false // don't include any of the project dependencies for anything
// } isTransitive = false
}
compile(group = "com.dorkbox", name = "ShellExecutor", version = "1.1+") compile(group = "com.dorkbox", name = "ShellExecutor", version = "1.1+")
compile(group = "ch.qos.logback", name = "logback-classic", version = "1.1.6") compile(group = "ch.qos.logback", name = "logback-classic", version = "1.1.6")
@ -165,52 +202,265 @@ dependencies {
testCompileOnly(group = "org.eclipse.swt", name = "org.eclipse.swt.gtk.linux.x86_64", version = "4.3") testCompileOnly(group = "org.eclipse.swt", name = "org.eclipse.swt.gtk.linux.x86_64", version = "4.3")
} }
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
// suppressWarnings = true
// setup compile options. we specifically want to suppress usage of "Unsafe"
}
tasks.withType<Jar> {
manifest {
attributes["Implementation-Version"] = version
attributes["Built-Date"] = Instant.now().toString()
}
}
task<Jar>("_swingExampleJar") {
dependsOn("compileSwingExampleJava")
baseName = "SwingExample"
from(sourceSets.swingExample.output.classesDirs)
from(sourceSets.swingExample.output.resourcesDir)
// makes it a fat-jar, we filter out the "Utilities" project (because we manually
// This line of code recursively collects and copies all of a project's files and adds them to the JAR itself.
// One can extend this task, to skip certain files or particular types at will
from(configurations.runtime
.filter({ it.nameWithoutExtension != "Utilities" })
.map({ if (it.isDirectory) it else zipTree(it) }))
with(tasks["jar"] as CopySpec)
manifest {
attributes["Main-Class"] = "dorkbox.TestTray"
}
}
task<Jar>("_javaFxExampleJar") {
dependsOn("compileJavaFxExampleJava")
baseName = "JavaFxExample"
from(sourceSets.javaFxExample.output.classesDirs)
from(sourceSets.javaFxExample.output.resourcesDir)
// makes it a fat-jar, we filter out the "Utilities" project (because we manually
// This line of code recursively collects and copies all of a project's files and adds them to the JAR itself.
// One can extend this task, to skip certain files or particular types at will
from(configurations.runtime
.filter({ it.nameWithoutExtension != "Utilities" })
.map({ if (it.isDirectory) it else zipTree(it) }))
with(tasks["jar"] as CopySpec)
manifest {
attributes["Main-Class"] = "dorkbox.TestTrayJavaFX"
}
}
//task<JavaCompile>("Java") {
// source = sourceSets.main.allSource
// classpath = sourceSets.main.compileClasspath
// destinationDir = sourceSets.main.java.outputDir
//}
//
//project(":Swing") {
// sourceSets {
// main {
// java {
// sourceDirs = files("test")
// include(javaFile("dorkbox.TestTray", "dorkbox.CustomSwingUI"))
//
//// java.srcDir(sourceSets.main.java)
//// java.srcDir(sourceSets.utilities.java)
//
// resources {
// sourceDirs = files("test")
// include("dorkbox/*.png")
// }
// }
// }
// }
// dependencies {
//// compile(project (":"))
// }
//}
// val compileKotlin: KotlinCompile by tasks // val compileKotlin: KotlinCompile by tasks
// compileKotlin.kotlinOptions.jvmTarget = "1.8" // compileKotlin.kotlinOptions.jvmTarget = "1.8"
/* -------------------------------------------------------------------------------------------
//test { Tasks and publishing
// // listen to events in the test execution lifecycle ------------------------------------------------------------------------------------------- */
// beforeTest { descriptor -> //val sourceJar = task<Jar>("sourceJar") {
// logger.lifecycle("Running test: " + descriptor) // description = "Creates a JAR that contains the source code."
// from(java.sourceSets["main"].allSource)
// classifier = "sources"
//}
//val javaDocJar = task<Jar>("javaDocJar") {
// dependsOn("javadoc")
// description = "Creates a JAR that contains the javadocs."
// from(java.docsDir)
// classifier = "javadoc"
//}
//
//publishing {
// (publications) {
// "mavenJava"(MavenPublication::class) {
// from(components["java"])
// artifactId = "SystemTray"
// artifact(javaDocJar)
// artifact(sourceJar)
// }
// } // }
//} //}
task("hello-src-set") { //task<JavaCompile>("compileTestJavafx") {
var files: Set<File> = sourceSets.main.java.srcDirs // dependsOn("compileJava")
println(files) //
// source = sourceSets.testJavafx.allSource
// classpath = sourceSets.main.compileClasspath
// destinationDir = sourceSets.testJavafx.java.outputDir
//}
println("Utilities") //
println(sourceSets.utilities.java.filter.includes) //task<Jar>("_testSwingJar") {
// dependsOn(task<JavaCompile>("compileTestSwing") {
files = sourceSets.utilities.java.srcDirs //// dependsOn("compileJava")
println(files) //
} // sourceCompatibility = "1.7"
// targetCompatibility = "1.7"
tasks.withType<JavaCompile> { //
println("Configuring $name in project ${project.name}...") // source = sourceSets.testSwing.allJava
// UTF-8 characters are used in menus // classpath = sourceSets.main.compileClasspath
options.encoding = "UTF-8" // destinationDir = sourceSets.testSwing.java.outputDir
// })
// suppressWarnings = true //
// options.compilerArgs.add(file("../Utilities/src/dorkbox/util/OS.java").absolutePath) // baseName = "testSwing"
// setup compile options. we specifically want to suppress usage of "Unsafe" //
// val compileJava: JavaCompile by tasks //
//compileJava. //
// println("Compiler Args") // println("source")
// for (arg in options.compilerArgs) { // sourceSets.main.compileClasspath.forEach({ it: File? -> println(" " + it) })
// println(arg) // from(sourceSets.testSwing.output.classesDirs)
//
// // makes it a fat-jar
// // This line of code recursively collects and copies all of a project's files and adds them to the JAR itself.
// // One can extend this task, to skip certain files or particular types at will
// // specifically, we filter out the "Utilities" project
//// from(configurations.runtime
//// .filter({ it.nameWithoutExtension != "Utilities" })
//// .map({ if (it.isDirectory) it else zipTree(it) }))
// with(tasks["jar"] as CopySpec)
//
//
// manifest {
// attributes["Main-Class"] = "dorkbox.TestTray"
// } // }
//}
//
/*
project(":SwingTest") {
sourceSets {
}
// task<JavaCompile>("compileTestSwt") {
// dependsOn("compileJava")
//
// source = sourceSets.testSwt.allSource
// classpath = sourceSets.main.compileClasspath
// destinationDir = sourceSets.testSwt.java.outputDir
// }
//
// task<Jar>("testJavaFXJar") {
// dependsOn("compileTestJavaFX")
//
// baseName = "testJavaFx"
//
// from(sourceSets.testJavaFX.resources)
//
// // makes it a fat-jar
// // This line of code recursively collects and copies all of a project's files and adds them to the JAR itself.
// // One can extend this task, to skip certain files or particular types at will
// // specifically, we filter out the "Utilities" project
// from(configurations.runtime.filter({ it.nameWithoutExtension != "Utilities" }).map({ if (it.isDirectory) it else zipTree(it) }))
// with(tasks["jar"] as CopySpec)
//
//
// manifest {
// attributes["Main-Class"] = "dorkbox.TestTrayJavaFX"
// }
// }
//
// task<Jar>("testSwtJar") {
// dependsOn("compileTestSwt")
//
// baseName = "testSwt"
//
// from(sourceSets.testSwt.resources)
//
// // makes it a fat-jar
// // This line of code recursively collects and copies all of a project's files and adds them to the JAR itself.
// // One can extend this task, to skip certain files or particular types at will
// // specifically, we filter out the "Utilities" project
// from(configurations.runtime.filter({ it.nameWithoutExtension != "Utilities" }).map({ if (it.isDirectory) it else zipTree(it) }))
// with(tasks["jar"] as CopySpec)
//
//
// manifest {
// attributes["Main-Class"] = "dorkbox.TestTraySwt"
// }
// }
//
//
} }
project(":Utilities") { */
tasks.withType<Test> {
// want to remove utilities project from unit tests. It's unnecessary to run unit tests for the entire Utilities project //
exclude("**/*") //task("hello-src-set") {
} // var files: Set<File> = sourceSets.main.java.srcDirs
} // println(files)
//
// println("Utilities")
// println(sourceSets.utilities.java.filter.includes)
//
// files = sourceSets.utilities.java.srcDirs
// println(files)
//}
//shadowJar { //shadowJar {