Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
´ÓÁ㿪ʼѧϰGradle
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-24
  4309  次浏览      28
 

´ÓÁ㿪ʼѧϰ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"£¬½á¹û½«ÊÇ:

Hello World
I'm Gradle

Óɴ˿ɼû£¬µ±Ö´ÐÐ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£¬²¢¼ÓÈëÈçϲ¿·Ö£º

include 'android', 'ios'

ÏÖÔÚ£¬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µÄÉúÃüÖÜÆÚ¡£

   
4309 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
ÏîÄ¿¹ÜÀí:MavenÈÃÊÂÇé±äµÃ¼òµ¥
³ÖÐø¼¯³É¹¤¾ßhudson
³ÖÐø¼¯³É
MavenȨÍþÖ¸ÄÏ
³ÌÐò¼¯(UMLÖеİü)Ö®¼äÑ­»·


²úÆ··¢²¼¹ÜÀí
ÅäÖùÜÀí·½·¨¡¢Êµ¼ù¡¢¹¤¾ß
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
ʹÓÃCCÓëCQ½øÐÐÏîĿʵ¼ù
CVSÓëÅäÖùÜÀí
Subversion¹ÜÀíÔ±


º£º½¹É·Ý ÖØ¹¹¼°³ÖÐø¼¯³É
µçÑлªÔ´ Éè¼ÆÔ­Àí¡¢½¨Ä£ÓëÖØ¹¹
Èí¼þÅäÖùÜÀíÈÕ¹¹½¨¼°³ÖÐø¼¯³É
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
ÖйúÈí¼þÑз¢ÖÐÐÄ µ¥Ôª²âÊÔÓëÖØ¹¹
µ¥Ôª²âÊÔ¡¢Öع¹ºÍ³ÖÐø¼¯³Éʵ¼ù
ÂÞ¿ËΤ¶û C++µ¥Ôª²âÊÔ+ÖØ¹¹+Gtest