´ÓÁ㿪ʼѧϰGradleÖ®Ò»---³õʶGradle
ǰÌ᣺ °²×°Gradle¡£°²×°¹ý³Ì·Ç³£¼òµ¥:
(1)ÏÂÔØGradle
(2)½«GRADLE_HOME/bin/gradle¼ÓÈë$PATH¡£
1. »ù±¾¸ÅÄî(Project ºÍ Task)
GradleÖÐÓÐÁ½¸ö»ù±¾µÄ¸ÅÄprojectºÍtask¡£Ã¿¸öGradleµÄ¹¹½¨ÓÉÒ»¸öproject¹¹³É£¬Ëü´ú±í×ÅÐèÒª±»¹¹½¨µÄ×é¼þ»òÕß¹¹½¨µÄÕû¸öÏîÄ¿¡£Ã¿¸öprojectÓÉÒ»¸ö»òÕß¶à¸ötask×é³É¡£task´ú±í×ÅGradle¹¹½¨¹ý³ÌÖпÉÖ´ÐеÄ×îСµ¥Ôª¡£ÀýÈçµ±¹¹½¨Ò»¸ö×é¼þʱ£¬¿ÉÄÜÐèÒªÏȱàÒë¡¢´ò°ü¡¢È»ºóÔÙÉú³ÉÎĵµ»òÕß·¢²¼µÈ£¬ÕâÆäÖеÄÿ¸ö²½Öè¶¼¿ÉÒÔ¶¨Òå³ÉÒ»¸ötask¡£
2. ¹¹½¨µÚÒ»¸öTask
ºÍAntÔËÐÐʱ¶ÁÈ¡build.xmlÀàËÆ£¬GradleÔËÐÐʱĬÈÏ»á¶ÁÈ¡build.gradleÕâ¸öÎļþ,
µ±È»ÄãÒ²¿ÉÒÔʹÓòÎÊý"-b"À´Ö¸¶¨ÆäËûµÄxxx.gradle
ÏÂÃæ£¬ÈÃÎÒÃÇн¨Ò»¸öbuild.gradleÎļþ£¬È»ºóÊäÈëÈçÏÂÄÚÈÝ:
task hello { doLast{ println "hello world" } } |
Õâ¸ö¹¹½¨µÄ½Å±¾ºÜ¼òµ¥£¬¾ÍÊÇÊä³öhello world¡£ÎªÁËÔËÐÐÕâ¸ö¹¹½¨£¬ÎÒÃÇÓ¦¸ÃÔÚµ±Ç°Ä¿Â¼ÏÂÖ´ÐÐ
"gradle hello"£¬¼´gradle TaskName¡£
doLastÒâ˼ÊǶ¨ÒåÒ»¸öÐÐΪ(Ó³ÉäGradleÖеÄActionÀà)£¬·ÅÔÚµ±Ç°taskµÄ×îºó£¬ÀàËÆµÄ£¬»¹ÓÐdoFirst,
±íʾ½«¶¨ÒåµÄÐÐΪ·ÅÔÚµ±Ç°task×îÇ°Ãæ£¬ÀýÈç
task hello { doLast{ println "Hello world" } doFirst{ println "I am xxx" } } |
Ö´ÐÐgradle hello, ½«Êä³ö
"I am xxx"
"Hello world"
ÁíÍ⣬ÄãÒ²¿ÉÒÔʹÓÃÈçϸü¼ò½àµÄ·½Ê½À´¶¨Òåtask£º
task hello << { println "hello world" } |
ÕâÀïÒ²Ðí´ó¼Ò¿ÉÄÜ»á¾õµÃºÜÆæ¹Ö£¬ÎªÊ²Ã´¿ÉÒÔÓÃ"<<"À´¶¨ÒåTaskµÄÖ´ÐÐÄÚÈÝÄØ£¬»¹ÊÇÈÃÎÒÃÇ¿´¿´GradleµÄ´úÂëÊÇÔõôʵÏֵİÉ:
1 public abstract class AbstractTask implements TaskInternal, DynamicObjectAware { 2 private List<Action<? super Task>> actions = new ArrayList<Action<? super Task>>(); 3 4 public Task doFirst(Action<? super Task> action) { 5 if (action == null) { 6 throw new InvalidUserDataException("Action must not be null!"); 7 } 8 actions.add(0, wrap(action)); 9 return this; 10 } 11 12 public Task doLast(Action<? super Task> action) { 13 if (action == null) { 14 throw new InvalidUserDataException("Action must not be null!"); 15 } 16 actions.add(wrap(action)); 17 return this; 18 } |
´ÓÉÏÃæµÄ´úÂë¿ÉÒÔ¿´³ö£¬TaskÀàÀïÓиöActionµÄ¼¯ºÏactions£¬µ±Ê¹ÓÃdoFirst»òÕßdoLastʱ£¬Êµ¼ÊÉÏÊǽ«¶¨ÒåµÄÖ´Ðв¿·ÖʵÀý»¯³ÉActionµÄ¶ÔÏó,È»ºóÌí¼Óµ½actions¼¯ºÏÀï¡£
Ã÷°×ÁËÕâÒ»µã£¬½ÓÏÂÀ´ÈÃÎÒÃÇ¿´¿´ÎªÊ²Ã´¿ÉÒÔʹÓÃ<<¶¨ÒåTask--------Groovy×÷Ϊǿ´óµÄÖ§³ÖDSLµÄ¶¯Ì¬ÓïÑÔ£¬ÔçÒÑ¾ÖØÔØÁË
<< ²Ù×÷·û£¬Ê¹µÃÎÒÃÇ¿ÉÒÔ·½±ãµÄʹÓÃ<<Ïò¼¯ºÏÌí¼ÓÔªËØ¡£
˵µÀÕ⣬ÏàÐÅÕæÏàÒѾ´ó°×ÁË:ÔÀ´¾ÍÊÇʹÓÃGroovyµÄÌØÐÔ£¬Íù¼¯ºÏÀïÌí¼ÓAction¶øÒÑ¡£¶Ô£¬Õâ¾ÍÊÇGradleµÄÓï·¨£¬ÀûÓÃGroovyµÄDSLÌØÐÔ£¬°ïÖúÎÒÃǸüÈÝÒ׵͍ÒåÎÒÃǵĹ¹½¨½Å±¾¡£
²»¹ýÒ²Ðí´ó¼Ò»á¾õµÃ£¬Õâ¸öÀý×ÓʵÔÚÊÇûÓÐʲô´ú±íÐÔ£¬Ö»ÊÇÒ»¸ö¼òµ¥µÄ hello
world£¬ËµÃ÷²»ÁËʲôÎÊÌâ¡£ºÃ°É£¬±ð׿±£¬Ï´ÎÎÒÃÇ»á¼ÌÐøÑо¿GradleµÄÆäËû²¿·Ö£¬²»¹ýÏȼÇס£º×÷Ϊһ¸ö¹¹½¨¹¤¾ß£¬GradleÕæµÄºÜÇ¿´óŶ£¡
´ÓÁ㿪ʼѧϰGradleÖ®¶þ---ÈçºÎʹÓÃTask
1. ProjectºÍTask
¶ÔÓÚbuild.gradleÅäÖÃÎļþ£¬µ±ÔËÐÐGradle <Task> ʱ£¬Gradle»áΪÎÒÃÇ´´½¨Ò»¸öProjectµÄ¶ÔÏó£¬À´Ó³Éäbuild.gradleÖеÄÄÚÈÝ¡£ÆäÖÐÄØ£¬¶ÔÓÚ²»ÊôÓÚÈκÎTask·¶³ëµÄ´úÂ룬Gradle»á´´½¨Ò»¸öScriptÀàµÄ¶ÔÏó£¬À´Ö´ÐÐÕâЩ´úÂ룻¶ÔÓÚTaskµÄ¶¨Ò壬Gradle»á´´½¨Task¶ÔÏ󣬲¢½«Ëü»á×÷ΪprojectµÄÊôÐÔ´æÔÚ(ʵ¼ÊÉÏÊÇͨ¹ýgetTaskNameÍê³ÉµÄ)¡£ok£¬¿´Ò»¸ö¼òµ¥µÄÀý×Ó£º
н¨Îļþbasic/build.gradle,È»ºó¼ÓÈëÈçϲ¿·Ö´úÂ룺
println "the project name is $name" task hello << { println "the current task name is $name" println "hello world" } |
µ±ÔËÐÐÕâ¸öÀý×Óʱ£¬Ê×ÏÈGradle»á´´½¨Ò»¸öPorjectµÄ¶ÔÏó£¬È»ºó½«ËüºÍbuild.gradleµÄÄÚÈÝÓ³ÉäÆðÀ´¡£ÔÚÕâ¸öÀý×ÓÖУ¬project°üÀ¨Á½²¿·Ö£º
1)¿ÉÖ´Ðнű¾¶¨Òå
°´ÕÕ֮ǰÌáµ½µÄ£¬¿ÉÖ´Ðнű¾µÄ¶¨Ò彫ֱ½Ó±»´´½¨³É¶ÔÓ¦µÄScriptÀàµÄ¶ÔÏó
ÔÚÕâ¸öÀý×ÓÖУ¬Script¶ÔÓ¦µÄ²¿·Ö¾ÍÊǵÚÒ»ÐÐprintlnµÄ²¿·Ö£¬È»ºóÖ´ÐеĽá¹û¾ÍÊÇ´òÓ¡³ö
"the project name is basic"¡£
ĬÈϵģ¬ProjectµÄÃû×ÖÊǵ±Ç°build.gradleËùÔÚĿ¼µÄÃû×Ö£¬ÔÚÕâ¸öÀý×ÓÖУ¬build.gradle·ÅÔÚbasicĿ¼Ï£¬Òò´Ë£¬projectµÄnameÒ²¾ÍÊÇbasic.
2)Task¶¨Òå
ÔÚÕâ¸öÀý×ÓÖУ¬Gradle½«´´½¨Ò»¸öTaskµÄʵÀý£¬½«ÆäºÍ¶¨ÒåµÄtaskÄÚÈݹØÁªÆðÀ´¡£ÁíÍ⣬°´ÕÕ֮ǰËù˵µÄ£¬µ±GradleÔËÐÐʱ£¬ÎÒÃÇ¿ÉÒÔʹÓ÷ÃÎÊprojectÊôÐԵķ½Ê½È¥·ÃÎÊËü¡£
ÀýÈ磬Õâ¸öÀý×ÓÖУ¬ÎÒÃÇ¿ÉÒÔʹÓÃproject.helloÀ´·ÃÎÊÕâ¸ötask¡£ÒòΪÕâ¸ötask helloÒѾ³ÉΪprojectµÄÒ»¸öÊôÐÔ£¬ÄÇôµ±ÎÒÃÇʹÓÃgradle
properties£¨propertiesÊÇgradle×Ô´øµÄÒ»¸öTask,ËüÄÜÁгöµ±Ç°project¼¶±ðµÄËùÓÐÊôÐÔ£¬¿ÉÒÔʹÓÃgradle
tasks²é¿´¸ü¶àÄÚ½¨µÄTask£©À´»ñÈ¡project¼¶±ðµÄÊôÐÔÁбíʱ£¬Ò²½«»áµÃµ½'hello'¡£
ÁíÍ⣬ÓÐÒ»µãҪעÒâµÄÊÇ£¬ÔÚÕâ¸öÀý×ÓÖУ¬taskÖÐʹÓõÄ$name£¬²¢²»ÊÇProjectµÄname£¬ËüÊǵ±Ç°TaskµÄname£¬ÒòΪËü±»Ê¹ÓÃÔÚTaskµÄscopeÀï¡£
Ö´ÐÐGradle hello£¬Êä³öµÄ½á¹û½«ÊÇ£º
current project name is test the current task name is hello hello world |
2. ¶¨ÒåÊôÐÔ
ÔÚGradleÖУ¬ÎÒÃÇ¿ÉÒÔ¶¨ÒåÒÔÏÂÈýÖÖÊôÐÔ²¢Ê¹ÓÃËüÃÇ£º
1)System Properties
System Properties ʵ¼ÊÊÇÖ¸µÄJVMµÄsystem properties¡£ÎÒÃÇÖªµÀ£¬ÔÚÔËÐÐjava³ÌÐòʱ£¬¿ÉÒÔʹÓÃ-DÀ´ÉèÖÃJavaµÄϵͳ±äÁ¿£¬ÔÚGradleÖУ¬ÄãÒ²¿ÉÒÔ×öͬÑùµÄÊÂÇé¡£±ÈÈç
gradle xxx -DmySystemProp=xxxx
ͬʱ£¬ÔÚbuild.gradleÖУ¬Ó¦¸ÃÕâÑùʹÓÃÕâ¸ö±äÁ¿£º
task printSysProps << { println System.properties['system'] } |
2)Project Properties
Project PropertiesÊÇGradleרÃÅΪProject¶¨ÒåµÄÊôÐÔ¡£ËüµÄ×î´óÓŵãÔÚÓÚµ±ÔËÐÐgradleµÄʱºò£¬ÎÒÃÇ¿ÉÒÔʹÓÃ-PÀ´ÉèÖÃËüµÄÖµ¡£±ÈÈ磬
gradle xxx -PmyProjectProp=xxxxx
¶øÔÚbuild.gradleÖУ¬¿ÉÒÔÕâÑùʹÓÃÕâ¸ö±äÁ¿£º
task printProps << { if (project.hasProperty('commandLineProjectProp')) { println commandLineProjectProp } } |
ͬʱ£¬µ±ÎÒÃÇÖ´ÐÐgradle properties²é¿´ÊôÐÔÁбíʱ£¬Õâ¸ö±äÁ¿µÄÃû³ÆÒÔ¼°Öµ»áÏÔʾÔÚ½á¹ûÖС£
3)Ext(ra) Properties
ÁíÍ⣬ÎÒÃÇ»¹¿ÉÒÔΪProject»òÕßTask¶¨ÒåExtÊôÐÔ£¬Ò²³Æ¶¯Ì¬ÊôÐÔ£¬ÎÒÃDZØÐëʹÓùؼü×Öext(¶ÔÓ¦ExtraPropertiesExtensionµÄʵÀý)È¥¶¨Ò嶯̬ÊôÐÔ¡£´ÓÕâµã¿ÉÒÔ¿´³ö£¬GradleÒѾΪÎÒÃÇÉè¼ÆÁ˺ܶ಻ͬµÄÀ࣬ȥ×ö²»Í¬µÄÊÂÇ飬ÎÒÃÇÖ»ÐèÒª×ñÑConvention£¬Ê¹ÓÃËûÃǼ´¿É¡£Èç¹ûÍü¼Çдext¹Ø¼ü×Ö£¬gradleÔËÐÐʱÔò»áÌáʾ:
"Dynamic properties are deprecated...."¡£ÕâÊÇÒòΪÒÔǰ°æ±¾µÄgradle¶¨Ò嶯̬ÊôÐÔʱ£¬²»ÐèÒª¼Óext¹Ø¼ü×ֵġ£
¶ÔÓÚProjectºÍTask¶øÑÔ£¬¶¯Ì¬ÊôÐÔ¶¨ÒåµÄ·½Ê½ÍêȫһÑù£¬Ö»ÊÇ×÷ÓÃÓò²»Ò»Ñù¡£
µ±¶¨ÒåÍê³Éºó£¬ÎÒÃǾͿÉÒÔʹÓÃproject.prop »òÕß task.propÀ´·ÃÎÊÕâЩ¶¯Ì¬ÊôÐÔÁË¡£ÏÂÃæÈÃÎÒÃÇ¿´Ò»¸öÀý×Ó£º
ext.projectProperties="ext projectProperties-value" task printExtProps << { ext.taskProperties="ext.task.properties-value" if (project.hasProperty('projectProperties')){ println "ext.projectProperties values is " + projectProperties } if (printExtProps.hasProperty('taskProperties')){ println "task has defined ext.taskProperties value is " + taskProperties } } |
×¢Ò⣺£¬¶ÔÓÚext¶¨ÒåµÄ¶¯Ì¬ÊôÐÔ£¬²¢²»ÄÜͨ¹ýÍⲿµÄ·½Ê½ÐÞ¸ÄËüµÄÖµ£¬Ö»ÄÜÔÚbuild.gradleÖÐÈ¥ÉèÖûòÕßÐÞ¸ÄËüµÄÖµ¡£
ͬʱ£¬Èç¹ûÊÇΪproject¶¨ÒåµÄext¶¯Ì¬ÊôÐÔ£¬Ò²»áÏÔʾÔÚgradle propertiesµÄ½á¹ûÖС£
3. TaskÒÀÀµ
µ±¹¹½¨Ò»¸ö¸´ÔÓµÄÏîĿʱ£¬²»Í¬taskÖ®¼ä´æÔÚÒÀÀµÊDZØÈ»µÄ¡£±ÈÈç˵£¬Èç¹ûÏëÔËÐÐ'²¿Êð'µÄtask£¬±ØÈ»ÒªÏÈÔËÐÐ
±àÒë¡¢´ò°ü¡¢¼ì²â·þÎñÆ÷µÈtask£¬Ö»Óе±ÕⱻЩ±»ÒÀÀµµÄtaskÖ´ÐÐÍê³Éºó£¬²Å»á²¿Êð¡£¶ÔÓÚÕâÖÖÐÐΪ֮¼äµÄÒÀÀµ£¬Ant¡¢Maven¶¼ÌṩÁËÉùÃ÷ʽµÄ¶¨Ò壬·Ç³£¼òµ¥¡£Í¬Ñù£¬Ê¹ÓÃGradle¶¨ÒåtaskÖ®¼äµÄÒÀÀµÒ²ÊǼþºÜÈÝÒ×µÄÊ¡£
ÀýÈ磬¶¨ÒåÈçÏÂÁ½¸öTask£¬²¢ÇÒÔÚ"intro"Àï¼ÓÉÏ"dependendsOn"µÄ¹Ø¼ü×Ö£¬ÈçÏÂËùʾ£º
task hello << { println 'Hello world!' } task intro(dependsOn: hello) << { println "I'm Gradle" } |
Ö´ÐÐ "gradle intro"£¬½á¹û½«ÊÇ:
Óɴ˿ɼû£¬µ±Ö´ÐÐgradle introʱ£¬introÒÀÀµµÄtask hello»áÏȱ»Ö´ÐС£³ý´ËÖ®Í⣬dependensOnÒ²Ö§³Ö¶¨Òå¶à¸ötaskµÄÒÀÀµ£¬Ê¹ÓÃ[]À¨ÆðÀ´¼´¿É¡£ÀýÈç
task A(dependensOn:['B','C','D']) <<{ xxx } |
³ýÁËʹÓÃdependensOn¸ú×Ö·û´®À´¶¨ÒåÒÀÀµ£¬ÎÒÃÇÒ²¿ÉÒÔʹÓÃtaskX.dependensOn taskYÕâÖÖÐÎʽ£º
task taskX << { println 'taskX' } task taskY << { println 'taskY' } taskX.dependsOn taskY |
»òÕߣ¬Ò²¿ÉÒÔʹÓñհü£º
task taskX << { println 'taskX' } taskX.dependsOn { tasks.findAll { task -> task.name.startsWith('lib') } } task lib1 << { println 'lib1' } |
³ýÁË֮ǰ½²µÄtaskµÄ²¿·Ö£¬Gradle»¹ÎªÎÒÃÇÌṩÁ˺ܶà¿ÉÓõÄAPI£¬¸ü¶àµÄϸ½Ú´ó¼Ò¿ÉÒԲο¼ÏÂGradleµÄÎĵµ¡£ÕâÀïÎÒÁгöÒ»¸ö³£Óõķ½·¨onlyIf¡£ÔÚGradleÀÎÒÃÇ¿ÉÒÔʹÓá°OnlyIf()¡±À´¾ö¶¨µ±Ç°taskÊÇ·ñÐèÒª±»Ö´ÐУ¬ÀýÈ磺н¨build.gradle£¬¼ÓÈëÈçÏ´úÂ룺
task hello << { println 'hello world' } hello.onlyIf { !project.hasProperty('skipHello') } |
µ±ÎÒÃÇÖ±½ÓÖ´ÐÐ"gradle hello"ʱ£¬Ã»ÓÐÈκνá¹û£¬µ±ÎÒÃÇÖ´ÐÐ"gradle
hello -PskipHello=xxxx"ʱ£¬»áÊä³ö"hello world"¡£
4. ×ܽá
OK.½ñÌì¶ÔgradleµÄ×ܽᵽ´ËΪֹ¡£×ÜÌå¶øÑÔ£¬ÓÃDSLµÄ´úÂë¶ø²»ÊÇxmlÀ´¶¨Òå¹¹½¨µÄ¹ý³Ì£¬»¹ÊǺÜfancyµÄ¡£
´ÓÁ㿪ʼѧϰGradleÖ®Èý---¶àÏîÄ¿¹¹½¨
Ëæ×ÅÐÅÏ¢»¯µÄ¿ìËÙ·¢Õ¹£¬ITÏîÄ¿±äµÃÔ½À´Ô½¸´ÔÓ£¬Í¨³£¶¼ÊÇÓɶà¸ö×Óϵͳ¹²Í¬Ð×÷Íê³É¡£¶ÔÓÚÕâÖÖ¶àϵͳ¡¢¶àÏîÄ¿µÄÇé¿ö£¬ºÜ¶à¹¹½¨¹¤¾ß¶¼ÒѾÌṩÁ˲»´íµÄÖ§³Ö£¬Ïñmaven¡¢ant¡£Gradle³ýÁË½è¼øÁËant»òÕßmavenµÄ¼Ì³ÐµÄ·½Ê½¶¨Òå×ÓÏîÄ¿£¬Ò²ÌṩÁËÒ»ÖÖ¸üΪ·½±ãµÄ¼¯ÖÐÅäÖõķ½Ê½£¬´ó´ó¼õÉÙÁ˹¹½¨´øÀ´µÄ¸´ÔÓ¶È¡£³ý´ËÖ®Í⣬Gradle»¹ÌṩÁËÇåÎúµÄProjectÊ÷Ä£ÐÍÀ´Ó³Éä¶àÏîÄ¿µÄ×éÖ¯½á¹¹¡£ÏÂÃæ£¬ÈÃÎÒÃÇÁ˽âÒ»ÏÂÈçºÎʹÓÃGradle¹¹½¨¶àÏîÄ¿¡£
1. ¶àÏîÄ¿¶¨Òå¼°½á¹¹
ÔÚGradleÖУ¬Ê¹ÓÃÎļþsettings.gradle¶¨Ò嵱ǰÏîÄ¿µÄ×ÓÏîÄ¿£¬¸ñʽÈçÏÂËùʾ£º
include 'sub-project1', 'sub-project2', 'sub-project3'£¬ |
Ëü±íʾÔÚµ±Ç°µÄÏîĿϽ¨Á¢Èý¸ö×ÓÏîÄ¿£¬·Ö±ðΪ'sub-project1', 'sub-project2',
'sub-project3'¡£Ä¬ÈÏÇé¿öÏ£¬Ã¿¸ö×ÓÏîÄ¿µÄÃû³Æ¶ÔÓ¦×ŵ±Ç°²Ù×÷ϵͳĿ¼ÏµÄÒ»¸ö×ÓĿ¼¡£
µ±GradleÔËÐÐʱ£¬»á¸ù¾Ýsettings.gradleµÄÅäÖÃÇé¿ö£¬¹¹½¨Ò»¸öµ¥¸ù½ÚµãµÄÏîÄ¿Ê÷¡£ÆäÖеÄÿ¸ö×Ó½Úµã´ú±íÒ»¸öÏîÄ¿(Project)£¬Ã¿¸öÏîÄ¿¶¼ÓÐÒ»¸öΨһµÄ·¾¶±íʾËüÔÚµ±Ç°Ê÷ÖеÄλÖã¬Â·¾¶µÄ¶¨Ò巽ʽÀàËÆ:
Root:<Level1-×Ó½Úµã>:<Level2-×Ó½Úµã>:<Level3-×Ó½Úµã> |
Ò²¿ÉÒÔ¼òд³É¡°:<Level1-×Ó½Úµã>:<Level2-×Ó½Úµã>:<Level3-×Ó½Úµã>¡±¡£½èÖúÕâÖÖ·¾¶µÄ¶¨Ò巽ʽ£¬ÎÒÃÇ¿ÉÒÔÔÚbuild.gradleÈ¥·ÃÎʲ»Í¬µÄ×ÓÏîÄ¿¡£ÁíÍ⣬¶ÔÓÚµ¥ÏîÄ¿£¬Êµ¼ÊÉÏÊÇÒ»ÖÖÌØÊâµÄ¡¢Ö»´æÔÚ¸ù½Úµã£¬Ã»ÓÐ×Ó½ÚµãµÄÏîÄ¿Ê÷¡£
ÀýÈ磬ÎÒÃÇÓиö²úÆ·A£¬°üÀ¨ÒÔϼ¸¸ö×é¼þcore£¬web£¬mobile¡£·Ö±ð´ú±í"ºËÐÄÂß¼"¡¢"ÍøÕ¾"¡¢¡°ÊÖ»ú¿Í»§¶Ë¡±¡£
ÒòΪÿ¸ö×é¼þÊǶÀÁ¢µÄ²¿·Ö£¬Õâ¸öʱºò×îºÃÎÒÃÇÄܶ¨Òå¶à¸ö×ÓÏîÄ¿£¬ÈÃÿ¸ö×ÓÏîÄ¿·Ö±ð¹ÜÀí×Ô¼ºµÄ¹¹½¨¡£ÓÚÊÇÎÒÃÇ¿ÉÒÔÕâÑù¶¨ÒåA/settings.gradle
include 'core', 'web', 'mobile' |
°´ÕÕ֮ǰÃèÊöµÄ£¬core×é¼þ¶ÔÓ¦A/coreĿ¼£¬web×é¼þ¶ÔÓ¦A/webĿ¼£¬mobile×é¼þ¶ÔÓ¦A/mobileĿ¼¡£½ÓÏÂÀ´£¬ÎÒÃǾͿÉÒÔÔÚÿ¸ö×é¼þÄÚ²¿£¬¶¨Òåbuild.gradle¸ºÔð¹ÜÀíµ±Ç°×é¼þµÄ¹¹½¨¡£
GradleÌṩÁËÒ»¸öÄÚ½¨µÄtask 'gradle projects'£¬¿ÉÒÔ °ïÖúÎÒÃDz鿴µ±Ç°ÏîÄ¿Ëù°üº¬µÄ×ÓÏîÄ¿£¬ÏÂÃæÈÃÎÒÃÇ¿´¿´gradle
projectsµÄÊä³ö½á¹û£º
$ gradle projects :projects ------------------------------------------------------------ Root project ------------------------------------------------------------ Root project 'A' +--- Project ':core' +--- Project ':mobile' \--- Project ':web |
½á¹ûһĿÁËÈ»£¬Ê×ÏÈÊÇRoot¼¶±ðµÄÏîÄ¿A£¬È»ºóÊÇAÏÂÃæµÄ×ÓÏîÄ¿'core', 'mobile', 'mobile'
×îÖÕµÄÎļþÒÔ¼°Ä¿Â¼½á¹¹ÈçÏÂËùʾ£º
A --settings.gradle --build.gradle --core --build.gradle --web --build.gradle --mobile --build.gradle |
Èç¹ûÄ㲻ϲ»¶ÕâÖÖĬÈϵĽṹ£¬Ò²¿ÉÒÔ°´ÕÕÈçÏ·½Ê½¶¨Òå×ÓÏîÄ¿µÄÃû³ÆºÍÎïÀíĿ¼½á¹¹£º
include(':core) project(':core').projectDir = new File(settingsDir, 'core-xxx')
include(':web)
project(':web').projectDir = new File(settingsDir,
'web-xxx')
include(':mobile)
project(':mobile').projectDir = new File(settingsDir,
'mobile-xxx') |
ÔÚÕâ¸öÀý×ÓÖУ¬×ÓÏîÄ¿coreʵ¼ÊÉ϶ÔÓ¦µÄÎïÀíĿ¼ΪA/core-xxx£¬webʵ¼ÊÉ϶ÔÓ¦µÄÊÇA/web-xxx£¬mobileÒ²ÀàËÆ¡£
ËäÈ»ÎÒÃǸü¸ÄÁË×ÓÏîÄ¿µÄÎïÀíĿ¼½á¹¹£¬²»¹ýÓÉÓÚÎÒÃÇÔÚbuild.gradleÖÐʹÓõÄÊÇÀàËÆ ¡° :<SubProject>¡±µÄ·½Ê½·ÃÎʶÔÓ¦µÄ×ÓÏîÄ¿£¬ËùÒÔĿ¼½á¹¹µÄ¸Ä±ä£¬¶ÔÎÒÃÇGradleµÄ¹¹½¨½Å±¾²¢²»»á²úÉúÓ°Ïì¡£
½ÓÏÂÀ´£¬¿¼ÂÇÒ»¸ö¸ü¸´ÔÓµÄÇé¿ö£¬Ëæ×ŲúÆ·µÄ·¢Õ¹£¬mobileÕâ¸ö×é¼þÂýÂýµÄ»®·Ö³ÉÁËAndroidºÍIOSÁ½¸ö²¿·Ö£¬ÕâʱÎÒÃÇÖ»ÐèÒªÔÚĿ¼A/mobile϶¨ÒåеÄsettings.gradle£¬²¢¼ÓÈëÈçϲ¿·Ö£º
ÏÖÔÚ£¬mobile×é¼þϽ«´æÔÚÁ½¸öеÄ×ÓÏîÄ¿ "android"ºÍ"ios"
ÓÚÊÇ£¬Õâʱºò'gradle projects'µÄĿ¼½á¹¹¾Í±ä³É
A --settings.gradle --core --build.gradle --web --build.gradle --mobile --settings.gradle --ios --build.gradle --android --build.gradle |
2. ¶àÏîÄ¿µÄ¼¯ÖÐÅäÖÃ
¶ÔÓÚ´ó¶àÊý¹¹½¨¹¤¾ß£¬¶ÔÓÚ×ÓÏîÄ¿µÄÅäÖ㬶¼ÊÇ»ùÓڼ̳еķ½Ê½¡£Gradle³ýÁËÌṩ¼Ì³ÐµÄ·½Ê½À´ÉèÖÃ×ÓÏîÄ¿£¬»¹ÌṩÁËÁíÍâÒ»ÖÖ¼¯ÖеÄÅäÖ÷½Ê½£¬·½±ãÎÒÃÇͳһ¹ÜÀí×ÓÏîÄ¿µÄÐÅÏ¢¡£ÏÂÃæ¿´Ò»¸öÀý×Ó£¬´ò¿ªA/build.gradle£¬ÊäÈëÈçϲ¿·Ö£º
allprojects { task hello << {task -> println "I'm $task.project.name" } } subprojects { hello << {println "- I am the sub project of A"} } project(':core').hello << { println "- I'm the core component and provide service for other parts." } |
¶ÔÓÚÉÏÃæËùʾµÄ´úÂ룬ÒѾºÜ±íÒâÁË£º
allprojects{xxx} Õâ¶Î´úÂë±íʾ£¬¶ÔÓÚËùÓеÄproject£¬Gradle¶¼½«¶¨ÒåÒ»¸öÃû³ÆÊÇhelloµÄTask
{ println "I'm $task.project.name"} ¡£
subprojects{xxxx}µÄÕâ¶Î´úÂë±íʾ£¬¶ÔÓÚËùÓеÄ×Óproject£¬½«ÔÚÃû³ÆÎªhelloµÄTaskÉÏ×·¼ÓAction
{println "- I am the sub project of A"}
×¢Ò⣺¹ØÓÚTaskºÍActionµÄ¹ØÏµ£¬Çë¿´ÎÒ֮ǰдµÄ±¾ÏµÁеĵÚÒ»²¿·Ö¡£
project(':core')µÄÕâ¶Î´úÂë±íʾ£¬¶ÔÓÚÃû³ÆÎªcoreµÄproject£¬½«ÔÚÃû³ÆÎªhelloµÄTaskÉÏ×·¼ÓAction
{ println "- I'm the core component and provide
service for other parts." }
3. ¶àÏîÄ¿µÄTaskÖ´ÐÐ
֮ǰÎÒÃÇÒѾÁ˽âÁ˶àÏîÄ¿µÄ½á¹¹ÒÔ¼°ÈçºÎͨ¹ý·¾¶È¥·ÃÎÊ×ÓÏîÄ¿¡£ÏÖÔÚÈÃÎÒÃÇ¿´¿´ÈçºÎʹÓÃGradleÀ´Ö´ÐжàÏîÄ¿¡£
ÔÚGradleÖУ¬µ±ÔÚµ±Ç°ÏîÄ¿ÉÏÖ´ÐÐgradle <Task>ʱ£¬gradle»á±éÀúµ±Ç°ÏîÄ¿ÒÔ¼°ÆäËùÓеÄ×ÓÏîÄ¿£¬ÒÀ´ÎÖ´ÐÐËùÓеÄͬÃûTask£¬×¢Ò⣺×ÓÏîÄ¿µÄ±éÀú˳Ðò²¢²»Êǰ´ÕÕsetting.gradleÖе͍Òå˳Ðò£¬¶øÊǰ´ÕÕ×ÓÏîÄ¿µÄÊ××ÖĸÅÅÁÐ˳Ðò¡£
»ùÓڸղŵÄÀý×Ó£¬Èç¹ûÎÒÃÇÔÚ¸ùĿ¼Ï£¬Ö´ÐÐgradle hello£¬ÄÇôËùÓÐ×ÓÏîÄ¿µÄ¡°hello¡± Task¶¼»á±»Ö´ÐС£Èç¹ûÎÒÃÇÔÚmobileĿ¼ÏÂÖ´ÐÐgradle
hello,ÄÇômobile¡¢androidÒÔ¼°IOSµÄ¡°hello¡± Task¶¼»á±»Ö´ÐС£¹ØÓÚ¸ÃÀý×ÓµÄÔËÐнá¹û£¬ÕâÀï¾Í²»Ìù³öÀ´ÁË¡£´ó¼ÒÈç¹ûÓÐÐËȤµÄ»°¿ÉÒÔÊÔÊÔ¡£
4. ×ܽá
ÕâÆªÎÄÕÂÖ÷ÒªÃèÊöÁËʹÓÃGradle¹ÜÀí¶àÏîÄ¿µÄ֪ʶ¡£Ïà±ÈAnt»òÕßMaven£¬GradleÌṩÁ˸üÁé»îµÄÅäÖ÷½Ê½¡£¸üÖØÒªµÄÊÇ£¬Gradle»¹ÌṩÁ˺ܶàÄÚ½¨µÄTask°ïÖúÎÒÃDz鿴»òÕß¹ÜÀíÏîÄ¿¡£Õâ´Î¾ÍÏÈÁĵ½ÕâÀÏ´ÎÎÒÃÇÀ´¿´¿´GradleµÄÉúÃüÖÜÆÚ¡£ |