Build refactoring.

This commit is contained in:
Luke Taylor 2010-08-04 02:04:40 +01:00
parent 6e831d6504
commit 74b66591e9
7 changed files with 228 additions and 247 deletions

View File

@ -1,14 +1,5 @@
apply plugin: 'base' apply plugin: 'base'
buildscript {
repositories {
mavenRepo urls: 'http://gradle.artifactoryonline.com/gradle/plugins'
}
dependencies {
classpath "org.gradle.plugins:gradle-idea-plugin:0.3"
}
}
allprojects { allprojects {
version = '3.1.0.CI-SNAPSHOT' version = '3.1.0.CI-SNAPSHOT'
releaseBuild = version.endsWith('RELEASE') releaseBuild = version.endsWith('RELEASE')
@ -27,7 +18,41 @@ allprojects {
} }
} }
allprojects { javaProjects = subprojects.findAll { project -> project.name != 'docs' && project.name != 'faq' && project.name != 'manual' }
sampleProjects = subprojects.findAll { project -> project.name.startsWith('spring-security-samples') }
itestProjects = subprojects.findAll { project -> project.name.startsWith('itest') }
coreModuleProjects = javaProjects - sampleProjects - itestProjects
aspectjProjects = [project(':spring-security-aspects'), project(':spring-security-samples-aspectj')]
releaseProjects = coreModuleProjects + project(':spring-security-aspects')
configure(javaProjects) {
apply from: "$rootDir/gradle/javaprojects.gradle"
}
configure(coreModuleProjects) {
apply from: "$rootDir/gradle/bundlor.gradle"
apply from: "$rootDir/gradle/maven.gradle"
// Gives better names in structure101 jar diagram
sourceSets.main.classesDir = new File(buildDir, "classes/" + project.name.substring("spring-security".length() + 1))
}
configure (aspectjProjects) {
apply from: "$rootDir/gradle/aspectj.gradle"
}
configurations {
antlibs
}
dependencies {
antlibs "org.springframework.build:org.springframework.build.aws.ant:3.0.3.RELEASE",
"net.java.dev.jets3t:jets3t:0.6.1"
}
apply from: "$rootDir/gradle/dist.gradle"
apply plugin: 'idea'
configure(javaProjects) {
apply plugin: 'idea' apply plugin: 'idea'
ideaModule { ideaModule {
downloadJavadoc=false downloadJavadoc=false
@ -71,194 +96,4 @@ ideaWorkspace {
} }
} }
*/ */
configure(javaProjects) {
apply from: "$rootDir/gradle/javaprojects.gradle"
}
configure(coreModuleProjects) {
apply from: "$rootDir/gradle/bundlor.gradle"
apply from: "$rootDir/gradle/maven.gradle"
// Gives better names in structure101 jar diagram
sourceSets.main.classesDir = new File(buildDir, "classes/" + project.name.substring("spring-security".length() + 1))
}
configure (aspectjProjects) {
apply from: "$rootDir/gradle/aspectj.gradle"
}
configurations {
antlibs
}
dependencies {
antlibs "org.springframework.build:org.springframework.build.aws.ant:3.0.3.RELEASE",
"net.java.dev.jets3t:jets3t:0.6.1"
}
task apidocs(type: Javadoc) {
destinationDir = new File(buildDir, 'apidocs')
title = "Spring Security $version API"
optionsFile = file("$buildDir/tmp/javadoc.options")
source coreModuleProjects.collect {project ->
project.sourceSets.main.allJava
}
classpath = files(coreModuleProjects.collect {project ->
project.sourceSets.main.compileClasspath
})
}
task docSiteLogin(type: Login) {
if (project.hasProperty('sshHost')) {
host = project.property('sshHost')
}
}
// Define remoteSiteDir and sshHost in gradle.properties
def remoteDocsDir = null
if (hasProperty('remoteSiteDir')) {
remoteDocsDir="$remoteSiteDir/docs/3.1.x"
}
task uploadApidocs(type: TarUpload) {
dependsOn apidocs
classifier = 'apidocs'
remoteDir = remoteDocsDir
login = docSiteLogin
into('apidocs') {
from apidocs.destinationDir
}
}
def docsDir = new File(project(':manual').buildDir, 'docs')
task uploadDoc(type: TarUpload) {
dependsOn ':manual:doc'
classifier = 'doc'
remoteDir = remoteDocsDir
login = docSiteLogin
into('reference') {
from docsDir
}
}
task uploadFaq(type: TarUpload) {
dependsOn ':faq:docbookHtmlSingle'
classifier = 'faq'
if (project.hasProperty('remoteSiteDir')) {
remoteDir = project.property('remoteSiteDir')
}
login = docSiteLogin
def faqDir = new File(project(':faq').buildDir, 'docs')
into('faq') {
from faqDir
}
}
task dist(type: Zip) {
def zipRootDir = "${project.name}-$version"
into(zipRootDir) {
into('docs/apidocs') {
from apidocs.destinationDir
}
into('docs/reference') {
from docsDir
}
into('dist') {
from coreModuleProjects.collect {project -> project.libsDir }
from project(':spring-security-samples-tutorial').libsDir
from project(':spring-security-samples-contacts').libsDir
}
}
}
dist {
dependsOn apidocs, ':manual:doc', subprojects.collect { "$it.path:assemble" }
doLast {
ant.checksum(file: archivePath, algorithm: 'SHA1', fileext: '.sha1')
}
}
task uploadDist(type: UploadDist) {
archiveFile = dist.archivePath
shaFile = "${dist.archivePath}.sha1" as File
archiveName = dist.archiveName
classpath = configurations.antlibs
}
def getJavaProjects() {
subprojects.findAll {project -> project.name != 'faq' && project.name != 'manual' }
}
def getSampleProjects() {
subprojects.findAll {project -> project.name.startsWith('spring-security-samples') }
}
def getItestProjects() {
subprojects.findAll {project -> project.name.startsWith('itest') }
}
def getCoreModuleProjects() {
javaProjects - sampleProjects - itestProjects
}
def getAspectjProjects() {
[project(':spring-security-aspects'), project(':spring-security-samples-aspectj')]
}
def getReleaseProjects() {
coreModuleProjects +project(':spring-security-aspects')
}
class UploadDist extends DefaultTask {
@InputFile
File shaFile
@InputFile
File archiveFile
@Input
String archiveName
@InputFiles
def classpath
@TaskAction
def upload() {
def accessKey = project.s3AccessKey
def secretKey = project.s3SecretAccessKey
def version = project.version
project.ant {
taskdef(resource: 'org/springframework/build/aws/ant/antlib.xml', classpath: classpath.asPath)
s3(accessKey: accessKey, secretKey: secretKey) {
upload(bucketName: 'dist.springframework.org', file: archiveFile,
toFile: releaseType() + "/SEC/${archiveName}", publicRead: 'true') {
metadata(name: 'project.name', value: 'Spring Security')
metadata(name: 'release.type', value: releaseType())
metadata(name: 'bundle.version', value: version)
metadata(name: 'package.file.name', value: archiveName)
}
upload(bucketName: 'dist.springframework.org', file: shaFile,
toFile: releaseType() + "/SEC/${archiveName}.sha1", publicRead: 'true')
}
}
}
def releaseType() {
if (project.releaseBuild) {
'release'
} else if (project.snapshotBuild) {
'snapshot'
} else {
'milestone'
}
}
}

View File

@ -48,6 +48,9 @@ class DocbookPlugin implements Plugin<Project> {
Task docbookFoPdf = project.tasks.add("docbookFoPdf", DocbookFoPdf.class); Task docbookFoPdf = project.tasks.add("docbookFoPdf", DocbookFoPdf.class);
docbookFoPdf.setDescription('Generates PDF output'); docbookFoPdf.setDescription('Generates PDF output');
docbookFoPdf.extension = 'fo' docbookFoPdf.extension = 'fo'
Task docbook = project.tasks.add("docbook", DefaultTask.class);
docbook.dependsOn (docbookHtml, docbookHtmlSingle, docbookFoPdf)
} }
} }

