summaryrefslogblamecommitdiff
path: root/cli/build.gradle
blob: c0d1b898dff475eedc0f62e4a7ac37e82509dd5f (plain) (tree)
1
2
3
4
5
6
7
8
9




                                                                                                                                             
                                         


                                             
 
                                                                        






























                                                                      
                                                                                                                                              



























































                                                                                                                                                                                                                                                      






























































                                                                                                                            
 
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}"
					}
				}
			}
		}
	}
}