apply plugin: 'maven'
apply plugin: 'signing'
def isMavenDeployable = hasProperty('mavenRepositoryUrl') && hasProperty('mavenRepositoryUsername') && hasProperty('mavenRepositoryPassword')
evaluationDependsOn(':stringmetric-core')
dependencies {
compile project(':stringmetric-core')
testCompile project(':stringmetric-core').sourceSets.test.output
}
sourceSets {
main {
output.resourcesDir "${project.buildDir}/classes/main"
java {
srcDir 'source/core/java'
}
resources {
srcDir 'source/core/resource'
}
scala {
srcDir 'source/core/scala'
}
}
test {
output.resourcesDir "${project.buildDir}/classes/test"
java {
srcDir 'source/test/java'
}
resources {
srcDir 'source/test/resource'
}
scala {
srcDir 'source/test/scala'
}
}
}
task tar(description: 'Assembles a compressed tar archive of source files.', dependsOn: [':stringmetric-cli:jar', ':stringmetric-core:jar']) {
ext.sourcePath = "${project.projectDir}/source/core/scala"
ext.outputPath = "${project.buildDir}"
ext.workingPath = "${project.buildDir}/${project.name}"
inputs.dir new File(sourcePath)
outputs.dir new File(outputPath, 'generated')
outputs.upToDateWhen {
new File(workingPath).isDirectory()
}
doLast {
// Clean up working directory and tar from last execution, should they exist.
ant.delete(dir: workingPath, failOnError: false)
ant.delete(file: "${project.buildDir}/${project.name}.tar.gz", failOnError: false)
// Create project working directory.
ant.mkdir(dir: workingPath)
// Create scalascript header file.
ant.echo(file: "${workingPath}/scalascript.sh", message: '#!/bin/bash\ndir="`dirname \\"$0\\"`"\ndir="`( cd \\"$dir\\" && pwd )`"\ncp=`echo $dir/*.jar|sed \'s/ /:/g\'`\nexec scala -classpath "$cp" -savecompiled "$0" "$@"\n!#\n//')
// Copy source files to working directory.
ant.copy(toDir: workingPath, force: true, overwrite: true) {
fileset(dir: sourcePath) {
exclude(name: '**/cli/*.scala')
exclude(name: '**/package.scala')
}
filterchain {
concatfilter(prepend: "${workingPath}/scalascript.sh")
}
}
// Delete scalascript header file.
ant.delete(file: "${workingPath}/scalascript.sh")
// Flatten and remove file extension.
ant.move(toDir: workingPath) {
fileset(dir: workingPath)
chainedmapper {
mapper(type: 'flatten')
mapper(from: '*.scala', to: '*', type: 'glob')
}
}
// Clean up emtpy folder(s) from flatten.
ant.delete(dir: "${workingPath}/org", includeEmptyDirs: true)
// Copy project jars into place.
ant.copy(toDir: workingPath, force: true, overwrite: true) {
fileset(dir: "${project.buildDir}/libs")
}
ant.copy(toDir: workingPath, force: true, overwrite: true) {
fileset(dir: "${project(':stringmetric-core').buildDir}/libs")
}
// Assemble compressed tar.
ant.tar(compression: 'gzip', destFile: "${project.buildDir}/${project.name}.tar.gz") {
tarfileset(dir: workingPath, fileMode: 755, prefix: project.name)
}
}
}
if (isMavenDeployable) {
signing {
sign configurations.archives
}
task scaladocJar(type: Jar, dependsOn: scaladoc) {
classifier = 'javadoc'
from "${project.buildDir}/docs/scaladoc"
}
task sourceJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives jar
archives scaladocJar
archives sourceJar
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
repository(url: mavenRepositoryUrl) {
authentication(userName: mavenRepositoryUsername, password: mavenRepositoryPassword)
}
pom.project {
description "${parent.project.description}"
groupId "${parent.project.group}"
name "${project.name}"
packaging 'jar'
url "${parent.project.url}"
version "${parent.project.version}"
developers {
developer {
id 'rockymadden'
name 'Rocky Madden'
}
}
licenses {
license {
name 'Apache License v2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
scm {
url "${parent.project.scm}"
connection "${parent.project.scm}"
}
}
}
}
}
}