107
docs/docs.gradle Normal file
View File

@ -0,0 +1,107 @@
// Docbook and Javadoc building and uploading tasks
subprojects {
apply plugin: 'base'
apply plugin: 'docbook'
docbookHtmlSingle.stylesheet = new File(projectDir, 'src/xsl/html-single-custom.xsl')
}
project('faq') {
defaultTasks 'docbookHtmlSingle'
[docbookHtml, docbookFoPdf, docbookHtmlSingle]*.sourceFileName = 'faq.xml'
docbookHtmlSingle.suffix = ''
spec = copySpec {
into ('faq') {
from("$buildDir/docs")
from("$projectDir/src/resources")
}
}
}
project('manual') {
defaultTasks 'docbookHtml', 'docbookHtmlSingle', 'docbookFoPdf'
[docbookHtml, docbookFoPdf, docbookHtmlSingle]*.sourceFileName = 'springsecurity.xml'
docbookHtml.stylesheet = new File(projectDir, 'src/xsl/html-custom.xsl')
docbookHtmlSingle.stylesheet = new File(projectDir, 'src/xsl/html-single-custom.xsl')
docbookFoPdf.stylesheet = new File(projectDir, 'src/xsl/pdf-custom.xsl')
def imagesDir = new File(projectDir, 'src/docbook/images');
docbookFoPdf.admonGraphicsPath = "${imagesDir}/"
spec = copySpec {
into ('reference') {
from("$buildDir/docs")
from("$projectDir/src/resources")
}
into ('reference/images') {
from (imagesDir)
}
}
}
task apidocs(type: Javadoc) {
destinationDir = new File(buildDir, 'apidocs')
title = "Spring Security $version API"
optionsFile = file("$buildDir/tmp/javadoc.options")
source coreModuleProjects.collect { project ->
project.sourceSets.main.allJava
}
classpath = files(coreModuleProjects.collect { project ->
project.sourceSets.main.compileClasspath
})
}
apiSpec = copySpec {
into('apidocs') {
from(apidocs.destinationDir)
}
}
task docSiteLogin(type: Login) {
if (project.hasProperty('sshHost')) {
host = project.property('sshHost')
}
}
// Define remoteSiteDir and sshHost in gradle.properties
def remoteDocsDir = null
if (hasProperty('remoteSiteDir')) {
remoteDocsDir="$remoteSiteDir/docs/3.1.x"
}
task uploadApidocs(type: TarUpload) {
dependsOn apidocs
baseName = "${rootProject.name}"
appendix = 'apidocs'
remoteDir = remoteDocsDir
login = docSiteLogin
with(apiSpec)
}
task uploadManual(type: TarUpload) {
dependsOn 'manual:docbook'
baseName = "${rootProject.name}"
appendix = 'doc'
remoteDir = remoteDocsDir
login = docSiteLogin
with(project('manual').spec)
}
task uploadFaq(type: TarUpload) {
dependsOn 'faq:docbookHtmlSingle'
baseName = "${rootProject.name}"
appendix = 'faq'
if (project.hasProperty('remoteSiteDir')) {
remoteDir = project.property('remoteSiteDir')
}
login = docSiteLogin
with(project('faq').spec)
}

