Gradle User Guide

Gradle User Guide

Version 2.5

Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.

Table of Contents

1. Introduction
1.1. About this user guide
2. Overview
2.1. Features
2.2. Why Groovy?
3. Tutorials
3.1. Getting Started
4. Installing Gradle
4.1. Prerequisites
4.2. Download
4.3. Unpacking
4.4. Environment variables
4.5. Running and testing your installation
4.6. JVM options
5. Troubleshooting
5.1. Working through problems
5.2. Getting help
6. Build Script Basics
6.1. Projects and tasks
6.2. Hello world
6.3. A shortcut task definition
6.4. Build scripts are code
6.5. Task dependencies
6.6. Dynamic tasks
6.7. Manipulating existing tasks
6.8. Shortcut notations
6.9. Extra task properties
6.10. Using Ant Tasks
6.11. Using methods
6.12. Default tasks
6.13. Configure by DAG
6.14. Where to next?
7. Java Quickstart
7.1. The Java plugin
7.2. A basic Java project
7.3. Multi-project Java build
7.4. Where to next?
8. Dependency Management Basics
8.1. What is dependency management?
8.2. Declaring your dependencies
8.3. Dependency configurations
8.4. External dependencies
8.5. Repositories
8.6. Publishing artifacts
8.7. Where to next?
9. Groovy Quickstart
9.1. A basic Groovy project
9.2. Summary
10. Web Application Quickstart
10.1. Building a WAR file
10.2. Running your web application
10.3. Summary
11. Using the Gradle Command-Line
11.1. Executing multiple tasks
11.2. Excluding tasks
11.3. Continuing the build when a failure occurs
11.4. Task name abbreviation
11.5. Selecting which build to execute
11.6. Obtaining information about your build
11.7. Dry Run
11.8. Summary
12. Using the Gradle Graphical User Interface
12.1. Task Tree
12.2. Favorites
12.3. Command Line
12.4. Setup
13. Writing Build Scripts
13.1. The Gradle build language
13.2. The Project API
13.3. The Script API
13.4. Declaring variables
13.5. Configuring arbitrary objects
13.6. Configuring arbitrary objects using an external script
13.7. Some Groovy basics
14. More about Tasks
14.1. Defining tasks
14.2. Locating tasks
14.3. Configuring tasks
14.4. Adding dependencies to a task
14.5. Ordering tasks
14.6. Adding a description to a task
14.7. Replacing tasks
14.8. Skipping tasks
14.9. Skipping tasks that are up-to-date
14.10. Task rules
14.11. Finalizer tasks
14.12. Summary
15. Working With Files
15.1. Locating files
15.2. File collections
15.3. File trees
15.4. Using the contents of an archive as a file tree
15.5. Specifying a set of input files
15.6. Copying files
15.7. Using the Sync task
15.8. Creating archives
16. Using Ant from Gradle
16.1. Using Ant tasks and types in your build
16.2. Importing an Ant build
16.3. Ant properties and references
16.4. API
17. Logging
17.1. Choosing a log level
17.2. Writing your own log messages
17.3. Logging from external tools and libraries
17.4. Changing what Gradle logs
18. The Gradle Daemon
18.1. What is the Gradle Daemon?
18.2. Management and configuration
18.3. When should I not use the Gradle Daemon?
18.4. Tools & IDEs
18.5. How does the Gradle Daemon make builds faster?
19. Continuous build
19.1. How do I start and stop a continuous build?
19.2. What will cause a subsequent build?
19.3. Limitations and quirks
20. The Build Environment
20.1. Configuring the build environment via gradle.properties
20.2. Gradle properties and system properties
20.3. Accessing the web via a proxy
21. Gradle Plugins
21.1. What plugins do
21.2. Types of plugins
21.3. Applying plugins
21.4. Applying plugins with the buildscript block
21.5. Applying plugins with the plugins DSL
21.6. Finding community plugins
21.7. More on plugins
22. Standard Gradle plugins
22.1. Language plugins
22.2. Incubating language plugins
22.3. Integration plugins
22.4. Incubating integration plugins
22.5. Software development plugins
22.6. Incubating software development plugins
22.7. Base plugins
22.8. Third party plugins
23. The Java Plugin
23.1. Usage
23.2. Source sets
23.3. Tasks
23.4. Project layout
23.5. Dependency management
23.6. Convention properties
23.7. Working with source sets
23.8. Javadoc
23.9. Clean
23.10. Resources
23.11. CompileJava
23.12. Incremental Java compilation
23.13. Test
23.14. Jar
23.15. Uploading
24. The Groovy Plugin
24.1. Usage
24.2. Tasks
24.3. Project layout
24.4. Dependency management
24.5. Automatic configuration of groovyClasspath
24.6. Convention properties
24.7. Source set properties
24.8. GroovyCompile
25. The Scala Plugin
25.1. Usage
25.2. Tasks
25.3. Project layout
25.4. Dependency management
25.5. Automatic configuration of scalaClasspath
25.6. Convention properties
25.7. Source set properties
25.8. Fast Scala Compiler
25.9. Compiling in external process
25.10. Incremental compilation
25.11. Eclipse Integration
25.12. IntelliJ IDEA Integration
26. The War Plugin
26.1. Usage
26.2. Tasks
26.3. Project layout
26.4. Dependency management
26.5. Convention properties
26.6. War
26.7. Customizing
27. The Ear Plugin
27.1. Usage
27.2. Tasks
27.3. Project layout
27.4. Dependency management
27.5. Convention properties
27.6. Ear
27.7. Customizing
27.8. Using custom descriptor file
28. The Jetty Plugin
28.1. Usage
28.2. Tasks
28.3. Project layout
28.4. Dependency management
28.5. Convention properties
29. The Checkstyle Plugin
29.1. Usage
29.2. Tasks
29.3. Project layout
29.4. Dependency management
29.5. Configuration
30. The CodeNarc Plugin
30.1. Usage
30.2. Tasks
30.3. Project layout
30.4. Dependency management
30.5. Configuration
31. The FindBugs Plugin
31.1. Usage
31.2. Tasks
31.3. Dependency management
31.4. Configuration
32. The JDepend Plugin
32.1. Usage
32.2. Tasks
32.3. Dependency management
32.4. Configuration
33. The PMD Plugin
33.1. Usage
33.2. Tasks
33.3. Dependency management
33.4. Configuration
34. The JaCoCo Plugin
34.1. Getting Started
34.2. Configuring the JaCoCo Plugin
34.3. JaCoCo Report configuration
34.4. JaCoCo specific task configuration
34.5. Tasks
34.6. Dependency management
35. The Sonar Plugin
35.1. Usage
35.2. Analyzing Multi-Project Builds
35.3. Analyzing Custom Source Sets
35.4. Analyzing languages other than Java
35.5. Setting Custom Sonar Properties
35.6. Configuring Sonar Settings from the Command Line
35.7. Tasks
36. The SonarQube Runner Plugin
36.1. SonarQube Runner version and compatibility
36.2. Getting started
36.3. Configuring the SonarQube Runner
36.4. Specifying the SonarQube Runner version
36.5. Analyzing Multi-Project Builds
36.6. Analyzing Custom Source Sets
36.7. Analyzing languages other than Java
36.8. More on configuring SonarQube properties
36.9. Setting SonarQube Properties from the Command Line
36.10. Controlling the SonarQube Runner process
36.11. Tasks
37. The OSGi Plugin
37.1. Usage
37.2. Implicitly applied plugins
37.3. Tasks
37.4. Dependency management
37.5. Convention object
37.6.
38. The Eclipse Plugins
38.1. Usage
38.2. Tasks
38.3. Configuration
38.4. Customizing the generated files
39. The IDEA Plugin
39.1. Usage
39.2. Tasks
39.3. Configuration
39.4. Customizing the generated files
39.5. Further things to consider
40. The ANTLR Plugin
40.1. Usage
40.2. Tasks
40.3. Project layout
40.4. Dependency management
40.5. Convention properties
40.6. Source set properties
40.7. Controlling the ANTLR generator process
41. The Project Report Plugin
41.1. Usage
41.2. Tasks
41.3. Project layout
41.4. Dependency management
41.5. Convention properties
42. The Announce Plugin
42.1. Usage
42.2. Configuration
43. The Build Announcements Plugin
43.1. Usage
44. The Distribution Plugin
44.1. Usage
44.2. Tasks
44.3. Distribution contents
44.4. Publishing distributions
45. The Application Plugin
45.1. Usage
45.2. Tasks
45.3. Convention properties
46. The Java Library Distribution Plugin
46.1. Usage
46.2. Tasks
46.3. Including other resources in the distribution
47. Build Init Plugin
47.1. Tasks
47.2. What to set up
47.3. Build init types
48. Wrapper Plugin
48.1. Usage
48.2. Tasks
49. The Build Dashboard Plugin
49.1. Usage
49.2. Tasks
49.3. Project layout
49.4. Dependency management
49.5. Configuration
50. The Java Gradle Plugin Development Plugin
50.1. Usage
51. Dependency Management
51.1. Introduction
51.2. Dependency Management Best Practices
51.3. Dependency configurations
51.4. How to declare your dependencies
51.5. Working with dependencies
51.6. Repositories
51.7. How dependency resolution works
51.8. Fine-tuning the dependency resolution process
51.9. The dependency cache
51.10. Strategies for transitive dependency management
52. Publishing artifacts
52.1. Introduction
52.2. Artifacts and configurations
52.3. Declaring artifacts
52.4. Publishing artifacts
52.5. More about project libraries
53. The Maven Plugin
53.1. Usage
53.2. Tasks
53.3. Dependency management
53.4. Convention properties
53.5. Convention methods
53.6. Interacting with Maven repositories
54. The Signing Plugin
54.1. Usage
54.2. Signatory credentials
54.3. Specifying what to sign
54.4. Publishing the signatures
54.5. Signing POM files
55. Building native binaries
55.1. Supported languages
55.2. Tool chain support
55.3. Tool chain installation
55.4. Component model
55.5. Parallel Compilation
55.6. Building a library
55.7. Building an executable
55.8. Tasks
55.9. Finding out more about your project
55.10. Language support
55.11. Configuring the compiler, assembler and linker
55.12. Windows Resources
55.13. Library Dependencies
55.14. Precompiled Headers
55.15. Native Binary Variants
55.16. Tool chains
55.17. Visual Studio IDE integration
55.18. CUnit support
55.19. GoogleTest support
56. The Build Lifecycle
56.1. Build phases
56.2. Settings file
56.3. Multi-project builds
56.4. Initialization
56.5. Configuration and execution of a single project build
56.6. Responding to the lifecycle in the build script
57. Multi-project Builds
57.1. Cross project configuration
57.2. Subproject configuration
57.3. Execution rules for multi-project builds
57.4. Running tasks by their absolute path
57.5. Project and task paths
57.6. Dependencies - Which dependencies?
57.7. Project lib dependencies
57.8. Parallel project execution
57.9. Decoupled Projects
57.10. Multi-Project Building and Testing
57.11. Multi Project and buildSrc
57.12. Property and method inheritance
57.13. Summary
58. Writing Custom Task Classes
58.1. Packaging a task class
58.2. Writing a simple task class
58.3. A standalone project
58.4. Incremental tasks
59. Writing Custom Plugins
59.1. Packaging a plugin
59.2. Writing a simple plugin
59.3. Getting input from the build
59.4. Working with files in custom tasks and plugins
59.5. A standalone project
59.6. Maintaining multiple domain objects
60. Organizing Build Logic
60.1. Inherited properties and methods
60.2. Injected configuration
60.3. Configuring the project using an external build script
60.4. Build sources in the buildSrc project
60.5. Running another Gradle build from a build
60.6. External dependencies for the build script
60.7. Ant optional dependencies
60.8. Summary
61. Initialization Scripts
61.1. Basic usage
61.2. Using an init script
61.3. Writing an init script
61.4. External dependencies for the init script
61.5. Init script plugins
62. The Gradle Wrapper
62.1. Configuration
62.2. Unix file permissions
63. Embedding Gradle
63.1. Introduction to the Tooling API
63.2. Tooling API and the Gradle Build Daemon
63.3. Quickstart
64. Comparing Builds
64.1. Definition of terms
64.2. Current Capabilities
64.3. Comparing Gradle Builds
65. Ivy Publishing (new)
65.1. The “ivy-publish” Plugin
65.2. Publications
65.3. Repositories
65.4. Performing a publish
65.5. Generating the Ivy module descriptor file without publishing
65.6. Complete example
65.7. Future features
66. Maven Publishing (new)
66.1. The “maven-publish” Plugin
66.2. Publications
66.3. Repositories
66.4. Performing a publish
66.5. Publishing to Maven Local
66.6. Generating the POM file without publishing
67. Rule based model configuration
67.1. Background
67.2. Motivations for change
67.3. Concepts
67.4. Rule sources
67.5. The “model DSL”
67.6. The model report
67.7. Limitations and future direction
A. Gradle Samples
A.1. Sample customBuildLanguage
A.2. Sample customDistribution
A.3. Sample customPlugin
A.4. Sample java/multiproject
B. Potential Traps
B.1. Groovy script variables
B.2. Configuration and execution phase
C. The Feature Lifecycle
C.1. States
C.2. Backwards Compatibility Policy
D. Gradle Command Line
D.1. Deprecated command-line options
D.2. Daemon command-line options
D.3. System properties
D.4. Environment variables
E. Existing IDE Support and how to cope without it
E.1. IntelliJ
E.2. Eclipse
E.3. Using Gradle without IDE support
Glossary

