If we use Gradle in a multi-module project we can define project dependencies between modules. Gradle uses the information from the project dependencies to determine which tasks need to be run. For example if module B depends on module A and we want to build module B, Gradle will also build module A for us, because module B depends on it. But if we know for sure that module A is up to date and has not changed, we can also instruct Gradle to skip building module A, when we build module B.html
Let's start with the following module structure, where each module depends on the module above it. So module services depends on common and module web depends on services:git
.
github
├── common
web
├── services
ide
└── web
gradle
When we want to build the service module we go to the services directory and execute the build
task and we get the following output:ui
$ gradle build
this
:common:compileJava
spa
:common:processResources
命令行
:common:classes
:common:jar
:services:compileJava
:services:processResources
:services:classes
:services:jar
:services:assemble
:services:compileTestJava
:services:processTestResources
:services:testClasses
:services:test
:services:check
:services:build
BUILD SUCCESSFUL
Total time: 8.013 secs
We see in the output that first the common module is build, because the services module depends on it. But if we work on this project and we know for sure the common module is up to date and has not changed since the last build (for example we didn't checkout new sources from version control or changed sources in the common module ourselves), then we can skip building the common module. We use the command line option -a
or--no-rebuild
to tell Gradle to skip project dependencies.
When we run the build
task from the services directory using the command line option -a
we get the following output:
$ gradle -a build
:services:compileJava
:services:processResources
:services:classes
:services:jar
:services:assemble
:services:compileTestJava
:services:processTestResources
:services:testClasses
:services:test
:services:check
:services:build
BUILD SUCCESSFUL
Total time: 5.626 secs
This time only the services module is build, which also speeds up the build proces. Still this should only be used if we know ourselves the project dependencies are up to date.
Written with Gradle 2.2.1.
你能夠用命令行選項-x
來排除某些任務,讓咱們用上面的例子來示範一下.
You can exclude a task from being executed using the -x
command-line option and providing the name of the task to exclude. Let's try this with the sample build file above.
例 11.2. 排除任務.
Example 11.2. Excluding tasks
gradle dist -x test
的輸出結果.
Output of gradle dist -x test
> gradle dist -x test :compile compiling source :dist building the distribution BUILD SUCCESSFUL Total time: 1 secs
能夠看到,test
任務並無被調用,即便他是dist
任務的依賴. 同時test
任務的依賴任務compileTest
也沒有被調用,而像 compile
被test
和其它任務同時依賴的任務仍然會被調用.
You can see from the output of this example, that the test
task is not executed, even though it is a dependency of the dist
task. You will also notice that the test
task's dependencies, such as compileTest
are not executed either. Those dependencies of test
that are required by another task, such ascompile
, are still executed.
http://pkaq.github.io/gradledoc/docs/userguide/ch11/tutorial_gradle_command_line.html