View File

@ -1,17 +0,0 @@
apply plugin: 'base'
apply plugin: 'docbook'
defaultTasks 'docbookHtmlSingle'
[docbookHtml, docbookFoPdf, docbookHtmlSingle]*.sourceFileName = 'faq.xml'
docbookHtmlSingle.stylesheet = new File(projectDir, 'src/xsl/html-single-custom.xsl')
docbookHtmlSingle.suffix = ''
docbookHtmlSingle.doLast {
resourcesDir = new File(projectDir, 'src/resources')
ant {
docsDir = new File(buildDir, 'docs')
copy(toDir: docsDir) {fileset(dir: resourcesDir)}
}
}

View File

@ -1,19 +0,0 @@
apply plugin: 'base'
apply plugin: 'docbook'
[docbookHtml, docbookFoPdf, docbookHtmlSingle]*.sourceFileName = 'springsecurity.xml';
docbookHtml.stylesheet = new File(projectDir, 'src/xsl/html-custom.xsl')
docbookHtmlSingle.stylesheet = new File(projectDir, 'src/xsl/html-single-custom.xsl')
docbookFoPdf.stylesheet = new File(projectDir, 'src/xsl/pdf-custom.xsl')
def imagesDir = new File(projectDir, 'src/docbook/images');
docbookFoPdf.admonGraphicsPath = "${imagesDir}/"
task doc (dependsOn: [docbookHtml, docbookHtmlSingle, docbookFoPdf]) << {
resourcesDir = new File(projectDir, 'src/resources')
ant {
docsDir = new File(buildDir, 'docs')
copy(toDir: docsDir) {fileset(dir: resourcesDir)}
copy(toDir: new File(docsDir, 'images')) {fileset(dir: imagesDir)}
}
}