List of Examples

6.1. Your first build script
6.2. Execution of a build script
6.3. A task definition shortcut
6.4. Using Groovy in Gradle's tasks
6.5. Using Groovy in Gradle's tasks
6.6. Declaration of task that depends on other task
6.7. Lazy dependsOn - the other task does not exist (yet)
6.8. Dynamic creation of a task
6.9. Accessing a task via API - adding a dependency
6.10. Accessing a task via API - adding behaviour
6.11. Accessing task as a property of the build script
6.12. Adding extra properties to a task
6.13. Using AntBuilder to execute ant.loadfile target
6.14. Using methods to organize your build logic
6.15. Defining a default tasks
6.16. Different outcomes of build depending on chosen tasks
7.1. Using the Java plugin
7.2. Building a Java project
7.3. Adding Maven repository
7.4. Adding dependencies
7.5. Customization of MANIFEST.MF
7.6. Adding a test system property
7.7. Publishing the JAR file
7.8. Eclipse plugin
7.9. Java example - complete build file
7.10. Multi-project build - hierarchical layout
7.11. Multi-project build - settings.gradle file
7.12. Multi-project build - common configuration
7.13. Multi-project build - dependencies between projects
7.14. Multi-project build - distribution file
8.1. Declaring dependencies
8.2. Definition of an external dependency
8.3. Shortcut definition of an external dependency
8.4. Usage of Maven central repository
8.5. Usage of a remote Maven repository
8.6. Usage of a remote Ivy directory
8.7. Usage of a local Ivy directory
8.8. Publishing to an Ivy repository
8.9. Publishing to a Maven repository
9.1. Groovy plugin
9.2. Dependency on Groovy
9.3. Groovy example - complete build file
10.1. War plugin
10.2. Running web application with Jetty plugin
11.1. Executing multiple tasks
11.2. Excluding tasks
11.3. Abbreviated task name
11.4. Abbreviated camel case task name
11.5. Selecting the project using a build file
11.6. Selecting the project using project directory
11.7. Obtaining information about projects
11.8. Providing a description for a project
11.9. Obtaining information about tasks
11.10. Changing the content of the task report
11.11. Obtaining more information about tasks
11.12. Obtaining detailed help for tasks
11.13. Obtaining information about dependencies
11.14. Filtering dependency report by configuration
11.15. Getting the insight into a particular dependency
11.16. Information about properties
12.1. Launching the GUI
13.1. Accessing property of the Project object
13.2. Using local variables
13.3. Using extra properties
13.4. Configuring arbitrary objects
13.5. Configuring arbitrary objects using a script
13.6. Groovy JDK methods
13.7. Property accessors
13.8. Method call without parentheses
13.9. List and map literals
13.10. Closure as method parameter
13.11. Closure delegates
14.1. Defining tasks
14.2. Defining tasks - using strings for task names
14.3. Defining tasks with alternative syntax
14.4. Accessing tasks as properties
14.5. Accessing tasks via tasks collection
14.6. Accessing tasks by path
14.7. Creating a copy task
14.8. Configuring a task - various ways
14.9. Configuring a task - with closure
14.10. Defining a task with closure
14.11. Adding dependency on task from another project
14.12. Adding dependency using task object
14.13. Adding dependency using closure
14.14. Adding a 'must run after' task ordering
14.15. Adding a 'should run after' task ordering
14.16. Task ordering does not imply task execution
14.17. A 'should run after' task ordering is ignored if it introduces an ordering cycle
14.18. Adding a description to a task
14.19. Overwriting a task
14.20. Skipping a task using a predicate
14.21. Skipping tasks with StopExecutionException
14.22. Enabling and disabling tasks
14.23. A generator task
14.24. Declaring the inputs and outputs of a task
14.25. Task rule
14.26. Dependency on rule based tasks
14.27. Adding a task finalizer
14.28. Task finalizer for a failing task
15.1. Locating files
15.2. Creating a file collection
15.3. Using a file collection
15.4. Implementing a file collection
15.5. Creating a file tree
15.6. Using a file tree
15.7. Using an archive as a file tree
15.8. Specifying a set of files
15.9. Specifying a set of files
15.10. Copying files using the copy task
15.11. Specifying copy task source files and destination directory
15.12. Selecting the files to copy
15.13. Copying files using the copy() method without up-to-date check
15.14. Copying files using the copy() method with up-to-date check
15.15. Renaming files as they are copied
15.16. Filtering files as they are copied
15.17. Nested copy specs
15.18. Using the Sync task to copy dependencies
15.19. Creating a ZIP archive
15.20. Creation of ZIP archive
15.21. Configuration of archive task - custom archive name
15.22. Configuration of archive task - appendix & classifier
16.1. Using an Ant task
16.2. Passing nested text to an Ant task
16.3. Passing nested elements to an Ant task
16.4. Using an Ant type
16.5. Using a custom Ant task
16.6. Declaring the classpath for a custom Ant task
16.7. Using a custom Ant task and dependency management together
16.8. Importing an Ant build
16.9. Task that depends on Ant target
16.10. Adding behaviour to an Ant target
16.11. Ant target that depends on Gradle task
16.12. Renaming imported Ant targets
16.13. Setting an Ant property
16.14. Getting an Ant property
16.15. Setting an Ant reference
16.16. Getting an Ant reference
17.1. Using stdout to write log messages
17.2. Writing your own log messages
17.3. Using SLF4J to write log messages
17.4. Configuring standard output capture
17.5. Configuring standard output capture for a task
17.6. Customizing what Gradle logs
20.1. Setting properties with a gradle.properties file
20.2. Configuring an HTTP proxy
20.3. Configuring an HTTPS proxy
21.1. Applying a script plugin
21.2. Applying a binary plugin
21.3. Applying a binary plugin by type
21.4. Applying a plugin with the buildscript block
21.5. Applying a core plugin
21.6. Applying a community plugin
23.1. Using the Java plugin
23.2. Custom Java source layout
23.3. Accessing a source set
23.4. Configuring the source directories of a source set
23.5. Defining a source set
23.6. Defining source set dependencies
23.7. Compiling a source set
23.8. Assembling a JAR for a source set
23.9. Generating the Javadoc for a source set
23.10. Running tests in a source set
23.11. Filtering tests in the build script
23.12. JUnit Categories
23.13. Grouping TestNG tests
23.14. Creating a unit test report for subprojects
23.15. Customization of MANIFEST.MF
23.16. Creating a manifest object.
23.17. Separate MANIFEST.MF for a particular archive
23.18. Separate MANIFEST.MF for a particular archive
24.1. Using the Groovy plugin
24.2. Custom Groovy source layout
24.3. Configuration of Groovy dependency
24.4. Configuration of Groovy test dependency
24.5. Configuration of bundled Groovy dependency
24.6. Configuration of Groovy file dependency
25.1. Using the Scala plugin
25.2. Custom Scala source layout
25.3. Declaring a Scala dependency for production code
25.4. Declaring a Scala dependency for test code
25.5. Enabling the Fast Scala Compiler
25.6. Adjusting memory settings
25.7. Activating the Zinc based compiler
26.1. Using the War plugin
26.2. Customization of war plugin
27.1. Using the Ear plugin
27.2. Customization of ear plugin
28.1. Using the Jetty plugin
29.1. Using the Checkstyle plugin
30.1. Using the CodeNarc plugin
31.1. Using the FindBugs plugin
32.1. Using the JDepend plugin
33.1. Using the PMD plugin
34.1. Applying the JaCoCo plugin
34.2. Configuring JaCoCo plugin settings
34.3. Configuring test task
34.4. Configuring test task
34.5. Using application plugin to generate code coverage data
34.6. Coverage reports generated by applicationCodeCoverageReport
35.1. Applying the Sonar plugin
35.2. Configuring Sonar connection settings
35.3. Configuring Sonar project settings
35.4. Global configuration in a multi-project build
35.5. Common project configuration in a multi-project build
35.6. Individual project configuration in a multi-project build
35.7. Configuring the language to be analyzed
35.8. Using property syntax
35.9. Analyzing custom source sets
35.10. Analyzing languages other than Java
35.11. Setting custom global properties
35.12. Setting custom project properties
35.13. Implementing custom command line properties
36.1. Applying the SonarQube Runner plugin
36.2. Configuring SonarQube connection settings
36.3. Configuring SonarQube runner version
36.4. Global configuration settings
36.5. Shared configuration settings
36.6. Individual configuration settings
36.7. Skipping analysis of a project
36.8. Analyzing custom source sets
36.9. Analyzing languages other than Java
36.10. setting custom SonarQube Runner fork options
37.1. Using the OSGi plugin
37.2. Configuration of OSGi MANIFEST.MF file
38.1. Using the Eclipse plugin
38.2. Using the Eclipse WTP plugin
38.3. Partial Overwrite for Classpath
38.4. Partial Overwrite for Project
38.5. Export Dependencies
38.6. Customizing the XML
39.1. Using the IDEA plugin
39.2. Partial Rewrite for Module
39.3. Partial Rewrite for Project
39.4. Export Dependencies
39.5. Customizing the XML
40.1. Using the ANTLR plugin
40.2. Declare ANTLR version
40.3. setting custom max heap size and extra arguments for ANTLR
42.1. Using the announce plugin
42.2. Configure the announce plugin
42.3. Using the announce plugin
43.1. Using the build announcements plugin
43.2. Using the build announcements plugin from an init script
44.1. Using the distribution plugin
44.2. Adding extra distributions
44.3. Configuring the main distribution
44.4. publish main distribution
45.1. Using the application plugin
45.2. Configure the application main class
45.3. Configure default JVM settings
45.4. Include output from other tasks in the application distribution
45.5. Automatically creating files for distribution
46.1. Using the Java library distribution plugin
46.2. Configure the distribution name
46.3. Include files in the distribution
49.1. Using the Build Dashboard plugin
50.1. Using the Java Gradle Plugin Development plugin
51.1. Definition of a configuration
51.2. Accessing a configuration
51.3. Configuration of a configuration
51.4. Module dependencies
51.5. Artifact only notation
51.6. Dependency with classifier
51.7. Iterating over a configuration
51.8. Client module dependencies - transitive dependencies
51.9. Project dependencies
51.10. File dependencies
51.11. Generated file dependencies
51.12. Gradle API dependencies
51.13. Gradle's Groovy dependencies
51.14. Excluding transitive dependencies
51.15. Optional attributes of dependencies
51.16. Collections and arrays of dependencies
51.17. Dependency configurations
51.18. Dependency configurations for project
51.19. Configuration.copy
51.20. Accessing declared dependencies
51.21. Configuration.files
51.22. Configuration.files with spec
51.23. Configuration.copy
51.24. Configuration.copy vs. Configuration.files
51.25. Adding central Maven repository
51.26. Adding Bintray's JCenter Maven repository
51.27. Using Bintrays's JCenter with HTTP
51.28. Adding the local Maven cache as a repository
51.29. Adding custom Maven repository
51.30. Adding additional Maven repositories for JAR files
51.31. Accessing password protected Maven repository
51.32. Flat repository resolver
51.33. Ivy repository
51.34. Ivy repository with named layout
51.35. Ivy repository with pattern layout
51.36. Ivy repository with multiple custom patterns
51.37. Ivy repository with Maven compatible layout
51.38. Ivy repository
51.39. Declaring a Maven and Ivy repository
51.40. Providing credentials to a Maven and Ivy repository
51.41. Declaring a S3 backed Maven and Ivy repository
51.42. Accessing a repository
51.43. Configuration of a repository
51.44. Definition of a custom repository
51.45. Forcing consistent version for a group of libraries
51.46. Using a custom versioning scheme
51.47. Blacklisting a version with a replacement
51.48. Changing dependency group and/or name at the resolution
51.49. Substituting a module with a project
51.50. Substituting a project with a module
51.51. Conditionally substituting a dependency
51.52. Specifying default dependencies on a configuration
51.53. Enabling dynamic resolve mode
51.54. 'Latest' version selector
51.55. Custom status scheme
51.56. Custom status scheme by module
51.57. Ivy component metadata rule
51.58. Rule source component metadata rule
51.59. Component selection rule
51.60. Component selection rule with module target
51.61. Component selection rule with metadata
51.62. Component selection rule using a rule source object
51.63. Declaring module replacement
51.64. Dynamic version cache control
51.65. Changing module cache control
52.1. Defining an artifact using an archive task
52.2. Defining an artifact using a file
52.3. Customizing an artifact
52.4. Map syntax for defining an artifact using a file
52.5. Configuration of the upload task
53.1. Using the Maven plugin
53.2. Creating a stand alone pom.
53.3. Upload of file to remote Maven repository
53.4. Upload of file via SSH
53.5. Customization of pom
53.6. Builder style customization of pom
53.7. Modifying auto-generated content
53.8. Customization of Maven installer
53.9. Generation of multiple poms
53.10. Accessing a mapping configuration
54.1. Using the Signing plugin
54.2. Signing a configuration
54.3. Signing a configuration output
54.4. Signing a task
54.5. Signing a task output
54.6. Conditional signing
54.7. Signing a POM for deployment
55.1. Defining a library component
55.2. Defining executable components
55.3. The components report
55.4. The 'cpp' plugin
55.5. C++ source set
55.6. The 'c' plugin
55.7. C source set
55.8. The 'assembler' plugin
55.9. The 'objective-c' plugin
55.10. The 'objective-cpp' plugin
55.11. Settings that apply to all binaries
55.12. Settings that apply to all shared libraries
55.13. Settings that apply to all binaries produced for the 'main' executable component
55.14. Settings that apply only to shared libraries produced for the 'main' library component
55.15. The 'windows-resources' plugin
55.16. Configuring the location of Windows resource sources
55.17. Building a resource-only dll
55.18. Providing a library dependency to the source set
55.19. Providing a library dependency to the binary
55.20. Declaring project dependencies
55.21. Creating a precompiled header file
55.22. Including a precompiled header file in a source file
55.23. Configuring a precompiled header
55.24. Defining build types
55.25. Configuring debug binaries
55.26. Defining platforms
55.27. Defining flavors
55.28. Targeting a component at particular platforms
55.29. Building all possible variants
55.30. Defining tool chains
55.31. Reconfigure tool arguments
55.32. Defining target platforms
55.33. Registering CUnit tests
55.34. Registering CUnit tests
55.35. Running CUnit tests
55.36. Registering GoogleTest tests
56.1. Single project build
56.2. Hierarchical layout
56.3. Flat layout
56.4. Modification of elements of the project tree
56.5. Modification of elements of the project tree
56.6. Adding of test task to each project which has certain property set
56.7. Notifications
56.8. Setting of certain property to all tasks
56.9. Logging of start and end of each task execution
57.1. Multi-project tree - water & bluewhale projects
57.2. Build script of water (parent) project
57.3. Multi-project tree - water, bluewhale & krill projects
57.4. Water project build script
57.5. Defining common behavior of all projects and subprojects
57.6. Defining specific behaviour for particular project
57.7. Defining specific behaviour for project krill
57.8. Adding custom behaviour to some projects (filtered by project name)
57.9. Adding custom behaviour to some projects (filtered by project properties)
57.10. Running build from subproject
57.11. Evaluation and execution of projects
57.12. Evaluation and execution of projects
57.13. Running tasks by their absolute path
57.14. Dependencies and execution order
57.15. Dependencies and execution order
57.16. Dependencies and execution order
57.17. Declaring dependencies
57.18. Declaring dependencies
57.19. Cross project task dependencies
57.20. Configuration time dependencies
57.21. Configuration time dependencies - evaluationDependsOn
57.22. Configuration time dependencies
57.23. Dependencies - real life example - crossproject configuration
57.24. Project lib dependencies
57.25. Project lib dependencies
57.26. Fine grained control over dependencies
57.27. Build and Test Single Project
57.28. Partial Build and Test Single Project
57.29. Build and Test Depended On Projects
57.30. Build and Test Dependent Projects
58.1. Defining a custom task
58.2. A hello world task
58.3. A customizable hello world task
58.4. A build for a custom task
58.5. A custom task
58.6. Using a custom task in another project
58.7. Testing a custom task
58.8. Defining an incremental task action
58.9. Running the incremental task for the first time
58.10. Running the incremental task with unchanged inputs
58.11. Running the incremental task with updated input files
58.12. Running the incremental task with an input file removed
58.13. Running the incremental task with an output file removed
58.14. Running the incremental task with an input property changed
59.1. A custom plugin
59.2. A custom plugin extension
59.3. A custom plugin with configuration closure
59.4. Evaluating file properties lazily
59.5. A build for a custom plugin
59.6. Wiring for a custom plugin
59.7. Using a custom plugin in another project
59.8. Applying a community plugin with the plugins DSL
59.9. Testing a custom plugin
59.10. Using the Java Gradle Plugin Development plugin
59.11. Managing domain objects
60.1. Using inherited properties and methods
60.2. Using injected properties and methods
60.3. Configuring the project using an external build script
60.4. Custom buildSrc build script
60.5. Adding subprojects to the root buildSrc project
60.6. Running another build from a build
60.7. Declaring external dependencies for the build script
60.8. A build script with external dependencies
60.9. Ant optional dependencies
61.1. Using init script to perform extra configuration before projects are evaluated
61.2. Declaring external dependencies for an init script
61.3. An init script with external dependencies
61.4. Using plugins in init scripts
62.1. Running the wrapper task
62.2. Wrapper task
62.3. Wrapper generated files
65.1. Applying the “ivy-publish” plugin
65.2. Publishing a Java module to Ivy
65.3. Publishing additional artifact to Ivy
65.4. customizing the publication identity
65.5. Customizing the module descriptor file
65.6. Publishing multiple modules from a single project
65.7. Declaring repositories to publish to
65.8. Choosing a particular publication to publish
65.9. Publishing all publications via the “publish” lifecycle task
65.10. Generating the Ivy module descriptor file
65.11. Publishing a Java module
65.12. Example generated ivy.xml
66.1. Applying the 'maven-publish' plugin
66.2. Adding a MavenPublication for a Java component
66.3. Adding additional artifact to a MavenPublication
66.4. customizing the publication identity
66.5. Modifying the POM file
66.6. Publishing multiple modules from a single project
66.7. Declaring repositories to publish to
66.8. Publishing a project to a Maven repository
66.9. Publish a project to the Maven local repository
66.10. Generate a POM file without publishing
67.1. an example of a simple rule based build
67.2. applying a rule source plugin
67.3. a model creation rule
67.4. a model mutation rule
67.5. creating a task
67.6. the model dsl
67.7. a DSL creation rule
67.8. model task output
B.1. Variables scope: local and script wide
B.2. Distinct configuration and execution phase