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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Gradle±Ê¼Ç¡ª¹¹½¨»ù´¡
 
×÷ÕߣºÃ²ËƵôÏß À´Ô´£ºCSDN ·¢²¼ÓÚ 2016-3-4
  3476  次浏览      27
 

±¾ÆªÎÄÕÂÖ÷Òª½éÉÜÒ»ÏÂ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ÈÎÎñÖ´ÐÐ֮ǰӰÏìËü£¬¼´Ê¹Õâ¸öÈÎÎñ²»ÊÇÖ÷ÒªµÄÈÎÎñ£¨¼´²»ÊÇͨ¹ýÃüÁîÐд«Èë²ÎÊýÀ´µ÷Óã©¡£

   
3476 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

³ÖÐø¼¯³É½éÉÜ
ʹÓÃ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