blob: db562b83c6b75d048c3475343ec0743011f345be [file] [log] [blame]
description = "Apache Tapestry 5 Project"
// Remember that when generating a release, this should be incremented. Also don't forget to
// tag the release in Subversion.
tapestryVersion = "5.3.1"
jettyVersion = '7.0.0.v20091005'
tomcatVersion = '6.0.30'
testngVersion = '5.14.9'
easymockVersion = '3.0'
servletAPIVersion = '2.5'
// Provided so that Jenkins can override the normal version number for nightly builds.
version = System.getProperty('project-version', tapestryVersion)
stagingUrl = "https://repository.apache.org/service/local/staging/deploy/maven2/"
snapshotUrl = "https://repository.apache.org/content/repositories/snapshots"
doSign = !project.hasProperty('noSign') && project.hasProperty("signing.keyId")
buildscript {
repositories {
mavenLocal()
mavenRepo name: "Gradle", urls: "http://repo.gradle.org/gradle/plugins-snapshots/"
}
dependencies {
classpath "org.gradle.plugins:gradle-signing-plugin:0.0.1-SNAPSHOT"
}
}
allprojects {
apply plugin: 'eclipse'
apply plugin: 'idea'
ideaProject {
javaVersion = 1.5
beforeConfigured { project ->
project.modulePaths.clear()
}
}
repositories {
mavenCentral()
// All things JBoss/Javassist/Hibernate
mavenRepo urls: "https://repository.jboss.org/nexus/content/repositories/releases/"
}
}
subprojects {
version = parent.version
group = 'org.apache.tapestry'
configurations {
provided
deployerJars
// meta -- non-code artifacts, such as sources and javadoc JARs
meta
}
apply plugin: 'java'
apply plugin: 'groovy' // mostly for testing
apply plugin: 'maven'
apply plugin: 'project-report'
sourceCompatibility = '1.5'
targetCompatibility = '1.5'
// See http://jira.codehaus.org/browse/GRADLE-784
sourceSets {
main {
compileClasspath += configurations.provided
}
test {
compileClasspath += configurations.provided
runtimeClasspath += configurations.provided
}
}
ideaModule {
scopes.PROVIDED.plus += configurations.provided
}
dependencies {
groovy "org.codehaus.groovy:groovy-all:1.7.4"
deployerJars "org.apache.maven.wagon:wagon-http-lightweight:1.0-beta-6"
}
test {
useTestNG()
options.suites("src/test/conf/testng.xml")
maxHeapSize = "400M"
// Turn off live service reloading
systemProperties["tapestry.service-reloading-enabled"] = "false"
jvmArgs("-XX:MaxPermSize=512m")
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
meta sourcesJar
}
configurations {
// published -- what gets uploaded to the Nexus repository
published.extendsFrom archives, meta
if (doSign)
{ published.extendsFrom signatures }
}
if (doSign)
{
apply plugin: 'signing'
// sign (create PGP signature for) archives (standard JARs)
// and meta (sources JARs)
signing { sign configurations.archives, configurations.meta }
}
// apacheDeployUserName and apacheDeployPassword should be specified in ~/.gradle/gradle.properties
deployUsernameProperty = isSnapshot() ? "snapshotDeployUserName" : "apacheDeployUserName"
deployPasswordProperty = isSnapshot() ? "snapshotDeployPassword" : "apacheDeployPassword"
canDeploy = [deployUsernameProperty, deployPasswordProperty].every { project.hasProperty(it) }
uploadPublished {
doFirst {
if (!canDeploy)
{
throw new InvalidUserDataException("Missing upload credentials. Set '$deployUsernameProperty' and '$deployPasswordProperty' project properties.")
}
}
if (canDeploy)
{
repositories {
project.deployer = repositories.mavenDeployer {
if (doSign)
{
beforeDeployment { MavenDeployment deployment ->
def signedPomArtifact = sign(deployment.pomArtifact).singleArtifact
// See http://issues.gradle.org/browse/GRADLE-1589
signedPomArtifact.type = "pom." + signing.type.extension
deployment.addArtifact(signedPomArtifact)
}
}
repository(url: stagingUrl) {
authentication(userName: project.getProperty(deployUsernameProperty), password: project.getProperty(deployPasswordProperty))
}
snapshotRepository(url: snapshotUrl) {
authentication(userName: project.getProperty(deployUsernameProperty), password: project.getProperty(deployPasswordProperty))
}
}
}
}
}
}
// Specific to top-level build, not set for subprojects:
configurations {
javadoc
published.extendsFrom archives, meta
if (doSign)
{ published.extendsFrom signatures }
}
dependencies {
javadoc project(':tapestry-javadoc')
}
subprojects.each { project.evaluationDependsOn(it.name) }
// Cribbed from https://github.com/hibernate/hibernate-core/blob/master/release/release.gradle#L19
javadocBuildDir = dir(buildDirName + "/documentation/javadocs")
task aggregateJavadoc(type: Javadoc, group: "Documentation") {
dependsOn configurations.javadoc
description = "Build the aggregated JavaDocs for all modules"
maxMemory = '512m'
destinationDir = javadocBuildDir.dir
configure(options) {
// overview = new File( projectDir, 'src/javadoc/package.html' )
splitIndex = true
linkSource = true
stylesheetFile = new File(projectDir, 'src/javadoc/stylesheet.css')
windowTitle = 'Tapestry API Documentation'
docTitle = "Tapestry JavaDoc ($project.version)"
bottom = "Copyright &copy; 2003-2011 <a href=\"http://tapestry.apache.org\">The Apache Software Foundation</a>."
use = true
links = ['http://download.oracle.com/javase/6/docs/api/', 'http://download.oracle.com/javaee/6/api/']
addStringOption "tagletpath", configurations.javadoc.asPath
addStringOption "taglet", "org.apache.tapestry5.javadoc.TapestryDocTaglet"
exclude "org/apache/tapestry5/internal/plastic/asm/**"
}
subprojects.findAll({ sp -> sp.name != "quickstart" }).each { sp ->
sp.sourceSets.all.findAll { set -> set.name != "test" }.each { set ->
source set.java
classpath += set.classes + set.compileClasspath
// Some of the component .xdoc files refer to PNG images
// (we could also exclude .java and .xdoc)
copy {
from set.java.srcDirs.toList()
into javadocBuildDir.dir
include '**/*.png'
}
}
}
}
aggregateJavadoc.doLast {
copy {
from new File(projectDir, 'src/javadoc/images')
into new File(javadocBuildDir.dir, "/images")
}
}
task clean(type: Delete) {
delete buildDirName
}
task continuousIntegration(dependsOn: [subprojects.build, 'aggregateJavadoc', subprojects.uploadPublished],
description: "Task executed on Jenkins CI server after SVN commits")
task generateRelease(dependsOn: ['quickstart:clean', 'continuousIntegration', subprojects.uploadPublished, 'zippedSources', 'zippedJavadoc'],
group: "Release artifact",
description: "Generates and uploads a final release to Apache Nexus")
task wrapper(type: Wrapper) {
gradleVersion = '1.0-milestone-3'
description = "Regenerates the Gradle Wrapper files"
}
task zippedSources(type: Zip) {
description = "Creates a combined Zip file of all sub-project's sources"
group = "Release artifact"
destinationDir = buildDir
baseName = "apache-tapestry"
version = project.version
classifier = "sources"
from project.projectDir
exclude "out/**"
exclude "**/*.iml"
exclude "**/*.ipr"
exclude "**/*.iws"
exclude "**/.*/**"
exclude "**/bin/**"
exclude "**/target/**"
exclude "**/build/**"
exclude "**/test-output/**" // Left around by TestNG sometimes
}
task zippedJavadoc(type: Zip, dependsOn: aggregateJavadoc) {
description = "Zip archive of the project's aggregate JavaDoc"
group = "Release artifact"
destinationDir = buildDir
baseName = "apache-tapestry"
version = project.version
classifier = "javadocs"
from javadocBuildDir.dir
into "apidocs"
}
boolean isSnapshot()
{
project.version.contains('SNAPSHOT')
}