80
gradle/dist.gradle Normal file
View File

@ -0,0 +1,80 @@
// Task for creating the distro zip
task dist(type: Zip) {
dependsOn ':docs:apidocs', ':docs:manual:docbook', subprojects*.tasks*.matching { task -> task.name == 'assemble' }
evaluationDependsOn(':docs')
def zipRootDir = "${project.name}-$version"
into(zipRootDir) {
from(rootDir) {
include '*.txt'
}
into('docs') {
with(project(':docs').apiSpec)
with(project(':docs:manual').spec)
}
into('dist') {
from coreModuleProjects.collect {project -> project.libsDir }
from project(':spring-security-samples-tutorial').libsDir
from project(':spring-security-samples-contacts').libsDir
}
}
doLast {
ant.checksum(file: archivePath, algorithm: 'SHA1', fileext: '.sha1')
}
}
task uploadDist(type: UploadDist) {
archiveFile = dist.archivePath
shaFile = "${dist.archivePath}.sha1" as File
archiveName = dist.archiveName
classpath = configurations.antlibs
}
class UploadDist extends DefaultTask {
@InputFile
File shaFile
@InputFile
File archiveFile
@Input
String archiveName
@InputFiles
def classpath
@TaskAction
def upload() {
def accessKey = project.s3AccessKey
def secretKey = project.s3SecretAccessKey
def version = project.version
project.ant {
taskdef(resource: 'org/springframework/build/aws/ant/antlib.xml', classpath: classpath.asPath)
s3(accessKey: accessKey, secretKey: secretKey) {
upload(bucketName: 'dist.springframework.org', file: archiveFile,
toFile: releaseType() + "/SEC/${archiveName}", publicRead: 'true') {
metadata(name: 'project.name', value: 'Spring Security')
metadata(name: 'release.type', value: releaseType())
metadata(name: 'bundle.version', value: version)
metadata(name: 'package.file.name', value: archiveName)
}
upload(bucketName: 'dist.springframework.org', file: shaFile,
toFile: releaseType() + "/SEC/${archiveName}.sha1", publicRead: 'true')
}
}
}
def releaseType() {
if (project.releaseBuild) {
'release'
} else if (project.snapshotBuild) {
'snapshot'
} else {
'milestone'
}
}
}

View File

@ -22,11 +22,6 @@ def String[] samples = [
'ldap' 'ldap'
] ]
def String[] docs = [
'faq',
'manual'
]
def String[] itest = [ def String[] itest = [
'web', 'web',
'context' 'context'
@ -58,13 +53,10 @@ itest.each { name ->
p.projectDir = new File(settingsDir, "itest/${name}"); p.projectDir = new File(settingsDir, "itest/${name}");
} }
include docs include 'docs', 'docs:faq', 'docs:manual'
docs.each { name -> docs = findProject(':docs')
p = findProject(":${name}") docs.buildFileName = 'docs.gradle'
p.buildFileName = "${name}.gradle"
p.projectDir = new File(settingsDir, "docs/${name}");
}
rootProject.children.each {project -> rootProject.children.each {project ->
assert project.projectDir.isDirectory() assert project.projectDir.isDirectory()