You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2016/11/19 22:50:12 UTC
[11/35] zest-java git commit: build: move build logic from build
scripts to plugins in buildSrc
build: move build logic from build scripts to plugins in buildSrc
Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/56793996
Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/56793996
Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/56793996
Branch: refs/heads/develop
Commit: 56793996813773b8f421a29bd38534a1e1a02769
Parents: abf9280
Author: Paul Merlin <pa...@apache.org>
Authored: Fri Nov 11 20:22:21 2016 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Sat Nov 19 01:43:29 2016 +0100
----------------------------------------------------------------------
build.gradle | 1005 +-----------------
buildSrc/build.gradle | 11 +
.../apache/zest/gradle/AllProjectsPlugin.groovy | 178 ++++
.../zest/gradle/CodeProjectsPlugin.groovy | 142 +++
.../apache/zest/gradle/RootProjectPlugin.groovy | 259 +++++
.../org/apache/zest/gradle/ZestExtension.groovy | 2 +
.../org/apache/zest/gradle/ZestPlugin.groovy | 32 -
.../dependencies/DependenciesPlugin.groovy | 346 ++++++
.../zest/gradle/dist/DistributionPlugin.groovy | 375 +++++++
.../gradle/dist/GoOfflineHelpersTasks.groovy | 345 ++++++
.../gradle/doc/AsciidocBuildInfoPlugin.groovy | 3 +-
.../zest/gradle/doc/DocumentationTask.groovy | 6 +-
.../zest/gradle/publish/MavenMetadata.groovy | 281 +++++
.../zest/gradle/publish/PublishingPlugin.groovy | 181 ++++
.../gradle/release/CheckReleaseSpecTask.groovy | 75 ++
.../release/ReleaseApprovedProjectsTask.groovy | 57 +
.../gradle/release/ReleaseSpecExtension.groovy | 40 +
.../gradle/release/ReleaseSpecPlugin.groovy | 60 ++
.../apache/zest/gradle/tasks/ExecLogged.groovy | 94 ++
.../test/AggregatedJacocoReportTask.groovy | 91 ++
.../gradle/version/VersionClassPlugin.groovy | 10 +-
libraries.gradle | 291 -----
maven-compat.gradle | 283 -----
23 files changed, 2548 insertions(+), 1619 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index cc78501..df33a55 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,1010 +14,9 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
- *
*/
-import org.apache.tools.ant.filters.ReplaceTokens
-import org.apache.zest.gradle.ZestPlugin
-import org.apache.zest.gradle.doc.AsciidocBuildInfoPlugin
-import org.apache.zest.gradle.release.ModuleReleaseSpec
-import org.apache.zest.gradle.version.VersionClassPlugin
-
-allprojects {
- apply plugin: ZestPlugin
-}
-
-project.ext {
- title = "Apache Zest\u2122 (Java Edition) SDK"
- description = "Apache Zest\u2122 (Java Edition) is a framework for domain centric application development, including evolved concepts from AOP, DI and DDD."
-}
-
-buildscript {
- repositories {
- maven { url "https://plugins.gradle.org/m2/" }
- jcenter()
- }
- dependencies {
- classpath 'gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.2.2'
- classpath 'gradle.plugin.org.nosphere.honker:honker-gradle:0.2.3'
- classpath 'org.hibernate.build.gradle:gradle-maven-publish-auth:2.0.1'
- }
-}
-
-
-apply plugin: 'java'
-apply plugin: 'signing'
-apply plugin: 'maven'
-apply plugin: 'maven-publish-auth'
-apply plugin: 'project-report'
-apply from: 'libraries.gradle'
-apply plugin: 'org.nosphere.apache.rat'
-
-targetCompatibility = "1.8"
-sourceCompatibility = "1.8"
-
-// Collect the modules that fulfills the Release Criteria.
-project.ext {
- releaseSpec = new ModuleReleaseSpec()
- releaseApprovedProjects = allprojects.findAll( { p -> rootProject.releaseSpec.satisfiedBy( p ) } )
-}
-
-// Toggle signing, used by the source distribution by setting the skipSigning property in gradle.properties
-project.ext.skipSigning = rootProject.hasProperty( 'skipSigning' ) ? rootProject.skipSigning : false
-
-rat {
- onlyIf { version != '0' }
- excludes = [
- '**/.DS_Store/**', '**/._*',
- // Git Files
- '**/.git/**', '**/.gitignore',
- // Gradle Files
- 'gradle/wrapper/**', '**/gradlew', '**/gradlew.bat', '**/.gradle/**',
- // Build Output
- '**/build/**', '**/derby.log', 'out/**',
- // IDE Files
- '**/.idea/**', '**/*.iml', '**/*.ipr', '**/*.iws',
- '**/.settings/**', '**/.classpath', '**/.project',
- '**/.gradletasknamecache', '**/private/cache/**',
- '**/.nb-gradle-properties', '**/.nb-gradle/**',
- // JSON files are not allowed to have comments, according to http://www.json.org/ and http://www.ietf.org/rfc/rfc4627.txt
- '**/*.json',
- // Various Text Resources
- '**/README.*','**/README*.*', '**/TODO',
- '**/src/main/resources/**/*.txt',
- '**/src/test/resources/**/*.txt',
- 'libraries/rest-server/src/main/resources/**/*.htm',
- 'libraries/rest-server/src/main/resources/**/*.atom',
- 'tools/qidea/src/main/resources/**/*.ft',
- 'tools/qidea/src/main/resources/**/*.template',
- // Graphic Resources
- '**/*.svg', '**/*.gif', '**/*.png', '**/*.jpg', '**/*.psd',
- // Keystores
- '**/*.jceks',
- // Syntax Highlighter - MIT
- 'manual/**/sh*.css', 'manual/**/sh*.js',
- // jQuery & plugins - MIT
- 'manual/**/jquery*.js',
- // W3C XML Schemas - W3C Software License
- 'samples/rental/src/main/resources/*.xsd',
- // Zest Generator Heroes Templates - MIT
- 'tools/generator-zest/app/templates/Heroes/**',
- // templates that will become the user's source files, should not have license headers
- 'tools/shell/src/dist/etc/templates/**',
- ]
-}
-
-// Define repositories URLs here so we can reuse them in the build script
-// Needed as Gradle forbid access to declared repositories URLs by design
-// Releasable submodules should not declare repositories in their own build files
-def repos_urls = [
- mavenCentral: "https://repo1.maven.org/maven2/",
- ops4j: "http://repository.ops4j.org/maven2/",
- restlet: 'https://maven.restlet.com/',
- clojars: "https://clojars.org/repo/",
-]
allprojects {
-
- apply plugin: 'signing'
- apply plugin: 'java'
-// apply plugin: 'checkstyle'
- apply plugin: 'project-report'
- apply plugin: 'maven'
- apply plugin: 'org.nosphere.honker'
-
-
- defaultTasks 'classes', 'test'
-
- group = name == 'org.apache.zest' ? 'org.apache.zest' : name.substring( 0, name.lastIndexOf( '.' ) )
- if( version == 'unspecified' ) {
- version = System.properties.version ?: "0"
- }
-
- // UTF-8 For all compilations and javadocs
- // Deprecation warnings for all compilations
- // Unchecked warnings for non-test core compilations
- tasks.withType(JavaCompile) {
- options.encoding = 'UTF-8'
- options.compilerArgs << "-Xlint:deprecation"
- }
- if("core".equals(group)) {
- tasks.matching({ task -> task instanceof JavaCompile && !task.name.contains('test') }).
- each({ task -> task.options.compilerArgs << "-Xlint:unchecked" })
- }
- tasks.withType(Javadoc) {
- options.encoding = 'UTF-8'
- options.docEncoding = 'UTF-8'
- options.charSet = 'UTF-8'
- options.noTimestamp = true
- options.links = [
- 'http://docs.oracle.com/javase/8/docs/api/',
- 'https://stleary.github.io/JSON-java/',
- 'http://junit.org/junit4/javadoc/latest/'
- ]
- // exclude '**/internal/**'
- }
-
- repositories {
- mavenCentral()
- maven { name 'ops4j-repo'; url repos_urls.ops4j }
- maven { name 'restlet-repo'; url repos_urls.restlet }
- maven { name 'clojars-repo'; url repos_urls.clojars }
- }
-
- // Artifact upload global configuration BEGIN -----------------------------
-
- def uploadSnapshots = version.contains("SNAPSHOT")
- def uploadReleases = ! uploadSnapshots
- // By default RELEASES are signed, SNAPSHOTS are not
- // Signing can be turned on or off by setting the uploadSigned property
- def uploadSigned = rootProject.hasProperty('uploadSigned') \
- ? rootProject.uploadSigned : uploadReleases \
- ? true : false
- // By default RELEASES must satisfy ReleaseSpecification, SNAPSHOT don't
- // ReleaseSpecification usage can be turned on or off by setting the uploadReleaseSpec property
- def uploadReleaseSpec = rootProject.hasProperty('uploadReleaseSpec') \
- ? rootProject.uploadReleaseSpec : uploadReleases \
- ? true : false
- // By default RELEASES and SNAPSHOTS are uploaded using HTTP
- // Used Wagon can be overriden by setting the uploadWagon property
- // def wagonSSH = "org.apache.maven.wagon:wagon-ssh:2.2"
- // def wagonWEBDAV = "org.apache.maven.wagon:wagon-webdav:1.0-beta-2"
- def wagonHTTP = "org.apache.maven.wagon:wagon-http:2.2"
- def uploadWagon = rootProject.hasProperty('uploadWagon') \
- ? rootProject.uploadWagon : wagonHTTP
- // By default RELEASES and SNAPSHOTS are uploaded to Apache Nexus
- // Target repository can be overriden by setting the uploadRepository property
- def releasesRepositoryName = "apache.releases.https"
- def releasesRepository = "https://repository.apache.org/service/local/staging/deploy/maven2"
- def snapshotsRepositoryName = "apache.snapshots.https"
- def snapshotsRepository = "https://repository.apache.org/content/repositories/snapshots"
- def uploadRepositoryName = rootProject.hasProperty('uploadRepositoryName') \
- ? rootProject.uploadRepositoryName \
- : uploadReleases ? releasesRepositoryName : snapshotsRepositoryName
- def uploadRepository = rootProject.hasProperty('uploadRepository') \
- ? rootProject.uploadRepository \
- : uploadReleases ? releasesRepository : snapshotsRepository
- // No username/password is provided by default
- // If needed set them using the uploadUsername and uploadPassword properties
- def uploadUsername = rootProject.hasProperty('uploadUsername') ? rootProject.uploadUsername : null
- def uploadPassword = rootProject.hasProperty('uploadPassword') ? rootProject.uploadPassword : null
-
- // Artifact upload global configuration END -------------------------------
-
-
- configurations {
- archives
- deployerJars
- }
-
- dependencies {
- testCompile( libraries.ant )
- testCompile( libraries.ant_junit )
- testCompile( libraries.junit )
- testCompile( libraries.hamcrest )
- testRuntime( libraries.asm, libraries.asm_commons, libraries.asm_util )
- deployerJars( uploadWagon )
- }
-
- test.onlyIf { !project.hasProperty( 'skipTests' ) }
- test {
- testLogging {
- info {
- exceptionFormat "full"
- }
- }
- }
-
- sourceSets {
- main {
- output.dir( honkerGenDependencies.outputDir, builtBy: honkerGenDependencies )
- output.dir( honkerGenLicense.outputDir, builtBy: honkerGenLicense )
- output.dir( honkerGenNotice.outputDir, builtBy: honkerGenNotice )
- }
- docs {
- resources {
- srcDir 'src/docs'
- }
- }
- }
-
- honker {
- // Project License, applied to all submodules
- license 'Apache 2'
- // Dependencies (transitive or not) with no license information, overriding them
- licenseOverride { candidate ->
- if( candidate.group == 'asm' || candidate.module == 'prefuse-core' ) {
- candidate.license = 'BSD 3-Clause'
- }
- if( candidate.group == 'javax.websocket' ) {
- candidate.license = 'CDDL'
- }
- if( candidate.group == 'org.apache.httpcomponents'
- || candidate.group == 'net.java.dev.jna'
- || candidate.group == 'lucene'
- || candidate.group == 'jdbm'
- || candidate.group == 'org.osgi'
- || candidate.group.startsWith( 'org.restlet' ) ) {
- candidate.license = 'Apache 2'
- }
- }
- }
- honkerGenNotice {
- header = 'Apache Zest'
- footer = 'This product includes software developed at\nThe Apache Software Foundation (http://www.apache.org/).\n'
- }
- check.dependsOn honkerCheck
-
- project.ext {
- javaDir = new File( "$projectDir/src/main/java" )
- scalaDir = new File( "$projectDir/src/main/scala" )
- groovyDir = new File( "$projectDir/src/main/groovy")
- documentationDir = new File( "$projectDir/src/docs" )
- testJavaDir = new File( "$projectDir/src/tests/java" )
- testScalaDir = new File( "$projectDir/src/tests/scala" )
- testGroovyDir = new File( "$projectDir/src/tests/groovy")
- }
-
- // Actual code projects BEGIN -------------------------------------------
- if( ext.javaDir.isDirectory() || ext.scalaDir.isDirectory() || ext.groovyDir.isDirectory() ||
- ext.testJavaDir.isDirectory() || ext.testScalaDir.isDirectory() || ext.testGroovyDir.isDirectory() )
- {
- // ZEST-175
- if( JavaVersion.current() < JavaVersion.VERSION_1_9 ) {
- apply plugin: 'jacoco'
- }
- apply plugin: 'osgi'
- apply plugin: VersionClassPlugin
- apply plugin: AsciidocBuildInfoPlugin
-
-// if( name == "org.apache.zest.core.runtime" )
-// {
-// checkstyleMain {
-// configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-runtime-checkstyle.xml" )
-// ignoreFailures = true
-// }
-// }
-// else
-// {
-// checkstyleMain {
-// configFile = new File( rootProject.projectDir.absolutePath.toString() + '/etc/zest-api-checkstyle.xml' )
-// ignoreFailures = true
-// reporting.baseDir = "$rootProject.reporting.baseDir/checkstyle"
-// }
-// }
-// checkstyleTest {
-// configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-tests-checkstyle.xml" )
-// ignoreFailures = true
-// }
-//
-// checkstyleVersion {
-// configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-tests-checkstyle.xml" )
-// ignoreFailures = true
-// }
-
- jar {
- manifest {
- license = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
- docURL = 'https://zest.apache.org'
- description = project.description ?: 'Apache Zest\u2122 (Java Edition) is a platform for Composite Oriented Programming'
- vendor = 'The Apache Software Foundation, https://www.apache.org'
- instruction '-debug', 'true'
- }
- }
-
- signing {
- required { rootProject.version != '0' && uploadSigned }
- sign configurations.archives
- }
- signArchives.onlyIf { !rootProject.skipSigning }
-
- task sourceJar( type: Jar ) {
- classifier = "sources"
- from sourceSets.main.allSource
- }
-
- task testSourceJar( type: Jar ) {
- classifier = "testsources"
- from sourceSets.test.allSource
- }
-
- task javadocJar( type: Jar ) {
- classifier = "javadoc"
- from javadoc.destinationDir
- dependsOn javadoc
- }
-
- artifacts {
- archives sourceJar, testSourceJar, javadocJar
- }
-
- def testProperties = [
- 'proxySet': System.properties[ 'proxySet' ],
- 'proxyHost': System.properties[ 'proxyHost' ],
- 'proxyPort': System.properties[ 'proxyPort' ] ]
-
- test {
- maxHeapSize = "1024m"
- systemProperties = testProperties
- systemProperties['user.dir'] = workingDir // GRADLE-2859
- reports.html.enabled(true)
- }
- // ZEST-175
- if(JavaVersion.current() < JavaVersion.VERSION_1_9 ) {
- jacoco {
- toolVersion = '0.7.5.201505241946'
- }
- }
-
-// // Create checkstyle report
-// task checkstyleReport( type: XsltTask, dependsOn: check ) {
-// source project.checkstyle.reportsDir
-// include '*.xml'
-// destDir = file( "build/reports/checkstyle/" )
-// extension = 'html'
-// stylesheetFile = file( "$rootProject.projectDir/etc/checkstyle-noframes.xsl" )
-// }
-//
-
- // Dependency Report generate only the runtime configuration
- // The report is packaged in the SDK distributions
- dependencyReport {
- configurations = [ project.configurations.runtime ]
- }
-
- }
- // Actual code projects END ---------------------------------------------
-
- // Upload Archives - Artifact Deployment
- uploadArchives.doFirst {
- if( version == "0" )
- {
- throw new GradleException( "'version' must be given as a system property to perform a release." )
- }
- }
-
- uploadArchives.onlyIf { ( !uploadReleaseSpec || ( releaseApprovedProjects.contains( project ) || project == rootProject ) ) && !project.hasProperty( 'skipUpload' ) }
- uploadArchives {
- dependsOn check
- repositories.mavenDeployer {
- if( uploadSigned )
- beforeDeployment { MavenDeployment deployment -> signing.signPom( deployment ) }
- configuration = configurations.deployerJars
- repository(id: uploadRepositoryName, url: uploadRepository) {
- if( uploadUsername )
- authentication(userName: uploadUsername, password: uploadPassword)
- }
- snapshotRepository(id: uploadRepositoryName, url: uploadRepository) {
- if( uploadUsername )
- authentication(userName: uploadUsername, password: uploadPassword)
- }
- }
- }
- apply from: "$rootProject.projectDir/maven-compat.gradle"
- apply plugin: 'maven-publish-auth' // Bug in maven-publish-auth require apply after uploadArchives setup
-
-} // allprojects END -------------------------------------------------------
-
-// Allow easy download of all dependencies to go offline
-// ./gradlew goOffline
-task goOffline {
- doLast {
- allprojects.configurations.flatten()*.resolvedConfiguration
- }
-}
-
-task globalTestReport( type: TestReport ) {
- destinationDir = file("$buildDir/reports/tests")
- reportOn subprojects*.test
-}
-
-test {
- dependsOn subprojects*.test, globalTestReport
- reports.html.enabled = false
-}
-
-// Jacoco
-configurations {
- jacoco
-}
-dependencies {
- jacoco 'org.jacoco:org.jacoco.ant:0.7.5.201505241946'
-}
-// Generate a global code codeverage report
-task coverageReport {
- // ZEST-175
- enabled = JavaVersion.current() < JavaVersion.VERSION_1_9
- dependsOn subprojects*.test
- def outputPath = "build/reports/coverage"
- inputs.dir subprojects.collect { p -> "${p.buildDir.path}/jacoco" }
- outputs.dir outputPath
- doLast {
- def coveredProjects = subprojects.findAll { p -> new File( "${p.buildDir.path}/jacoco" ).exists() }
- def coreProjects = coveredProjects.findAll { p -> p.name.startsWith('org.apache.zest.core' ) }
- def libProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.zest.lib' ) }
- def extProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.zest.ext' ) }
- def toolsProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.zest.tool' ) }
- def tutoProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.zest.tuto' ) }
- def samplesProjects = coveredProjects.findAll { p -> p.name.startsWith( 'org.apache.zest.sample' ) }
- ant {
- taskdef name:'jacocoreport', classname: 'org.jacoco.ant.ReportTask', classpath: configurations.jacoco.asPath
- mkdir dir: outputPath
- jacocoreport {
- executiondata {
- coveredProjects.collect { p -> fileset( dir: "${p.buildDir.path}/jacoco" ) { include( name: '*.exec' ) } }
- }
- structure( name: "Apache Zest\u2122 (Java Edition) SDK" ) {
- group( name: "Core" ) {
- classfiles { coreProjects.collect { p -> fileset dir: "${p.buildDir.path}/classes/main" } }
- sourcefiles { coreProjects.collect { p -> fileset dir: "${p.projectDir.path}/src/main/java" } }
- }
- group( name: "Libraries" ) {
- classfiles { libProjects.collect { p -> fileset dir: "${p.buildDir.path}/classes/main" } }
- sourcefiles { libProjects.collect { p -> fileset dir: "${p.projectDir.path}/src/main/java" } }
- }
- group( name: "Extensions" ) {
- classfiles { extProjects.collect { p -> fileset dir: "${p.buildDir.path}/classes/main" } }
- sourcefiles { extProjects.collect { p -> fileset dir: "${p.projectDir.path}/src/main/java" } }
- }
- group( name: "Tools" ) {
- classfiles { toolsProjects.collect { p -> fileset dir: "${p.buildDir.path}/classes/main" } }
- sourcefiles { toolsProjects.collect { p -> fileset dir: "${p.projectDir.path}/src/main/java" } }
- }
- group( name: "Tutorials" ) {
- classfiles { tutoProjects.collect { p -> fileset dir: "${p.buildDir.path}/classes/main" } }
- sourcefiles { tutoProjects.collect { p -> fileset dir: "${p.projectDir.path}/src/main/java" } }
- }
- group( name: "Samples" ) {
- classfiles { samplesProjects.collect { p -> fileset dir: "${p.buildDir.path}/classes/main" } }
- sourcefiles { samplesProjects.collect { p -> fileset dir: "${p.projectDir.path}/src/main/java" } }
- }
- }
- csv destfile: "${outputPath}/jacoco.csv", encoding: "UTF-8"
- xml destfile: "${outputPath}/jacoco.xml", encoding: "UTF-8"
- html destdir: outputPath, encoding: "UTF-8", locale: "en", footer: "Apache Zest\u2122 (Java Edition) SDK"
- }
- }
- }
-}
-check.dependsOn coverageReport
-
-
-// Build the whole SDK public Javadoc
-task javadocs( type: Javadoc ) {
-
- options.docFilesSubDirs = true
- options.encoding = "UTF-8"
- options.overview = "${rootProject.projectDir}/src/javadoc/overview.html"
- title = "${rootProject.title} ${version}"
- def apiSources = releaseApprovedProjects.findAll( { project ->
- ( project.name.startsWith( 'org.apache.zest.core' ) && !project.name.startsWith( 'org.apache.zest.core.runtime' ) ) ||
- project.name.startsWith( 'org.apache.zest.library' ) ||
- project.name.startsWith( 'org.apache.zest.extension' ) ||
- project.name.startsWith( 'org.apache.zest.tool' )
- } )
- source apiSources.collect { project ->
- project.sourceSets.main.allJava
- }
- destinationDir = project.file( "$project.docsDir/javadocs" )
- // Might need a classpath
- classpath = files( apiSources.collect { project ->
- project.sourceSets.main.compileClasspath
- } )
- options.group( [ "Core API": [ "org.apache.zest.api", "org.apache.zest.api.*", "org.apache.zest.io", "org.apache.zest.functional" ],
- "Core Bootstrap": [ "org.apache.zest.bootstrap", "org.apache.zest.bootstrap.*" ],
- "Core SPI": [ "org.apache.zest.spi", "org.apache.zest.spi.*" ],
- "Libraries": [ "org.apache.zest.library.*" ],
- "Extensions": [ "org.apache.zest.valueserialization.*", "org.apache.zest.entitystore.*", "org.apache.zest.index.*", "org.apache.zest.metrics.*", "org.apache.zest.cache.*", "org.apache.zest.migration", "org.apache.zest.migration.*" ],
- "Tools": [ "org.apache.zest.tools.*", "org.apache.zest.envisage", "org.apache.zest.envisage.*" ],
- "Test Support": [ "org.apache.zest.test", "org.apache.zest.test.*" ]
- ] )
-
-}
-
-task archiveJavadocs(type: Copy ) {
- dependsOn javadocs
-
- if( rootProject.version == '0' || rootProject.version.contains( "SNAPSHOT" ) )
- {
- into( "$rootProject.projectDir/../zest-web/site/content/java/develop/javadocs/" )
- }
- else
- {
- into( "$rootProject.projectDir/../zest-web/site/content/java/$version/javadocs/" )
- }
- from( 'build/docs/javadoc/' )
-}
-
-
-// Build All
-task buildAll( dependsOn: [
- javadocs,
- check,
- jar,
- subprojects*.dependencyReport,
- subprojects*.assemble,
- ':org.apache.zest.manual:website'
-] ) { }
-
-// Generate license headers with comment styles
-def licenseHeader_wrap( base, top, left, bottom ) {
- ( top ? "$top\n" : '' ) + base.readLines().collect{ "${left}${it}" }.join( '\n' ) + '\n' + ( bottom ? "$bottom\n" : '' )
-}
-def licenseHeader( flavour ) {
- def base = project.file( 'etc/header.txt' ).text
- def header
- switch( flavour ) {
- case 'java': case 'groovy': case 'scala': case 'js':
- header = licenseHeader_wrap( base, '/*', ' * ', ' */' ) ; break
- case 'xml': case 'html':
- header = licenseHeader_wrap( base, '<!--', ' ', '-->' ) ; break
- case 'txt': case 'shell': case 'python': case 'ruby':
- header = licenseHeader_wrap( base, null, '# ', null ) ; break
- case 'adoc': case 'asciidoc':
- header = licenseHeader_wrap( base, null, '// ', null ) ; break
- default:
- header = base
- }
- header
-}
-
-task generateBinDistGoOfflineHelpers {
- def goOfflineGradleFile = file( 'build/go-offline-helpers/go-offline.gradle' )
- def goOfflinePomFile = file( 'build/go-offline-helpers/go-offline.pom')
- outputs.file goOfflineGradleFile
- outputs.file goOfflinePomFile
- doLast {
-
- def goOfflineGradle = licenseHeader( 'java' )
- goOfflineGradle += '// This gradle build file has the sole purpose of downloading all dependencies in a directory relative to this file named \'dependencies\'.\n'
- goOfflineGradle += '// Use the following command: gradle -b go-offline.gradle download\n'
- goOfflineGradle += 'apply plugin: \'java\'\nconfigurations { download }\nrepositories {\n'
- def goOfflinePom = licenseHeader( 'xml' )
- goOfflinePom += '<project>\n <modelVersion>4.0.0</modelVersion>\n'
- goOfflinePom += " <groupId>org.apache.zest</groupId>\n <artifactId>go-offline-helper</artifactId>\n <version>$version</version>\n"
- goOfflinePom += ' <packaging>pom</packaging>\n'
- goOfflinePom += ' <!--\n This pom has the sole purpose of downloading all dependencies in a directory relative to this file named \'dependencies\'.\n'
- goOfflinePom += ' Use the following command:\n\n mvn -f go-offline.pom validate\n -->\n <repositories>\n'
-
- def repoCount = 1
- repos_urls.each { repo_url ->
- goOfflineGradle += " maven { url '${repo_url.value}' }\n"
- goOfflinePom += " <repository><id>go-offline-repo-$repoCount</id><url>${repo_url.value}</url></repository>\n"
- repoCount++
- }
-
- goOfflineGradle += '}\ndependencies {\n'
- goOfflinePom += ' </repositories>\n <dependencies>\n'
-
- // Do the global dependency resolution here so there won't be any suprise when using the helpers
- // This also allow to apply the resolution strategy defined in libraries.gradle
- // WARN some of our modules depends on != versions of some artifacts, this resolution flatten this using the most up to date
- def allRuntimeDeps = releaseApprovedProjects.collect{ it.configurations.runtime.allDependencies }.flatten()
- rootProject.configurations.create( 'goOfflineHelpers' )
- rootProject.dependencies { allRuntimeDeps.each{ goOfflineHelpers it } }
- rootProject.configurations.goOfflineHelpers.incoming.resolutionResult.allComponents.each { comp ->
- def depCoords = "${comp.moduleVersion.group}:${comp.moduleVersion.name}:${comp.moduleVersion.version}"
- if( !comp.moduleVersion.group.startsWith( 'org.apache.zest' ) ) {
- goOfflineGradle += " download( '$depCoords' ) { transitive = false }\n"
- goOfflinePom += " <dependency><groupId>${comp.moduleVersion.group}</groupId><artifactId>${comp.moduleVersion.name}</artifactId><version>${comp.moduleVersion.version}</version></dependency>\n"
- }
- }
-
- goOfflineGradle += """}
-task download( type: Copy ) {
- def sources = configurations.download.resolvedConfiguration.resolvedArtifacts.collect { artifact ->
- project.dependencies.create( [ group: artifact.moduleVersion.id.group, name: artifact.moduleVersion.id.name, version: artifact.moduleVersion.id.version, classifier: 'sources' ] )
- }
- def javadocs = configurations.download.resolvedConfiguration.resolvedArtifacts.collect { artifact ->
- project.dependencies.create( [ group: artifact.moduleVersion.id.group, name: artifact.moduleVersion.id.name, version: artifact.moduleVersion.id.version, classifier: 'javadoc' ] )
- }
- from configurations.download
- from configurations.detachedConfiguration( sources as Dependency[] ).resolvedConfiguration.lenientConfiguration.getFiles( Specs.SATISFIES_ALL )
- from configurations.detachedConfiguration( javadocs as Dependency[] ).resolvedConfiguration.lenientConfiguration.getFiles( Specs.SATISFIES_ALL )
- into file( 'dependencies/' )
-}
-"""
-
- goOfflinePom += """ </dependencies>\n <build><plugins><plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.10</version>
- <executions>
- <execution>
- <id>go-offline-jars</id><phase>validate</phase>
- <goals><goal>copy-dependencies</goal></goals>
- <configuration>
- <outputDirectory>\${project.basedir}/dependencies</outputDirectory>
- <excludeTransitive>true</excludeTransitive>
- </configuration>
- </execution>
- <execution>
- <id>go-offline-sources</id><phase>validate</phase>
- <goals><goal>copy-dependencies</goal></goals>
- <configuration>
- <classifier>sources</classifier><failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact>
- <outputDirectory>\${project.basedir}/dependencies</outputDirectory>
- <excludeTransitive>true</excludeTransitive>
- </configuration>
- </execution>
- <execution>
- <id>go-offline-javadocs</id><phase>validate</phase>
- <goals><goal>copy-dependencies</goal></goals>
- <configuration>
- <classifier>javadoc</classifier><failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact>
- <outputDirectory>\${project.basedir}/dependencies</outputDirectory>
- <excludeTransitive>true</excludeTransitive>
- </configuration>
- </execution>
- </executions>
- </plugin></plugins></build>
-</project>
-"""
-
- goOfflineGradleFile.parentFile.mkdirs()
- goOfflinePomFile.parentFile.mkdirs()
-
- goOfflineGradleFile.text = goOfflineGradle
- goOfflinePomFile.text = goOfflinePom
- }
-}
-
-
-def srcDistFilesImages = copySpec {
- from '.'
- include '*.txt'
- include 'doap.rdf'
- include '*.gradle'
- include 'gradlew*'
- include 'gradle/**'
- include 'etc/**'
- include 'buildSrc/**'
- include 'src/**'
- releaseApprovedProjects.each { p ->
- def relPath = new File( project.projectDir.toURI().relativize( p.projectDir.toURI() ).toString() )
- include "$relPath/**"
- }
- include 'manual/**'
- include 'samples/**'
- include 'tests/**'
- include 'tutorials/**'
- include 'tools/shell/**'
- // Filtered, see below
- exclude 'settings.gradle'
- exclude 'gradle.properties'
- // Excludes
- exclude '**/build/' // Build output
- exclude 'derby.log' // Derby test garbage
- exclude '**/*.iml' // IDEA files
- exclude '**/*.ipr' // IDEA files
- exclude '**/*.iws' // IDEA files
- exclude '**/.idea' // IDEA files
- exclude '**/out/*' // IDEA build output
- exclude '**/.classpath' // Eclipse files
- exclude '**/.project' // Eclipse files
- exclude '**/.settings' // Eclipse files
- exclude '**/.nb-gradle/' // Netbeans files
- exclude '**/.nb-gradle*' // Netbeans files
- exclude '**/.git/' // Git directories
- exclude '**/.git*' // Git files
- exclude '**/.gradle/' // Gradle management files
- exclude '**/.gradletasknamecache' // Gradle cache
- into '.'
-}
-
-task srcDistFilteredFiles() {
- // Generates various files for the source distribution
- // - settings.gradle
- // - gradle.properties to set version !
- def filteredDir = new File( "$project.buildDir/tmp/srcDistFilteredFiles")
- outputs.file filteredDir
- doLast {
- // Settings
- def settingsFile = new File( filteredDir, 'settings.gradle' )
- settingsFile.parentFile.mkdirs()
- def filteredSettings = ''
- project.file( 'settings.gradle' ).readLines().each { line ->
- if( line.contains( '\'libraries:' ) || line.contains( '\'extensions:' ) || line.contains( '\'tools:' ) ) {
- def accepted = false
- releaseApprovedProjects.collect{it.projectDir}.each { acceptedProjectDir ->
- if( line.contains( "'${acceptedProjectDir.parentFile.name}:${acceptedProjectDir.name}'" ) ) {
- accepted = true
- }
- }
- if( accepted ) {
- filteredSettings += "$line\n"
- }
- } else {
- filteredSettings += "$line\n"
- }
- }
- settingsFile.text = filteredSettings
- // gradle.properties
- def gradlePropsFile = new File( filteredDir, 'gradle.properties' )
- gradlePropsFile.parentFile.mkdirs()
- gradlePropsFile.text = project.file( 'gradle.properties' ).text + "\nskipSigning=true\nskipAsciidocIfAbsent=true\n\nversion=$version\n"
- }
-}
-
-def srcDistFilteredFilesImage = copySpec {
- from srcDistFilteredFiles
- into '.'
-}
-
-def srcDistImage = copySpec {
- into "apache-zest-java-$version-src"
- with srcDistFilesImages
- with srcDistFilteredFilesImage
-}
-
-def reportsDistImage = copySpec {
- from "$buildDir/reports"
- into( "docs/reports" )
-}
-
-def docsImage = copySpec {
- from "build/docs"
- from "manual/build/docs/website"
- into( "docs" )
-}
-
-def runtimeDependenciesListImage = copySpec {
- releaseApprovedProjects.collect { p ->
- into( "libs/" ) {
- from "$p.buildDir/reports/project/dependencies.txt"
- rename 'dependencies.txt', "${p.name}-${p.version}-runtime-deps.txt"
- }
- }
- into( '.' ) {
- from generateBinDistGoOfflineHelpers.outputs
- }
-}
-
-def libsImage = copySpec {
- releaseApprovedProjects.collect { proj ->
- into( "libs/" ) {
- from proj.configurations.archives.artifacts.files
- exclude '**-testsources.jar'
- exclude '**/*.asc'
- }
- }
-}
-
-def extraDistTextImage = copySpec {
- releaseApprovedProjects.collect { p ->
- from fileTree(dir: "$p.projectDir/src/dist/", include: '**', exclude: "**/*.jar*")
- eachFile {
- filter(ReplaceTokens, tokens: [version: version])
- }
- }
- into( "." )
-}
-
-def extraDistBinImage = copySpec {
- releaseApprovedProjects.collect { p ->
- from "$p.projectDir/src/dist/"
- include "**/*.jar"
- include "**/*.jar_"
- }
- into( "." )
-}
-
-def binDistNoticesImage = copySpec {
- from( "$projectDir/LICENSE.txt")
- from( "$projectDir/src/bin-dist" )
- into( "." )
-}
-
-def binDistImage = copySpec {
- into "apache-zest-java-$version-bin"
- with binDistNoticesImage
- with docsImage
- with reportsDistImage
- with runtimeDependenciesListImage
- with extraDistTextImage
- with extraDistBinImage
- with libsImage
-}
-
-task zipSources( type: Zip ) {
- baseName = 'apache-zest-java'
- with srcDistImage
- classifier = 'src'
-}
-
-task tarSources( type: Tar ) {
- baseName = 'apache-zest-java'
- with srcDistImage
- compression = Compression.GZIP
- classifier = 'src'
-}
-
-task zipBinaries( type: Zip, dependsOn: buildAll ) {
- baseName = 'apache-zest-java'
- classifier = 'bin'
- with binDistImage
-}
-
-task tarBinaries( type: Tar, dependsOn: buildAll ) {
- baseName = 'apache-zest-java'
- classifier = 'bin'
- compression = Compression.GZIP
- with binDistImage
-}
-
-// Checksum distributions
-tasks.withType( Zip ) { task ->
- task.doLast {
- ant.checksum file: task.archivePath, algorithm: 'MD5'
- ant.checksum file: task.archivePath, algorithm: 'SHA-512'
- }
-}
-tasks.withType( Tar ) { task ->
- task.doLast {
- ant.checksum file: task.archivePath, algorithm: 'MD5'
- ant.checksum file: task.archivePath, algorithm: 'SHA-512'
- }
-}
-
-artifacts {
- archives zipSources, tarSources, zipBinaries, tarBinaries
-}
-
-signing {
- required { rootProject.version != '0' && !rootProject.version.contains( 'SNAPSHOT' ) }
- sign configurations.archives
-}
-signArchives.onlyIf { !rootProject.skipSigning }
-
-task dist( type: Copy, dependsOn: install ) {
- description "Unpack the binary distribution"
- group = "distributions"
- with binDistImage
- into "$buildDir/dist"
-}
-
-// Tasks for source and binary distributions checks
-def unpackedSrcDistDir = file( "build/unpacked-distributions/src/apache-zest-java-$version-src" )
-def unpackedBinDistDir = file( "build/unpacked-distributions/bin/apache-zest-java-$version-bin" )
-task unpackSrcDist( type: Copy ) {
- description "Unpack the source distribution"
- group = "distributions"
- with srcDistImage
- into 'build/unpacked-distributions/src'
-}
-task checkSrcDist( type: GradleBuild, dependsOn: unpackSrcDist ) {
- description = "Check the source distribution by running the 'check' and 'assemble' tasks inside"
- group = "distributions"
- buildFile = "$unpackedSrcDistDir/build.gradle"
- tasks = [ 'check', 'assemble' ]
-}
-task unpackBinDist( type: Copy, dependsOn: buildAll ) {
- description "Unpack the binary distribution"
- group = "distributions"
- with binDistImage
- into 'build/unpacked-distributions/bin'
-}
-task checkBinDist_rat( type: org.apache.rat.gradle.RatTask, dependsOn: unpackBinDist ) {
- description "Check the binary distribution using Apache RAT"
- group = "distributions"
- inputDir = unpackedBinDistDir
- reportDir = file( 'build/reports/rat-bin-dist' )
- excludes = []
-}
-task checkBinDist_goOfflineGradle( type: GradleBuild, dependsOn: unpackBinDist ) {
- description "Check the binary distribution Gradle go-offline helper"
- group = "distributions"
- def dependenciesDir = new File( unpackedBinDistDir, 'dependencies' )
- doFirst { dependenciesDir.deleteDir() }
- buildFile = "$unpackedBinDistDir/go-offline.gradle"
- tasks = [ 'download' ]
- doLast {
- releaseApprovedProjects*.configurations.runtime.allDependencies.findAll({it.name}).each { dep ->
- def jarArtifactId = dep.name instanceof String ? dep.name : dep.name.last()
- def jarVersion = dep.version instanceof String ? dep.version : dep.version.last()
- if( !jarArtifactId.startsWith( 'org.apache.zest' ) ) {
- def jarName = "${jarArtifactId}-${jarVersion}.jar"
- if( !new File( dependenciesDir, jarName ).exists() ) {
- throw new GradleException( "Binary distribution go-offline.gradle failed! Missing: $jarName" );
- }
- }
- }
- }
-}
-task checkBinDist_goOfflineMaven( type: Exec, dependsOn: unpackBinDist ) {
- description "Check the binary distribution Maven go-offline helper"
- group = "distributions"
- onlyIf {
- def pathDirs = System.getenv( 'PATH' ).split( File.pathSeparator )
- pathDirs.collect( { new File( it, 'mvn') } ).flatten().findAll( { it.isFile() } )
- }
- def dependenciesDir = new File( unpackedBinDistDir, 'dependencies' )
- doFirst { dependenciesDir.deleteDir() }
- workingDir unpackedBinDistDir
- commandLine 'mvn', '-e', '-f', 'go-offline.pom', 'validate'
- doLast {
- releaseApprovedProjects*.configurations.runtime.allDependencies.findAll({it.name}).each { dep ->
- def jarArtifactId = dep.name instanceof String ? dep.name : dep.name.last()
- def jarVersion = dep.version instanceof String ? dep.version : dep.version.last()
- if( !jarArtifactId.startsWith( 'org.apache.zest' ) ) {
- def jarName = "${jarArtifactId}-${jarVersion}.jar"
- if( !new File( dependenciesDir, jarName ).exists() ) {
- throw new GradleException( "Binary distribution go-offline.pom failed! Missing: $jarName" );
- }
- }
- }
- }
-}
-task checkBinDist {
- description "Check the binary distribution"
- group = "distributions"
- dependsOn /*checkBinDist_rat,*/ checkBinDist_goOfflineGradle, checkBinDist_goOfflineMaven
-}
-task checkDists {
- description "Check the souce and binary distributions"
- group = "distributions"
- dependsOn checkSrcDist, checkBinDist
-}
-
-task checkReleaseSpec {
- description = "Ensure that no releasable module depend on module(s) that don't fit the release criteria."
- group = 'release'
- dependsOn releaseApprovedProjects*.configurations.runtime
- doFirst {
- def notReleasable = [:]
- releaseApprovedProjects*.configurations.runtime.allDependencies.findAll({ it instanceof ProjectDependency }).each { dep ->
- def depNotReleaseApproved = releaseApprovedProjects.findAll { rp ->
- rp.group == dep.dependencyProject.group && rp.name == dep.dependencyProject.name
- }.isEmpty()
- if( depNotReleaseApproved )
- {
- if( !notReleasable[p] ) notReleasable[p] = []
- notReleasable[p] << dep
- }
- }
- if(!notReleasable.isEmpty()) {
- def errorMessage = new StringBuilder()
- errorMessage << "At least one releasable module depends on module(s) that don't fit the release criteria!\n"
- errorMessage << "\tOffending module -> Non releasable dependencies\n"
- notReleasable.each { k,v ->
- def noRlsDeps = v.collect{d -> ':'+d.dependencyProject.group+':'+d.dependencyProject.name}
- errorMessage << "\t$k -> ${noRlsDeps})\n"
- }
- errorMessage << "Check the dev-status.xml file content in each modules directory."
- throw new GradleException( errorMessage.toString() )
- }
- }
-}
-
-task release {
- description = 'Builds, tests and uploads the release artifacts'
- group = 'release'
- doFirst {
- if( System.properties[ 'version' ] == null || System.properties[ 'version' ].contains( 'SNAPSHOT' ) )
- {
- throw new GradleException( "'version' must be given as a system property to perform a release." )
- }
- }
- dependsOn checkReleaseSpec, rat, archiveJavadocs, ':org.apache.zest.manual:copyWebsite', allprojects*.uploadArchives, dist
+ apply plugin: org.apache.zest.gradle.AllProjectsPlugin
}
+apply plugin: org.apache.zest.gradle.RootProjectPlugin
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/buildSrc/build.gradle
----------------------------------------------------------------------
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 358922d..ff2dde8 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -17,3 +17,14 @@
*
*
*/
+
+repositories {
+ maven { url "https://plugins.gradle.org/m2/" }
+ jcenter()
+}
+
+dependencies {
+ compile 'gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.2.2'
+ compile 'gradle.plugin.org.nosphere.honker:honker-gradle:0.2.3'
+ compile 'org.hibernate.build.gradle:gradle-maven-publish-auth:2.0.1'
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy
new file mode 100644
index 0000000..bed6352
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.zest.gradle
+
+import groovy.transform.CompileStatic
+import org.apache.zest.gradle.dependencies.DependenciesPlugin
+import org.apache.zest.gradle.publish.PublishingPlugin
+import org.gradle.api.JavaVersion
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.plugins.JavaPluginConvention
+import org.gradle.api.tasks.compile.JavaCompile
+import org.gradle.api.tasks.javadoc.Javadoc
+import org.gradle.api.tasks.testing.Test
+import org.gradle.api.tasks.testing.logging.TestExceptionFormat
+import org.gradle.external.javadoc.StandardJavadocDocletOptions
+import org.nosphere.honker.gradle.HonkerExtension
+import org.nosphere.honker.gradle.HonkerGenDependenciesTask
+import org.nosphere.honker.gradle.HonkerGenLicenseTask
+import org.nosphere.honker.gradle.HonkerGenNoticeTask
+import org.nosphere.honker.gradle.HonkerLicenseOverrideCandidate
+
+@CompileStatic
+class AllProjectsPlugin implements Plugin<Project>
+{
+ @Override
+ void apply( final Project project )
+ {
+ project.defaultTasks = [ 'classes', 'test' ]
+ project.group = project.name == 'org.apache.zest' ?
+ 'org.apache.zest' :
+ project.name.substring( 0, project.name.lastIndexOf( '.' ) )
+
+ applyVersionning( project )
+ applyZestExtension( project )
+
+ configureJava( project )
+ project.plugins.apply DependenciesPlugin
+ configureJavadoc( project )
+ configureTest( project )
+ if( CodeProjectsPlugin.isCodeProject( project ) )
+ {
+ project.plugins.apply CodeProjectsPlugin
+ }
+ configureDependencyReport( project )
+ configureHonker( project )
+ project.plugins.apply PublishingPlugin
+ }
+
+ private static void applyVersionning( Project project )
+ {
+ if( project.version == 'unspecified' )
+ {
+ project.version = System.properties.version ?: '0'
+ }
+ }
+
+ private static void applyZestExtension( Project project )
+ {
+ project.extensions.create( "zest", ZestExtension, project )
+ }
+
+ private static void configureJava( Project project )
+ {
+ project.plugins.apply 'java'
+ def javaConvention = project.convention.getPlugin( JavaPluginConvention )
+ javaConvention.targetCompatibility = JavaVersion.VERSION_1_8
+ javaConvention.sourceCompatibility = JavaVersion.VERSION_1_8
+ project.tasks.withType( JavaCompile ) { JavaCompile task ->
+ task.options.encoding = 'UTF-8'
+ // Deprecation warnings for all compilations
+ task.options.compilerArgs << "-Xlint:deprecation"
+ // Unchecked warnings for non-test core compilations
+ if( 'org.apache.zest.core' == project.group && !task.name.toLowerCase( Locale.US ).contains( 'test' ) )
+ {
+ task.options.compilerArgs << "-Xlint:unchecked"
+ }
+ }
+ }
+
+ private static void configureJavadoc( Project project )
+ {
+ project.tasks.withType( Javadoc ) { Javadoc task ->
+ def options = task.options as StandardJavadocDocletOptions
+ options.encoding = 'UTF-8'
+ options.docEncoding = 'UTF-8'
+ options.charSet = 'UTF-8'
+ options.noTimestamp = true
+ options.links = [
+ 'http://docs.oracle.com/javase/8/docs/api/',
+ 'https://stleary.github.io/JSON-java/',
+ 'http://junit.org/junit4/javadoc/latest/'
+ ]
+ // exclude '**/internal/**'
+ }
+ }
+
+ private static void configureTest( Project project )
+ {
+ def test = project.tasks.getByName( 'test' ) as Test
+ test.onlyIf { !project.hasProperty( 'skipTests' ) }
+ test.testLogging.info.exceptionFormat = TestExceptionFormat.FULL
+ test.maxHeapSize = '1g'
+ test.systemProperties = [ 'proxySet' : System.properties[ 'proxySet' ],
+ 'proxyHost': System.properties[ 'proxyHost' ],
+ 'proxyPort': System.properties[ 'proxyPort' ] ]
+ test.systemProperties[ 'user.dir' ] = test.workingDir
+ test.reports.html.enabled = true
+ }
+
+ // Dependency Report generate only the runtime configuration
+ // The report is packaged in the SDK distributions
+ private static void configureDependencyReport( Project project )
+ {
+ project.plugins.apply 'project-report'
+ // TODO Fails with no task found
+ // def dependencyReport = project.tasks.getByName( 'dependencyReport' ) as DependencyReportTask
+ // dependencyReport.configurations = [ project.configurations.getByName( 'runtime' ) ] as Set
+ }
+
+ private static void configureHonker( Project project )
+ {
+ project.plugins.apply 'org.nosphere.honker'
+ def honkerGenDependencies = project.tasks.getByName( 'honkerGenDependencies' ) as HonkerGenDependenciesTask
+ def honkerGenLicense = project.tasks.getByName( 'honkerGenLicense' ) as HonkerGenLicenseTask
+ def honkerGenNotice = project.tasks.getByName( 'honkerGenNotice' ) as HonkerGenNoticeTask
+ def javaConvention = project.convention.getPlugin( JavaPluginConvention )
+ def mainSourceSet = javaConvention.sourceSets.getByName( 'main' )
+ mainSourceSet.output.dir( [ builtBy: honkerGenDependencies ] as Map<String, Object>,
+ honkerGenDependencies.outputDir )
+ mainSourceSet.output.dir( [ builtBy: honkerGenLicense ] as Map<String, Object>,
+ honkerGenLicense.outputDir )
+ mainSourceSet.output.dir( [ builtBy: honkerGenNotice ] as Map<String, Object>,
+ honkerGenNotice.outputDir )
+ def honker = project.extensions.getByType( HonkerExtension )
+ // Project License, applied to all submodules
+ honker.license 'Apache 2'
+ // Dependencies (transitive or not) with no license information, overriding them
+ honker.licenseOverride { HonkerLicenseOverrideCandidate candidate ->
+ if( candidate.group == 'asm' || candidate.module == 'prefuse-core' )
+ {
+ candidate.license = 'BSD 3-Clause'
+ }
+ if( candidate.group == 'javax.websocket' )
+ {
+ candidate.license = 'CDDL'
+ }
+ if( candidate.group == 'org.apache.httpcomponents'
+ || candidate.group == 'net.java.dev.jna'
+ || candidate.group == 'lucene'
+ || candidate.group == 'jdbm'
+ || candidate.group == 'org.osgi'
+ || candidate.group.startsWith( 'org.restlet' ) )
+ {
+ candidate.license = 'Apache 2'
+ }
+ }
+ honkerGenNotice.header = 'Apache Zest'
+ honkerGenNotice.footer = 'This product includes software developed at\n' +
+ 'The Apache Software Foundation (http://www.apache.org/).\n'
+ project.tasks.getByName( 'check' ).dependsOn project.tasks.getByName( 'honkerCheck' )
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy
new file mode 100644
index 0000000..4517534
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/CodeProjectsPlugin.groovy
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.zest.gradle
+
+import groovy.transform.CompileStatic
+import org.apache.zest.gradle.doc.AsciidocBuildInfoPlugin
+import org.apache.zest.gradle.version.VersionClassPlugin
+import org.gradle.api.JavaVersion
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.plugins.JavaPluginConvention
+import org.gradle.api.plugins.osgi.OsgiManifest
+import org.gradle.api.tasks.javadoc.Javadoc
+import org.gradle.jvm.tasks.Jar
+import org.gradle.testing.jacoco.plugins.JacocoPluginExtension
+
+@CompileStatic
+class CodeProjectsPlugin implements Plugin<Project>
+{
+ static boolean isCodeProject( Project project )
+ {
+ [ 'src/main/java', 'src/test/java',
+ 'src/main/scala', 'src/test/scala',
+ 'src/main/groovy', 'src/test/groovy' ].collect { path ->
+ new File( "$project.projectDir/$path" )
+ }.any { dir -> dir.isDirectory() }
+ }
+
+ @Override
+ void apply( final Project project )
+ {
+ project.plugins.apply VersionClassPlugin
+ project.plugins.apply AsciidocBuildInfoPlugin
+
+ configureJar( project )
+ configureSupplementaryArchives( project )
+
+ configureJacoco( project )
+ configureCheckstyle( project )
+ }
+
+ private static void configureJar( Project project )
+ {
+ project.plugins.apply 'osgi'
+ def jar = project.tasks.getByName( 'jar' ) as Jar
+ def manifest = jar.manifest as OsgiManifest
+ manifest.attributes( [
+ license : 'http://www.apache.org/licenses/LICENSE-2.0.txt',
+ docURL : 'https://zest.apache.org/',
+ description: project.description ?:
+ 'Apache Zest\u2122 (Java Edition) is a platform for Composite Oriented Programming',
+ vendor : 'The Apache Software Foundation, https://www.apache.org',
+ ] )
+ manifest.instruction '-debug', 'true'
+ }
+
+ private static void configureSupplementaryArchives( Project project )
+ {
+ def javaConvention = project.convention.getPlugin( JavaPluginConvention )
+ def sourceJar = project.tasks.create( 'sourceJar', Jar ) { Jar task ->
+ task.classifier = 'sources'
+ task.from javaConvention.sourceSets.getByName( 'main' ).allSource
+ }
+ def testSourceJar = project.tasks.create( 'testSourceJar', Jar ) { Jar task ->
+ task.classifier = 'testsources'
+ task.from javaConvention.sourceSets.getByName( 'test' ).allSource
+ }
+ def javadoc = project.tasks.getByName( 'javadoc' ) as Javadoc
+ def javadocJar = project.tasks.create( 'javadocJar', Jar ) { Jar task ->
+ task.classifier = 'javadoc'
+ task.from javadoc.destinationDir
+ task.dependsOn javadoc
+ }
+ project.artifacts.add( 'archives', sourceJar )
+ project.artifacts.add( 'archives', testSourceJar )
+ project.artifacts.add( 'archives', javadocJar )
+ }
+
+ private static void configureJacoco( Project project )
+ {
+ // ZEST-175
+ if( JavaVersion.current() < JavaVersion.VERSION_1_9 )
+ {
+ project.plugins.apply 'jacoco'
+ def jacoco = project.extensions.getByType( JacocoPluginExtension )
+ jacoco.toolVersion = '0.7.5.201505241946'
+ }
+ }
+
+ private static void configureCheckstyle( Project project )
+ {
+ // project.plugins.apply 'checkstyle'
+ // if( name == "org.apache.zest.core.runtime" )
+ // {
+ // checkstyleMain {
+ // configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-runtime-checkstyle.xml" )
+ // ignoreFailures = true
+ // }
+ // }
+ // else
+ // {
+ // checkstyleMain {
+ // configFile = new File( rootProject.projectDir.absolutePath.toString() + '/etc/zest-api-checkstyle.xml' )
+ // ignoreFailures = true
+ // reporting.baseDir = "$rootProject.reporting.baseDir/checkstyle"
+ // }
+ // }
+ // checkstyleTest {
+ // configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-tests-checkstyle.xml" )
+ // ignoreFailures = true
+ // }
+ //
+ // checkstyleVersion {
+ // configFile = new File( "$rootProject.projectDir.absolutePath/etc/zest-tests-checkstyle.xml" )
+ // ignoreFailures = true
+ // }
+ // // Create checkstyle report
+ // task checkstyleReport( type: XsltTask, dependsOn: check ) {
+ // source project.checkstyle.reportsDir
+ // include '*.xml'
+ // destDir = file( "build/reports/checkstyle/" )
+ // extension = 'html'
+ // stylesheetFile = file( "$rootProject.projectDir/etc/checkstyle-noframes.xsl" )
+ // }
+ //
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy
new file mode 100644
index 0000000..b915cea
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/RootProjectPlugin.groovy
@@ -0,0 +1,259 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.zest.gradle
+
+import groovy.transform.CompileStatic
+import org.apache.rat.gradle.RatTask
+import org.apache.zest.gradle.dist.DistributionPlugin
+import org.apache.zest.gradle.release.ReleaseSpecExtension
+import org.apache.zest.gradle.release.ReleaseSpecPlugin
+import org.apache.zest.gradle.test.AggregatedJacocoReportTask
+import org.gradle.api.GradleException
+import org.gradle.api.JavaVersion
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.Task
+import org.gradle.api.artifacts.Configuration
+import org.gradle.api.plugins.JavaPluginConvention
+import org.gradle.api.tasks.Copy
+import org.gradle.api.tasks.javadoc.Javadoc
+import org.gradle.api.tasks.testing.Test
+import org.gradle.api.tasks.testing.TestReport
+import org.gradle.external.javadoc.StandardJavadocDocletOptions
+
+@CompileStatic
+class RootProjectPlugin implements Plugin<Project>
+{
+ static final String PROJECT_TITLE = 'Apache Zest\u2122 (Java Edition) SDK'
+ static final String PROJECT_DESCRIPTION = 'Apache Zest\u2122 (Java Edition) is a framework for domain centric ' +
+ 'application development, including evolved concepts from AOP, DI and DDD.'
+
+ static class TaskGroups
+ {
+ static final String HELPER_TASKS = 'Helper tasks'
+ static final String DOCUMENTATION = 'Documentation'
+ }
+
+ static class TaskNames
+ {
+ static final String GO_OFFLINE = 'goOffline'
+ static final String GLOBAL_TEST_REPORT = 'globalTestReport'
+ static final String JAVADOCS = 'javadocs'
+ static final String ARCHIVE_JAVADOCS = 'archiveJavadocs'
+ static final String BUILD_ALL = 'buildAll'
+ }
+
+ @Override
+ void apply( Project project )
+ {
+ project.plugins.apply ReleaseSpecPlugin
+
+ applyProjectMetadata( project )
+ applyHelperTasks( project )
+ applyPlugins( project )
+
+ configureJacoco( project )
+ configureTestReport( project )
+ configureJavadocs( project )
+ configureRat( project )
+
+ project.plugins.apply DistributionPlugin
+ configureReleaseTask( project )
+ }
+
+ private static void applyProjectMetadata( Project project )
+ {
+ def extraProperties = project.extensions.extraProperties
+ extraProperties.set 'title', PROJECT_TITLE
+ extraProperties.set 'description', PROJECT_DESCRIPTION
+ }
+
+ private static void applyHelperTasks( Project project )
+ {
+ project.tasks.create( TaskNames.GO_OFFLINE ) { Task task ->
+ task.group = TaskGroups.HELPER_TASKS
+ task.doLast {
+ def allConfigurations = project.allprojects.collect { Project each ->
+ each.configurations
+ }.flatten() as Set<Configuration>
+ allConfigurations*.resolvedConfiguration
+ }
+ }
+ def buildAll = project.tasks.create( TaskNames.BUILD_ALL )
+ buildAll.dependsOn 'javadocs', 'check', 'jar',
+ project.subprojects.collect { p -> p.tasks.getByName( 'dependencyReport' ) },
+ project.subprojects.collect { p -> p.tasks.getByName( 'assemble' ) },
+ ':org.apache.zest.manual:website'
+ }
+
+ private static void applyPlugins( Project project )
+ {
+ project.plugins.apply 'org.nosphere.apache.rat'
+ }
+
+ private static void configureJacoco( Project project )
+ {
+ project.configurations.create( 'jacoco' )
+ project.dependencies.add( 'jacoco', 'org.jacoco:org.jacoco.ant:0.7.5.201505241946' )
+ def task = project.tasks.create( 'coverageReport', AggregatedJacocoReportTask ) { AggregatedJacocoReportTask task ->
+ // ZEST-175
+ task.enabled = JavaVersion.current() < JavaVersion.VERSION_1_9
+ task.dependsOn project.subprojects.collect( { Project p -> p.tasks.getByName( 'test' ) } )
+ }
+ project.tasks.getByName( 'check' ).dependsOn task
+ }
+
+ private static void configureTestReport( Project project )
+ {
+ project.tasks.create( TaskNames.GLOBAL_TEST_REPORT, TestReport ) { TestReport task ->
+ task.destinationDir = project.file( "$project.buildDir/reports/tests" )
+ task.reportOn project.subprojects.collect { it.tasks.getByName( 'test' ) }
+ }
+ def test = project.tasks.getByName( 'test' ) as Test
+ test.dependsOn project.subprojects.collect { it.tasks.getByName( 'test' ) }
+ test.dependsOn project.tasks.getByName( TaskNames.GLOBAL_TEST_REPORT )
+ test.reports.html.enabled = false
+ }
+
+ private static void configureJavadocs( Project project )
+ {
+ def releaseSpec = project.extensions.getByType( ReleaseSpecExtension )
+ project.tasks.create( TaskNames.JAVADOCS, Javadoc ) { Javadoc task ->
+ task.group = TaskGroups.DOCUMENTATION
+ task.description = 'Build the whole SDK public Javadoc'
+ task.dependsOn ReleaseSpecPlugin.TaskNames.RELEASE_APPROVED_PROJECTS
+ def options = task.options as StandardJavadocDocletOptions
+ options.docFilesSubDirs = true
+ options.encoding = "UTF-8"
+ options.overview = "${ project.projectDir }/src/javadoc/overview.html"
+ task.title = "${ PROJECT_TITLE } ${ project.version }"
+ def apiSources = releaseSpec.approvedProjects.findAll { approved ->
+ ( approved.name.startsWith( 'org.apache.zest.core' ) &&
+ !approved.name.startsWith( 'org.apache.zest.core.runtime' ) ) ||
+ approved.name.startsWith( 'org.apache.zest.library' ) ||
+ approved.name.startsWith( 'org.apache.zest.extension' ) ||
+ approved.name.startsWith( 'org.apache.zest.tool' )
+ }
+ task.source apiSources.collect { each ->
+ each.convention.getPlugin( JavaPluginConvention ).sourceSets.getByName( 'main' ).allJava
+ }
+ task.destinationDir = project.file( "${ project.convention.getPlugin( JavaPluginConvention ).docsDir }/javadocs" )
+ task.classpath = project.files( apiSources.collect { apiProject ->
+ apiProject.convention.getPlugin( JavaPluginConvention ).sourceSets.getByName( 'main' ).compileClasspath
+ } )
+ options.group( [
+ "Core API" : [ "org.apache.zest.api",
+ "org.apache.zest.api.*",
+ "org.apache.zest.io",
+ "org.apache.zest.functional" ],
+ "Core Bootstrap": [ "org.apache.zest.bootstrap",
+ "org.apache.zest.bootstrap.*" ],
+ "Core SPI" : [ "org.apache.zest.spi",
+ "org.apache.zest.spi.*" ],
+ "Libraries" : [ "org.apache.zest.library.*" ],
+ "Extensions" : [ "org.apache.zest.valueserialization.*",
+ "org.apache.zest.entitystore.*",
+ "org.apache.zest.index.*",
+ "org.apache.zest.metrics.*",
+ "org.apache.zest.cache.*",
+ "org.apache.zest.migration",
+ "org.apache.zest.migration.*" ],
+ "Tools" : [ "org.apache.zest.tools.*",
+ "org.apache.zest.envisage",
+ "org.apache.zest.envisage.*" ],
+ "Test Support" : [ "org.apache.zest.test",
+ "org.apache.zest.test.*" ]
+ ] )
+ }
+ project.tasks.create( TaskNames.ARCHIVE_JAVADOCS, Copy ) { Copy task ->
+ task.dependsOn TaskNames.JAVADOCS
+ task.from 'build/docs/javadoc/'
+ if( project.version == '0' || project.version.toString().contains( "SNAPSHOT" ) )
+ {
+ task.into( "$project.projectDir/../zest-web/site/content/java/develop/javadocs/" )
+ }
+ else
+ {
+ task.into( "$project.projectDir/../zest-web/site/content/java/$project.version/javadocs/" )
+ }
+ }
+ }
+
+ private static void configureRat( Project project )
+ {
+ def rat = project.tasks.getByName( 'rat' ) as RatTask
+ rat.onlyIf { project.version != '0' }
+ rat.excludes = [
+ '**/.DS_Store/**', '**/._*',
+ // Git Files
+ '**/.git/**', '**/.gitignore',
+ // Gradle Files
+ 'gradle/wrapper/**', '**/gradlew', '**/gradlew.bat', '**/.gradle/**',
+ // Build Output
+ '**/build/**', '**/derby.log', 'out/**',
+ // IDE Files
+ '**/.idea/**', '**/*.iml', '**/*.ipr', '**/*.iws',
+ '**/.settings/**', '**/.classpath', '**/.project',
+ '**/.gradletasknamecache', '**/private/cache/**',
+ '**/.nb-gradle-properties', '**/.nb-gradle/**',
+ // JSON files are not allowed to have comments, according to http://www.json.org/ and http://www.ietf.org/rfc/rfc4627.txt
+ '**/*.json',
+ // Various Text Resources
+ '**/README.*', '**/README*.*', '**/TODO',
+ '**/src/main/resources/**/*.txt',
+ '**/src/test/resources/**/*.txt',
+ 'libraries/rest-server/src/main/resources/**/*.htm',
+ 'libraries/rest-server/src/main/resources/**/*.atom',
+ 'tools/qidea/src/main/resources/**/*.ft',
+ 'tools/qidea/src/main/resources/**/*.template',
+ // Graphic Resources
+ '**/*.svg', '**/*.gif', '**/*.png', '**/*.jpg', '**/*.psd',
+ // Keystores
+ '**/*.jceks',
+ // Syntax Highlighter - MIT
+ 'manual/**/sh*.css', 'manual/**/sh*.js',
+ // jQuery & plugins - MIT
+ 'manual/**/jquery*.js',
+ // W3C XML Schemas - W3C Software License
+ 'samples/rental/src/main/resources/*.xsd',
+ // Zest Generator Heroes Templates - MIT
+ 'tools/generator-zest/app/templates/Heroes/**',
+ // templates that will become the user's source files, should not have license headers
+ 'tools/shell/src/dist/etc/templates/**',
+ ]
+ }
+
+ private static void configureReleaseTask( Project project )
+ {
+ def release = project.tasks.create( 'release' )
+ release.description = 'Builds, tests and uploads the release artifacts'
+ release.group = 'Release'
+ release.doFirst {
+ if( System.properties[ 'version' ] == null || System.properties[ 'version' ].toString().contains( 'SNAPSHOT' ) )
+ {
+ throw new GradleException( "'version' must be given as a system property to perform a release." )
+ }
+ }
+ release.dependsOn 'checkReleaseSpec',
+ 'rat',
+ 'archiveJavadocs',
+ ':org.apache.zest.manual:copyWebsite',
+ project.allprojects.collect { it.tasks.getByName( 'uploadArchives' ) },
+ 'dist'
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestExtension.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestExtension.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestExtension.groovy
index 954291d..07e4e6b 100644
--- a/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestExtension.groovy
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestExtension.groovy
@@ -17,9 +17,11 @@
*/
package org.apache.zest.gradle
+import groovy.transform.CompileStatic
import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
+@CompileStatic
class ZestExtension
{
private final Project project
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestPlugin.groovy
deleted file mode 100644
index 2752311..0000000
--- a/buildSrc/src/main/groovy/org/apache/zest/gradle/ZestPlugin.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.zest.gradle
-
-import groovy.transform.CompileStatic
-import org.gradle.api.Plugin
-import org.gradle.api.Project
-
-@CompileStatic
-class ZestPlugin implements Plugin<Project>
-{
- @Override
- void apply( final Project project )
- {
- project.extensions.create( "zest", ZestExtension, project )
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/56793996/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy
new file mode 100644
index 0000000..6ced34d
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy
@@ -0,0 +1,346 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.zest.gradle.dependencies
+
+import groovy.transform.CompileStatic
+import org.gradle.api.Action
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.artifacts.Configuration
+import org.gradle.api.artifacts.DependencySubstitution
+import org.gradle.api.artifacts.component.ModuleComponentSelector
+import org.gradle.api.artifacts.repositories.MavenArtifactRepository
+
+@CompileStatic
+class DependenciesPlugin implements Plugin<Project>
+{
+ static final Map<String, String> REPOSITORIES_URLS = [
+ mavenCentral: "https://repo1.maven.org/maven2/",
+ ops4j : "http://repository.ops4j.org/maven2/",
+ restlet : 'https://maven.restlet.com/',
+ clojars : "https://clojars.org/repo/",
+ ]
+
+ static final def asmVersion = '5.1'
+ static final def bonecpVersion = '0.8.0.RELEASE'
+ static final def bouncyVersion = '1.55'
+ static final def codahaleMetricsVersion = '3.1.2'
+ static final def commonsDbcpVersion = '2.1.1'
+ static final def commonsLangVersion = '3.5'
+ static final def derbyVersion = '10.13.1.1'
+ static final def dnsJavaVersion = '2.1.7'
+ static final def ehcacheVersion = '3.1.3'
+ static final def elasticsearchVersion = '5.0.0'
+ static final def freemarkerVersion = '2.3.25-incubating'
+ static final def geodeVersion = '1.0.0-incubating'
+ static final def groovyVersion = '2.4.7'
+ static final def h2Version = '1.4.193'
+ static final def hazelcastVersion = '3.7.2'
+ static final def hamcrestVersion = '1.3'
+ static final def httpClientVersion = '4.5.2'
+ static final def jacksonVersion = '2.8.4'
+ static final def javascriptVersion = '1.7.7.1'
+ static final def javasqlgeneratorVersion = '0.3.2'
+ static final def jcloudsVersion = '1.9.2'
+ static final def jdbmVersion = '2.4'
+ static final def jedisVersion = '2.9.0'
+ static final def jettyVersion = '9.2.17.v20160517' // 9.3.x Tests fail!
+ static final def jgoodiesLooksVersion = '2.7.0'
+ static final def jtaVersion = '1.1'
+ static final def leveldbVersion = '0.9'
+ static final def leveldbJniVersion = '1.8'
+ static final def liquibaseVersion = '3.5.3'
+ static final def logbackVersion = '1.1.7'
+ static final def mongodbVersion = '3.3.0'
+ static final def mysqlVersion = '6.0.4'
+ static final def orgJsonVersion = '20130213'
+ static final def osgiVersion = '4.2.0' // 4.3.0 Fails to compile! - 5.0.0 exists
+ static final def pdfboxVersion = '2.0.3'
+ static final def postgresqlVersion = '9.4.1211'
+ static final def prefuseVersion = '1.0.1'
+ static final def restletVersion = '2.3.7'
+ static final def rdfVersion = '2.7.16' // 2.8.x change query results!! 4.x exists
+ static final def riakVersion = '2.0.8'
+ static final def scalaVersion = '2.11.8'
+ static final def servletVersion = '3.1.0'
+ static final def shiroVersion = '1.3.2'
+ static final def skedVersion = '2.1'
+ static final def slf4jVersion = '1.7.21'
+ static final def solrVersion = "1.4.1" // 4.x Fails to compile!
+ static final def springVersion = '4.3.3.RELEASE'
+ static final def spymemcachedVersion = '2.12.1'
+ static final def sqliteVersion = '3.14.2.1'
+ static final def velocityVersion = '1.7'
+ static final def woodstoxVersion = '4.4.1'
+
+ static final def antVersion = '1.9.7'
+ static final def awaitilityVersion = '2.0.0'
+ static final def easyMockVersion = '3.4'
+ static final def junitVersion = '4.12'
+ static final def mockitoVersion = '2.2.9'
+
+ static final def libraries = [
+ // Ant
+ ant : "org.apache.ant:ant:$antVersion",
+ ant_junit : "org.apache.ant:ant-junit:$antVersion",
+
+ // ASM
+ asm : "org.ow2.asm:asm:$asmVersion",
+ asm_util : "org.ow2.asm:asm-util:$asmVersion",
+ asm_commons : "org.ow2.asm:asm-commons:$asmVersion",
+
+ // OSGi
+ osgi_core : "org.osgi:org.osgi.core:$osgiVersion",
+ osgi_compendium : "org.osgi:org.osgi.compendium:$osgiVersion",
+ osgi_enterprise : "org.osgi:org.osgi.enterprise:$osgiVersion",
+
+ // logging
+ slf4j_api : "org.slf4j:slf4j-api:$slf4jVersion",
+ slf4j_simple : "org.slf4j:slf4j-simple:$slf4jVersion",
+ logback : 'ch.qos.logback:logback-classic:' + logbackVersion,
+ jcl_slf4j : "org.slf4j:jcl-over-slf4j:$slf4jVersion",
+ jcl_api : 'commons-logging:commons-logging-api:99.0-does-not-exist', //ensure it is never used.
+ jcl : 'commons-logging:commons-logging:99.0-does-not-exist', // ensure it is never used.
+
+ // org.json
+ org_json : "org.codeartisans:org.json:$orgJsonVersion",
+
+ // Restlet
+ restlet : [ "org.restlet.jee:org.restlet:$restletVersion",
+ "org.restlet.jee:org.restlet.ext.atom:$restletVersion",
+ "org.restlet.jee:org.restlet.ext.servlet:$restletVersion",
+ "org.restlet.jee:org.restlet.ext.slf4j:$restletVersion" ],
+
+ // Scala
+ scala : "org.scala-lang:scala-library:$scalaVersion",
+
+ // Spring
+ spring_core : [ "org.springframework:spring-beans:$springVersion",
+ "org.springframework:spring-context:$springVersion" ],
+
+ spring_testsupport : "org.springframework:spring-test:$springVersion",
+
+ // RDF
+ sesame : [ "org.openrdf.sesame:sesame-model:$rdfVersion",
+ "org.openrdf.sesame:sesame-queryparser-sparql:$rdfVersion",
+ "org.openrdf.sesame:sesame-repository-dataset:$rdfVersion",
+ "org.openrdf.sesame:sesame-repository-http:$rdfVersion",
+ "org.openrdf.sesame:sesame-rio-api:$rdfVersion",
+ "org.openrdf.sesame:sesame-rio-n3:$rdfVersion",
+ "org.openrdf.sesame:sesame-rio-ntriples:$rdfVersion",
+ "org.openrdf.sesame:sesame-rio-rdfxml:$rdfVersion",
+ "org.openrdf.sesame:sesame-rio-trig:$rdfVersion",
+ "org.openrdf.sesame:sesame-rio-trix:$rdfVersion",
+ "org.openrdf.sesame:sesame-rio-turtle:$rdfVersion",
+ "org.openrdf.sesame:sesame-sail-api:$rdfVersion",
+ "org.openrdf.sesame:sesame-sail-memory:$rdfVersion",
+ "org.openrdf.sesame:sesame-sail-nativerdf:$rdfVersion",
+ "org.openrdf.sesame:sesame-sail-rdbms:$rdfVersion" ],
+ sparql : [ "org.openrdf.sesame:sesame-queryresultio-sparqlxml:$rdfVersion",
+ "org.openrdf.sesame:sesame-queryresultio-sparqljson:$rdfVersion" ],
+
+ // SOLR
+ solr : [ "org.apache.solr:solr-core:$solrVersion",
+ "org.apache.solr:solr-solrj:$solrVersion" ],
+
+ // Jetty
+ jetty_server : "org.eclipse.jetty:jetty-server:$jettyVersion",
+ jetty_webapp : "org.eclipse.jetty:jetty-webapp:$jettyVersion",
+ jetty_servlet : "org.eclipse.jetty:jetty-servlet:$jettyVersion",
+ jetty_http : "org.eclipse.jetty:jetty-http:$jettyVersion",
+ jetty_io : "org.eclipse.jetty:jetty-io:$jettyVersion",
+ jetty_jmx : "org.eclipse.jetty:jetty-jmx:$jettyVersion",
+ jetty_security : "org.eclipse.jetty:jetty-security:$jettyVersion",
+ jetty_jsp : "org.eclipse.jetty:jetty-jsp:$jettyVersion",
+ jetty_util : "org.eclipse.jetty:jetty-util:$jettyVersion",
+ jetty_continuation : "org.eclipse.jetty:jetty-continuation:$jettyVersion",
+ jetty_client : "org.eclipse.jetty:jetty-client:$jettyVersion",
+ jetty_xml : "org.eclipse.jetty:jetty-xml:$jettyVersion",
+
+ // Scripting
+ groovy : "org.codehaus.groovy:groovy-all:$groovyVersion",
+
+ javascript : "org.mozilla:rhino:$javascriptVersion",
+
+ // Library & Extension dependencies
+ jackson_mapper : "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion",
+ ehcache : "org.ehcache:ehcache:$ehcacheVersion",
+ elasticsearch : [ "org.elasticsearch:elasticsearch:$elasticsearchVersion",
+ "org.elasticsearch.client:transport:$elasticsearchVersion",
+ // Elasticsearch 5.0 do not work with log4j 2.7
+ "org.apache.logging.log4j:log4j-api:2.6.2",
+ "org.apache.logging.log4j:log4j-core:2.6.2" ],
+ geode : "org.apache.geode:geode-core:$geodeVersion",
+ h2 : "com.h2database:h2:$h2Version",
+ hazelcast : "com.hazelcast:hazelcast:$hazelcastVersion",
+ jclouds_core : "org.apache.jclouds:jclouds-core:$jcloudsVersion",
+ jclouds_blobstore : "org.apache.jclouds:jclouds-allblobstore:$jcloudsVersion",
+ jclouds_filesystem : "org.apache.jclouds.api:filesystem:$jcloudsVersion",
+ jdbm : "jdbm:jdbm:$jdbmVersion",
+ jedis : "redis.clients:jedis:$jedisVersion",
+ jgoodies_looks : "com.jgoodies:jgoodies-looks:$jgoodiesLooksVersion",
+ leveldb_api : "org.iq80.leveldb:leveldb-api:$leveldbVersion",
+ leveldb_java : "org.iq80.leveldb:leveldb:$leveldbVersion",
+ leveldb_jni_all : "org.fusesource.leveldbjni:leveldbjni-all:$leveldbJniVersion",
+ mongodb : "org.mongodb:mongo-java-driver:$mongodbVersion",
+ riak : "com.basho.riak:riak-client:$riakVersion",
+ jta : "javax.transaction:jta:$jtaVersion",
+ javaSqlGenerator : "org.java-sql-generator:org.java-sql-generator.api:$javasqlgeneratorVersion",
+ javaSqlGeneratorImpl: "org.java-sql-generator:org.java-sql-generator.implementation:$javasqlgeneratorVersion",
+ velocity : "org.apache.velocity:velocity:$velocityVersion",
+ commons_dbcp : "org.apache.commons:commons-dbcp2:$commonsDbcpVersion",
+ commons_lang : "org.apache.commons:commons-lang3:$commonsLangVersion",
+ servlet_api : "javax.servlet:javax.servlet-api:$servletVersion",
+ http_client : "org.apache.httpcomponents:httpclient:$httpClientVersion",
+ woodstox : "org.codehaus.woodstox:woodstox-core-asl:$woodstoxVersion",
+ restlet_xml : "org.restlet.jee:org.restlet.ext.xml:$restletVersion",
+ bouncy_castle : "org.bouncycastle:bcprov-jdk15on:$bouncyVersion",
+ dnsjava : "dnsjava:dnsjava:$dnsJavaVersion",
+ freemarker : "org.freemarker:freemarker:$freemarkerVersion",
+ shiro : "org.apache.shiro:shiro-core:$shiroVersion",
+ shiro_web : "org.apache.shiro:shiro-web:$shiroVersion",
+ bonecp : "com.jolbox:bonecp:$bonecpVersion",
+ liquibase : "org.liquibase:liquibase-core:$liquibaseVersion",
+ sked : "org.codeartisans:sked:$skedVersion",
+ pdfbox : "org.apache.pdfbox:pdfbox:$pdfboxVersion",
+ prefuse : "de.sciss:prefuse-core:$prefuseVersion",
+ spymemcached : "net.spy:spymemcached:$spymemcachedVersion",
+ codahale_metrics : [ "io.dropwizard.metrics:metrics-core:$codahaleMetricsVersion",
+ "io.dropwizard.metrics:metrics-healthchecks:$codahaleMetricsVersion" ],
+
+ // Testing
+ junit : "junit:junit:$junitVersion",
+ hamcrest : [ "org.hamcrest:hamcrest-core:$hamcrestVersion",
+ "org.hamcrest:hamcrest-library:$hamcrestVersion" ],
+ awaitility : "org.awaitility:awaitility:$awaitilityVersion",
+ easymock : "org.easymock:easymock:$easyMockVersion",
+ mockito : "org.mockito:mockito-core:$mockitoVersion",
+
+ // Tests dependencies
+ derby : "org.apache.derby:derby:$derbyVersion",
+ derbyclient : "org.apache.derby:derbyclient:$derbyVersion",
+ derbynet : "org.apache.derby:derbynet:$derbyVersion",
+ postgres : "org.postgresql:postgresql:$postgresqlVersion",
+ mysql_connector : "mysql:mysql-connector-java:$mysqlVersion",
+ sqlite : "org.xerial:sqlite-jdbc:$sqliteVersion",
+ ]
+
+ static final Map<String, Object> defaultTestDependencies = [
+ testCompile: [ libraries[ 'junit' ], libraries[ 'hamcrest' ], libraries[ 'ant' ], libraries[ 'ant_junit' ] ],
+ testRuntime: [ libraries[ 'asm' ], libraries[ 'asm_commons' ], libraries[ 'asm_util' ] ]
+ ] as Map
+
+ @Override
+ void apply( final Project project )
+ {
+ applyRepositories( project )
+ applyLibraries( project )
+ applyDependencyResolutionRules( project )
+ applyDefaultTestDependencies( project )
+ }
+
+ private static void applyRepositories( Project project )
+ {
+ REPOSITORIES_URLS.each { name, url ->
+ project.repositories.maven { MavenArtifactRepository repo ->
+ repo.name = name
+ repo.url = url
+ }
+ }
+ }
+
+ private static void applyLibraries( Project project )
+ {
+ if( project.rootProject == project )
+ {
+ project.extensions.extraProperties.set( 'libraries', libraries )
+ }
+ }
+
+ private static void applyDependencyResolutionRules( Project project )
+ {
+ project.configurations.all(
+ { Configuration configuration ->
+ configuration.resolutionStrategy.dependencySubstitution.all( { DependencySubstitution dep ->
+ if( dep.requested instanceof ModuleComponentSelector )
+ {
+ def requested = dep.requested as ModuleComponentSelector
+ // Always resolve SLF4J to the same version
+ if( requested.group == 'org.slf4j' )
+ {
+ dep.useTarget group: requested.group, name: requested.module, version: slf4jVersion
+ }
+ // Always resolve ASM to the same version
+ if( requested.group == 'org.ow2.asm' )
+ {
+ dep.useTarget group: requested.group, name: requested.module, version: asmVersion
+ }
+ // Always resolve OSGi to the same version
+ if( requested.group == 'org.osgi' )
+ {
+ dep.useTarget group: requested.group, name: requested.module, version: osgiVersion
+ }
+ // Always resolve Jackson to the same version
+ if( requested.group.startsWith( 'com.fasterxml.jackson' ) && requested.module != 'jackson-parent' )
+ {
+ dep.useTarget group: requested.group, name: requested.module, version: jacksonVersion
+ }
+ // woodstox:wstx-asl is broken (no pom), use org.codehaus.woodstox:wstx-asl instead
+ if( requested.group == 'woodstox' && requested.module == 'wstx-asl' )
+ {
+ dep.useTarget group: 'org.codehaus.woodstox', name: 'wstx-asl', version: requested.version
+ }
+ // some bad citizens have SNAPSHOT parents ...
+ if( requested.module == 'commons-sandbox-parent' && requested.version == '3-SNAPSHOT' )
+ {
+ dep.useTarget group: requested.group, name: requested.module, version: '3'
+ }
+ // GSON 2.3 POM is invalid, use 2.3.1 instead .. see https://github.com/google/gson/issues/588
+ if( requested.group == 'com.google.code.gson' && requested.module == 'gson' && requested.version == '2.3' )
+ {
+ dep.useTarget group: requested.group, name: requested.module, version: '2.3.1'
+ }
+ // Findbugs Annotation is LGPL, use https://github.com/stephenc/findbugs-annotations which is
+ // Apache 2 licensed instead
+ if( requested.group == 'net.sourceforge.findbugs' && requested.module == 'annotations' )
+ {
+ dep.useTarget group: 'com.github.stephenc.findbugs', name: 'findbugs-annotations', version: '1.3.9-1'
+ }
+ }
+ } as Action<DependencySubstitution> )
+ } as Action<Configuration> )
+ }
+
+ private static void applyDefaultTestDependencies( Project project )
+ {
+ defaultTestDependencies.each { String configuration, Object dependencies ->
+ dependencies.each { dependency ->
+ if( dependency instanceof Collection )
+ {
+ dependency.each { subdep ->
+ project.dependencies.add( configuration, subdep )
+ }
+ }
+ else
+ {
+ project.dependencies.add( configuration, dependency )
+ }
+ }
+ }
+ }
+}