±¾ÆªÎÄÕÂÖ÷Òª½éÉÜÒ»ÏÂGradleµÄ¹¹½¨»ù´¡¡£Ëü¿´ÆðÀ´ËƺõºÍandroidÏîĿû¶à´ó¹ØÏµ£¬²»ÄÜÈÃÈËÒ»ÏÂ×ÓÀí½âandroidÏîÄ¿ÖеÄGradleÅäÖÃÎļþ£¬µ«ÊÇÕâÆª»ù´¡ÕæµÄºÜÖØÒª¡£
ѧϰGradleǰ£¬ÐèÒªÓÐÒ»¸öGroovyÓïÑԵĻù´¡£¬ÒÔÃâ±»GroovyµÄÓï·¨À§ÈÅ£¬·´¶øºöÂÔÁËGradleµÄ֪ʶ¡£
1 ProjectsºÍtasks
ÏÈÃ÷È·Á½¸ö¸ÅÄprojectsºÍtasks£¬ËüÃÇÊÇGradleÖеÄÁ½¸öÖØÒª¸ÅÄî¡£
ÈκÎÒ»¸öGradle¹¹½¨£¬¶¼ÊÇÓÉÒ»¸ö»ò¶à¸öprojects×é³ÉµÄ¡£Project¾ÍÊÇÄãÏëÒªÓÃGradle×öʲô£¬±ÈÈç¹¹½¨Ò»¸öjar°ü£¬¹¹½¨Ò»¸öwebÓ¦Óá£ProjectÒ²²»µ¥Ö¸¹¹½¨²Ù×÷£¬²¿ÊðÄãµÄÓ¦Óûò´î½¨Ò»¸ö»·¾³£¬Ò²¿ÉÒÔÊÇÒ»¸öproject¡£
Ò»¸öprojectÓɶà¸ötask×é³É¡£Ã¿¸ötask´ú±íÁ˹¹½¨¹ý³Ìµ±ÖеÄÒ»¸öÔ×ÓÐÔ²Ù×÷£¬±ÈÈç±àÒ룬´ò°ü£¬Éú³Éjavadoc£¬·¢²¼µÈµÈÕâЩ²Ù×÷¡£
2 ±àдµÚÒ»¸ö¹¹½¨½Å±¾
н¨Ò»¸öÎļþbuild.gradle£¬È»ºóÌí¼ÓÒÔÏ´úÂ룺
task hello { doLast { println 'Hello, Gradle!' } } |
ÕâÊDZ¾ÏµÁÐÎÄÕÂÀïµÄµÚÒ»¸ö¹¹½¨½Å±¾£¬Ëü¶¨ÒåÁËÒ»¸ö½ÐhelloµÄtask£¬taskµÄÄÚÈÝÊÇÔÚ×îºó´òÓ¡³ö¡°Hello,
Gradle!¡±¡£
ÎÒÃÇÊäÈëÃüÁîgradle helloÀ´Ö´ÐÐËü£º
msdx@msdx-ubuntu:~/tmp$ gradle hello :hello Hello, Gradle! BUILD SUCCESSFUL |
GradleÊÇÁìÓòÇý¶¯Éè¼ÆµÄ¹¹½¨¹¤¾ß£¬ÔÚËüµÄʵÏÖµ±ÖУ¬Project½Ó¿Ú¶ÔÓ¦ÉÏÃæµÄproject¸ÅÄTask½Ó¿Ú¶ÔÓ¦ÉÏÃæµÄtask¸ÅÄʵ¼ÊÉϳý´ËÖ®Í⻹ÓÐÒ»¸öÖØÒªµÄÁìÓò¶ÔÏ󣬼´Action£¬¶ÔÓ¦µÄÊÇtaskÀïÃæ¾ßÌåµÄijһ¸ö²Ù×÷¡£Ò»¸öprojectÓɶà¸ötask×é³É£¬Ò»¸ötaskÒ²ÊÇÓɶà¸öaction×é³É¡£
µ±Ö´ÐÐgradle helloµÄʱºò£¬Gradle¾Í»áÈ¥µ÷ÓÃÕâ¸öhello
taskÀ´Ö´Ðиø¶¨²Ù×÷(Action)¡£Õâ¸ö²Ù×÷Æäʵ¾ÍÊÇÒ»¸öÓÃGroovy´úÂëдµÄ±Õ°ü£¬´úÂëÖеÄtaskÊÇProjectÀàÀïµÄÒ»¸ö·½·¨£¬Í¨¹ýµ÷ÓÃÕâÀïµÄtask·½·¨´´½¨ÁËÒ»¸öTask¶ÔÏ󣬲¢ÔÚ¶ÔÏóµÄdoLast·½·¨Öд«Èëprintln
'Hello, Gradle!'Õâ¸ö±Õ°ü¡£Õâ¸ö±Õ°ü¾ÍÊÇÒ»¸öAction¡£
TaskÊÇGradleÀﶨÒåµÄÒ»¸ö½Ó¿Ú£¬±íʾÉÏÊö¸ÅÄîÖеÄtask¡£Ëü¶¨ÒåÁËһϵÁеÄÖîÈçdoLast,
doFirstµÈ³éÏó·½·¨£¬¾ßÌå¿ÉÒÔ¿´gradle apiÀïorg.gradle.api.TaskµÄÎĵµ¡£
ÔÚÉÏÃæÖ´ÐÐÁËgradle helloºó£¬³ýÁËÊä³ö¡°Hello, Gradle!¡±Ö®Í⣬ÎÒÃÇ·¢ÏÖÏñ¡°:hello¡±ÕâÑùµÄÆäËûÄÚÈÝ¡£ÕâÆäʵÊÇGradle´òÓ¡³öÀ´µÄÈÕÖ¾£¬Èç¹û²»ÏëÊä³öÕâЩÄÚÈÝ£¬¿ÉÒÔÔÚgradleºóÃæ¼ÓÉϲÎÊý
-q¡£¼´£ºgradle -q hello¡£
3 ¿ìËÙ¶¨ÒåÈÎÎñ
ÉÏÃæµÄ´úÂ룬»¹ÓÐÒ»ÖÖ¸ü¼ò½àµÄд·¨£¬ÈçÏ£º
task hello << { println 'Hello, Gradle!' } |
Ö´ÐÐÕâ¸ö½Å±¾£¬´òÓ¡³öÀ´µÄÊÇÒ»ÑùµÄ¡£Ò²¾ÍÊÇÎÒÃǰÑÏñdoLastÕâÑùµÄ´úÂ룬ֱ½Ó¼ò»¯Îª<<Õâ¸ö·ûºÅÁË¡£ÕâÆäʵÊÇGradleÀûÓÃÁËGroovyµÄ²Ù×÷·ûÖØÔØµÄÌØÐÔ£¬°Ñ×óÎ»ÒÆ²Ù×÷·ûʵÏÖΪ½«action¼Óµ½taskµÄ×îºó£¬Ï൱ÓÚµ÷ÓÃdoLast·½·¨¡£¿´GradleµÄapiÎĵµÀï¶ÔdoLast()ºÍleftShift()ÕâÁ½¸ö·½·¨µÄ½éÉÜ£¬¿ÉÖªËüÃǵÄ×÷ÓÃÊÇÒ»ÑùµÄ£¬ËùÒÔÔÚÕâÀ<<×óÒÆ²Ù×÷·û¼´doLastµÄ¼òд·½Ê½¡£
4 ´úÂë¼´½Å±¾
Gradle½Å±¾ÊDzÉÓÃGroovy±àдµÄ£¬ËùÒÔÒ²ÏñGroovyÒ»Ñù£¬ÒԽű¾·½Ê½À´Ö´ÐдúÂ룬ÈçÏÂÃæÀý×Ó£º
task upper << { String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: " + someString.toUpperCase() } |
Ö´Ðнá¹ûÈçÏ£¬Ëü½«¶¨ÒåµÄ×Ö·û´®×ªÎª´óд£º
msdx@msdx-ubuntu:~/tmp$ gradle -q upper Original: mY_nAmE Upper case: MY_NAME |
ÕâÒ²¾ÍÊÇ˵£¬ÎÒÃÇÔÚдGradle½Å±¾µÄʱºò£¬¿ÉÒÔÏñдGroovy´úÂëÒ»Ñù¡£¶øGroovyÊÇ»ùÓÚJavaµÄ£¬¼æÈÝJavaÓï·¨£¬ËùÒÔJavaµÄÅóÓÑÃÇ£¬ÊDz»ÊǺöÈ»·¢ÏÖGradle½Å±¾ºÜºÃÉÏÊÖÁËÄØ£¿
5 ÈÎÎñÒÀÀµ
ÎÒÃÇ¿ÉÒÔͨ¹ýÒÔÏ·½Ê½´´½¨ÒÀÀµ£º
task hello << { print 'Hello, ' } task intro(dependsOn: hello) << { println "Gradle!" } |
¶¨ÒåÒ»¸öÈÎÎñhello£¬Êä³ö¡°Hello, ¡±£¬È»ºó¶¨ÒåÒ»¸öÈÎÎñintro£¬²¢ÒÀÀµhello£¬Êä³ö¡°Gradle!¡±¡£½á¹ûÊÇ´òÓ¡³ö¡°Hello,
Gradle!¡±£¬ÈçÏ£º
msdx@msdx-ubuntu:~/tmp$ gradle -q intro Hello, Gradle! |
ÁíÍ⣬±»ÒÀÀµµÄtask²»±Ø·ÅÔÚÇ°ÃæÉùÃ÷£¬ÔÚºóÃæÒ²ÊÇ¿ÉÒԵģ¬ÕâÒ»µãÔÚºóÃæ½«»áÓõ½¡£
6 ¶¯Ì¬ÈÎÎñ
½èÖúÓÚÇ¿´óµÄGroovy£¬ÎÒÃÇ»¹¿ÉÒÔ¶¯Ì¬µØ´´½¨ÈÎÎñ¡£ÈçÏ´úÂ룺
4.times { counter -> task "task$counter" << { println "I'm task number $counter" } } |
ÎÒÃǶ¨ÒåÁË4¸ötask£¬·Ö±ðÊÇtask0, task1, task2, task3¡£ÎÒÃÇÀ´Ö´ÐÐtask1£¬ÈçÏ£º
msdx@msdx-ubuntu:~/tmp$ gradle -q task1 I'm task number 1 |
ÁíÍ⣬gradle tasksÃüÁî¿ÉÒԲ鿴ÎÒÃǶ¨ÒåµÄtask£¬´ÓÕâÀïÎÒÃÇÒ²¿ÉÒÔ¿´µ½¶¨ÒåµÄtask£¬ÈçÏ£º
... Other tasks ----------- task0 task1 task2 task3 ... |
×¢Ò⣬Èç¹ûÈÎÎñ»¹Î´¶¨Ò壬²»ÄÜʹÓö̱ê¼Ç·¨£¨¼û±¾ÆªºóÐøÄÚÈÝ£©À´ÔËÐÐÈÎÎñ¡£
7 ÈÎÎñ²Ù×Ý
ÔÚGradleµ±ÖУ¬ÈÎÎñ´´½¨Ö®ºó¿ÉÒÔͨ¹ýAPI½øÐзÃÎÊ£¬ÕâÊÇGradleÓëAntµÄ²»Í¬Ö®´¦¡£
7.1 Ôö¼ÓÒÀÀµ
»¹ÊÇÒÔÉÏÃæµÄÀý×Ó£¬µ«ÊÇÎÒÃÇÌí¼ÓÒ»ÐдúÂ룬ÈçÏ£º
4.times { counter -> task "task$counter" << { println "I'm task number $counter" } } task1.dependsOn task0, task3 |
È»ºó»¹ÊÇÖ´ÐÐ gradle -q task1£¬¿´¿´½á¹û£º
msdx@msdx-ubuntu:~/tmp$ gradle -q task1 I'm task number 0 I'm task number 3 I'm task number 1 |
ËüÏÈÖ´ÐÐÁËtask0ºÍtask3£¬ÒòΪtask1ÒÀÀµÓÚÕâÁ½¸ö¡£
7.2 Ôö¼ÓÈÎÎñÐÐΪ
ÈçÏ´úÂ룺
task hello << { println 'Hello, Gradle!' } hello.doFirst { println 'I am first.' } hello.doLast { println 'I am last.' } hello << { println 'I am the the last' } |
Ö´ÐкóµÄÊä³ö£º
msdx@msdx-ubuntu:~/tmp$ gradle -q hello I am first. Hello, Gradle! I am last. I am the the last |
8 ¶Ì±ê¼Ç·¨
Èç¹ûÄã¶ÔgroovyÓÐÒ»¶¨Á˽⣬ÄÇÄãÒ²Ðí»á×¢Òâµ½£¬Ã¿¸ötask¶¼ÊÇÒ»¸ö¹¹½¨½Å±¾µÄÊôÐÔ£¬ËùÒÔ¿ÉÒÔͨ¹ý¡°$¡±ÕâÖֶ̱ê¼Ç·¨À´·ÃÎÊÈÎÎñ¡£ÈçÏ£º
task hello << { println 'Hello, Gradle!' } hello.doLast { println "Greetings from the $hello.name task." } |
Ö´Ðнá¹û£º
msdx@msdx-ubuntu:~/tmp$ gradle -q hello Hello, Gradle! Greetings from the hello task. |
×¢Ò⣬ͨ¹ýÕâÖÖ·½·¨·ÃÎʵÄÈÎÎñÒ»¶¨ÊÇÒªÒѾ¶¨ÒåµÄ¡£
9 Ôö¼Ó×Ô¶¨ÒåÊôÐÔ
task myTask { ext.myProperty = "myValue" } task printTaskProperties << { println myTask.myProperty } |
Êä³ö½á¹û£º
msdx@msdx-ubuntu:~/tmp$ gradle -q printTaskProperties myValue |
10. µ÷ÓÃAntÈÎÎñ
±ÈÈçÀûÓÃAntBuilderÖ´ÐÐant.loadfiile¡£
task loadfile << { def files = file('config').listFiles().sort() files.each { File file -> if (file.isFile()) { ant.loadfile(srcFile: file, property: file.name) println " *** $file.name ***" println "${ant.properties[file.name]}" } } } |
Ö´Ðнá¹û£º
msdx@msdx-ubuntu:~/tmp$ gradle -q loadfile *** db.config *** db=mysql username=root password=123456 *** user.config *** username=admin writeable=true |
11 ·½·¨³éÈ¡
ÔÚÉÏÃæµÄ½Å±¾ÖУ¬ÎÒÃÇ¿ÉÒ԰Ѳ¿·Ö´úÂë³éÈ¡³öÀ´£¬ÈçÏ£º
task loadfile << { fileList('config').each { File file -> ant.loadfile(srcFile: file, property: file.name) println " *** $file.name ***" println "${ant.properties[file.name]}" } } File[] fileList(String dir) { file(dir).listFiles({file -> file.isFile() } as FileFilter).sort() } |
Ö´Ðнá¹ûÒ»Ñù¡£
12. ¶¨ÒåĬÈÏÈÎÎñ
defaultTasks 'clean', 'run' task clean << { println 'Default Cleaning!' } task run << { println 'Default Running!' } task other << { println "I'm not a default task!" } |
Ö´Ðнá¹û£º
msdx@msdx-ubuntu:~/tmp$ gradle -q Default Cleaning! Default Running! |
13 DAGÅäÖÃ
GradleʹÓÃDAG£¨Directed acyclic graph£¬ÓÐÏò·ÇÑ»·Í¼£©À´¾ö¶¨ÈÎÎñÖ´ÐеÄ˳Ðò¡£Í¨¹ýÕâÒ»ÌØÐÔ£¬ÎÒÃÇ¿ÉÒÔʵÏÖÒÀÀµÈÎÎñ×ö²»Í¬Êä³ö¡£
ÈçÏ´úÂ룺
task distribution << { println "We build the zip with version=$version" } task release(dependsOn: 'distribution') << { println 'We release now' } gradle.taskGraph.whenReady {taskGraph -> if (taskGraph.hasTask(release)) { version = '1.0' } else { version = '1.0-SNAPSHOT' } } |
Ö´Ðнá¹ûÈçÏ£º
msdx@msdx-ubuntu:~/tmp$ gradle -q distribution We build the zip with version=1.0-SNAPSHOT msdx@msdx-ubuntu:~/tmp$ gradle -q release We build the zip with version=1.0 We release now msdx@msdx-ubuntu |
ÔÚÉÏÃæµÄ½Å±¾´úÂëÖУ¬whenReady»áÔÚreleaseÈÎÎñÖ´ÐÐ֮ǰӰÏìËü£¬¼´Ê¹Õâ¸öÈÎÎñ²»ÊÇÖ÷ÒªµÄÈÎÎñ£¨¼´²»ÊÇͨ¹ýÃüÁîÐд«Èë²ÎÊýÀ´µ÷Óã©¡£
|