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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Áé»îÇ¿´óµÄ¹¹½¨ÏµÍ³Gradle
 
À´Ô´£º¾Û¿Í ·¢²¼ÓÚ 2016-3-1
  3757  次浏览      27
 

ǰÑÔ

¹¹½¨£¬Èí¼þÉúÃüÖÜÆÚÖÐÖØÒªµÄÒ»»·£¬ÔÚÏÖ´úÈí¼þ¿ª·¢¹ý³ÌÖУ¬Æð×ÅÔ½À´Ô½ÖØÒªµÄ×÷Ó᣹ýÈ¥ÔÚJava»òÀàJavaµÄÊÀ½çÀAnt¡¢MavenÔÙÊìϤ²»¹ýÁË£¬Mavenƾ½èÆäÇ¿´óµÄÒÀÀµÅäÖÃսʤAnt£¬»ù±¾ÉϳÉΪÁËJava¹¹½¨µÄ±ê×¼¡£¶øÔÚÏÖ´ú£¬ÏµÍ³ÈÕÒæ¸´ÔÓ£¬¹¹½¨µÄÁé»îÐÔÒªÇóÔ½À´Ô½¸ß£¬±ÈÈ磺¹¹½¨¹ý³ÌÖÐÐèÒª´ò°üÉÏ´«µ½·þÎñÆ÷£¬MavenÎÞ·¨ºÜºÃµØÖ§³ÖÕâÖÖ¸´ÔÓµÄϵͳ¹¹½¨£¬ËùÒÔ£¬ÎÒÑ¡ÔñÁËGradle£¬Ò»¸ö»ùÓÚGroovy£¬¸üÁé»î¸üÇ¿´óµÄ¹¹½¨ÏµÍ³£¬ÄܰïÖúÎÒÃǹ¹½¨¸ü¸´ÔÓµÄÏîÄ¿¡£

ΪʲôѡÔñGradle

´Ó¿ò¼Ü·½ÏòÀ´¿´£º

GradleÊǺܳÉÊìµÄ¼¼Êõ£¬¿ÉÒÔ´¦Àí´ó¹æÄ£¹¹½¨

Gradle¶Ô¶àÓïÑÔ¡¢¶àƽ̨ÓиünaturalµÄÖ§³Ö

Gradle¹Ø×¢ÔÚ¹¹½¨Ð§ÂÊÉÏ

Gradle·¢²¼ºÜƵ·±£¬ÖØÒªfeature¿ª·¢¼Æ»®Í¸Ã÷»¯

GradleÉçÇøºÜ»îÔ¾£¬²¢ÇÒÔö¼ÓѸËÙ

´ÓÓïÑÔÌØÐÔÀ´¿´£º

1.´úÂëºÜ¾«¼ò

2.Gradle»ùÓÚGroovy£¬ÄÜÍê³É¸´ÔÓϵͳµÄ¹¹½¨ÈÎÎñ

3.DSL±ÈXML¸ü¼ò½à¸ßЧ

GradleÔÚ¿ªÔ´ÏîÄ¿ÖеÄʹÓÃ

ÏÖÔÚʹÓÃGradle¹¹½¨µÄ¿ªÔ´ÏîÄ¿ºÜ¶à£¬ÎÒÓйý½Ó´¥µÄ±ÈÈ磺Grails, Griffon, Groovy, Hibernate, Spring

»¹ÓкܶàÆäËü¿ªÔ´ÏîĿҲ¶¼ÔÚÓÃGradle£¬±ÈÈçTapestry£¬Qi4J£¬NetflixÏÂËùÓпªÔ´ÏîÄ¿£¨python¡¢c++¡¢htmlµÈ³ýÍ⣩µÈµÈ¡£

GradleÔÚÆóÒµÖеÄʹÓÃ

ÏÖÔÚʹÓÃGradleÀ´×ö¹¹½¨ÌåϵµÄ¹«Ë¾Ò²Ô½À´Ô½¶à£¬linkedin¾ÍºÜÔ翪ʼÇл»µ½Gradle¡£

GradleÌåÑé

GradleµÄ°²×°·Ç³£·½±ã£¬ÏÂÔØZIP°ü£¬½âѹµ½±¾µØÄ¿Â¼£¬ÉèÖà GRADLE_HOME »·¾³±äÁ¿²¢½« GRADLE_HOME/bin ¼Óµ½ PATH »·¾³±äÁ¿ÖУ¬°²×°¾ÍÍê³ÉÁË¡£Óû§¿ÉÒÔÔËÐÐgradle -vÃüÁîÑéÖ¤°²×°£¬ÕâЩ³õʼµÄ²½ÖèºÍMavenûʲôÁ½Ñù¡£ÎÒÕâÀï°²×°µÄGradle°æ±¾ÊÇ1.10£¬ÏêϸÐÅÏ¢¼ûÏ£º

bob [10:42]  ? gradle -v

------------------------------------------------------------
Gradle 1.10
------------------------------------------------------------
Build time: 2013-12-17 09:28:15 UTC
Build number: none
Revision: 36ced393628875ff15575fa03d16c1349ffe8bb6
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy: 2.2.0
JVM: 1.7.0_45 (Oracle Corporation 24.45-b08)
OS: Mac OS X 10.9.2 x86_64

GradleµÄFeaturesºÜ¶à£¬¹ÙÍødoc½éÉܺÜÏêϸ£¬ÎÒÕâÀï¾Í²»¶à˵¡£ÏÂÃæ¼òµ¥½éÉÜÒ»ÏÂGradle¹¹½¨Ïà¹ØµÄ¶«Î÷¡£

Gradle»ù´¡

1£¬GradleÓÐÁ½¸ö×î»ù±¾µÄ¸ÅÄprojectºÍtask¡£GradleÀïÃæµÄËùÓж«Î÷¶¼»ùÓÚÕâÁ½¸ö¸ÅÄî¡£projectͨ³£Ö¸Ò»¸öÏîÄ¿£¬¶øtaskÖ¸¹¹½¨¹ý³ÌÖеÄÈÎÎñ¡£Ò»´Î¹¹½¨¿ÉÒÔÓÐ1µ½n¸öproject£¬Ã¿¸öprojectÓÐ1µ½n¸ötask¡£

2£¬GradleÓÐÒ»¸öÀàËÆMavenÖÐpom.xmlµÄÅäÖÃÎļþ£ºbuild.gradle¡£¹¦ÄÜÒ²»ù±¾Ò»Ñù£¬¸ºÔðµ±Ç°projectµÄ¹¹½¨¶¨Òå¡£¿´Ò»¸öbuild.gradleµÄ¼òµ¥Àý×Ó£º

bob [10:46]  ? pwd
/Users/bob/framework/gradle-1.10/samples/userguide/tutorial/hello
// ÔÚÄã°²×°µÄgradle¸ùĿ¼ÏÂÓжÔÓ¦µÄsamplesĿ¼£¬ÀïÃæÓкܶàÀý×Ó

bob [10:46] ? cat build.gradle
task hello {
doLast {
println 'Hello world!'
}
}

ÎļþÖж¨ÒåÁËÒ»¸ötask£ºhello£¬taskµÄÄÚÈÝÊÇ "println 'Hello world!'"£¬ÎÒÃÇÀ´Ö´ÐÐһϣº

bob [10:49]  ? gradle -q hello
Hello world!

¿ÉÒÔ¿´µ½£¬Êä³öÁË"Hello world!"£¬ÕâÀï-qµÄÒâ˼ÊÇquietģʽ£¬Ö»Êä³ö¹¹½¨ÖеıØÒªÐÅÏ¢¡£

gradleÀï¿ÉÒÔ¶¨Òå¶à¸ötask£¬taskÖ®¼äÒ²¿ÉÒÔÓÐÒÀÀµ¹ØÏµ£¬»¹¿ÉÒÔ¶¨ÒåĬÈÏtask£¬¿´Ò»¸öÀý×Ó£º

´øÓÐtaskÒÀÀµ¹ØÏµ£º

bob [10:53]  ? cat userguide/tutorial/lazyDependsOn/build.gradle
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}
task taskY << {
println 'taskY'
}

´øÓÐĬÈÏtaskÀý×Ó£º

bob [10:59]  ? cat userguide/tutorial/defaultTasks/build.gradle
defaultTasks 'clean', 'run'


task clean << {
println 'Default Cleaning!'
}

task run << {
println 'Default Running!'
}

task other << {
println "I'm not a default task!"
}

¿´¿´Ö´ÐÐÇé¿ö£º

bob [10:59]  ? gradle -q
Default Cleaning!
Default Running!

bob [11:00] ? gradle -q other
I'm not a default task!

ĬÈÏtask£¬µ±Ã»ÓÐtaskÖ¸¶¨Ê±£¬Ôò»áÖ´ÐÐĬÈϵÄtask¡£

GradleÒÀÀµ

GradleºÍMavenÔÚÒÀÀµ¹ÜÀíÉϼ¸ºõ²î²»¶à£¬ºËÐĵĸÅÄîÊÇÒ»ÑùµÄ£¬Ö»²»¹ýGradleÓï·¨¸ü¾«¼ò£¬²¢ÇÒ¶àÁËһЩ¸üÁé»îµÄ×Ô¶¨ÒåÅäÖá£ÎÒÃÇÏÈ¿´Ò»¸öÀý×Ó£¬MavenµÄpom.xml£º

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>

¸ü»»³ÉGradle½Å±¾£¬½á¹ûÊÇÕâÑù£º

dependencies {
compile('org.springframework:spring-core:3.2.4.RELEASE')
compile('org.springframework:spring-beans:3.2.4.RELEASE')
compile('org.springframework:spring-context:3.2.4.RELEASE')
testCompile('junit:junit:4.7')
}

´úÂë¿éÉÙÁ˺ܶࡣÊÔÏ룬Éú²ú»·¾³ÏµÄÖС¢´óÐÍÓ¦ÓÃÈç¹ûÓö¼ÓÃGradleÌæ»»Maven£¬ÄÇÊÆ±Ø»á´ó´ó¼õÉÙÅäÖÃÎļþ´úÂë¿é£¬²¢ÓиüÇ¿µÄ¿É¶ÁÐÔ£¬Ò²¾ÍÒâζ×Åϵͳ¸ü¼ÓÎȽ¡¡£

1£¬GradleÔÚÒÀÀµÅäÖÃÉÏÃæ£¬ºÍMavenÒ»Ñù£¬Ö§³Ö´«µÝÐÔÒÀÀµ£¬È»ºóºÍMaven²»Í¬µÄÊÇ£¬Ëü»¹Ö§³ÖÅųý´«µÝÐÔÒÀÀµÒÔ¼°¹Ø±Õ´«µÝÐÔÒÀÀµ¡£

2£¬GradleµÄÒÀÀµscope£¬Ò²»ù±¾ºÍMavenÒ»Ñù£¬²»¹ýËüÊÇͨ¹ýÅäÖÃÀ´¶¨Ò壬pluginÀ´Ö§³ÅºÍ¼ÓÇ¿µÄ£¬ËùÒÔ³ýÁË»ù±¾µÄcompile¡¢runtimeµÈscopeÍ⣬Gradle»¹¿ÉÒÔ×Ô¶¨Òå³öºÜ¶àÅäÖã¬Õë¶Ô²»Í¬µÄÅäÖÃд²»Í¬µÄtaskÀ´Íê³É¸ü¸´ÔÓ¸üÁé»îµÄ¹¹½¨ÈÎÎñ¡£

ÒÀÀµÏà¹ØµÄ²Ö¿âÅäÖúÜÁé»î£¬Ö§³Ö¶àÖÖrepository£¬¿´ÏÂÃærepository¶¨ÒåÀý×Ó£º

bob [11:07]  ? cat userguide/artifacts/defineRepository/build.gradle

repositories {
mavenCentral() // ¶¨Òå²Ö¿âΪmavenÖÐÐIJֿâ
}
repositories {
jcenter() // ¶¨Òå²Ö¿âΪjcenter²Ö¿â
}
repositories {
maven {
url "http://repo.mycompany.com/maven2" // ¶¨ÒåÒÀÀµ°üЭÒéÊÇmaven£¬µØÖ·Êǹ«Ë¾µÄ²Ö¿âµØÖ·
}
}
repositories { // ¶¨Òå±¾µØ²Ö¿âĿ¼
flatDir {
dirs 'lib'
}
}
repositories { // ¶¨ÒåivyЭÒéÀàÐ͵IJֿâ
ivy {
url "http://repo.mycompany.com/repo"
}
}

¿ÉÒÔ¿´µ½£¬¶ÔÓÚ³£ÓõÄmaven¡¢ivy¡¢localÒÔ¼°jcenterµÄrepository¶¼ÓÐÖ§³Ö£¬Óï·¨ºÜ¼òµ¥¡£¶øÇÒ»¹¿ÉÒÔͨ¹ý±àдtaskÀ´Ö§³Ö¸ü¸´ÔÓµÄrepository£¬¸ü¶àÏêÇé¿ÉÒԲ鿴°²×°°üÀïµÄ¶ÔӦĿ¼ÏÂÎļþ²é¿´¡£

Gradle¹¹½¨

ºÍMavenÒ»Ñù£¬GradleÒ²ÊÇͨ¹ýartifactÀ´´ò°ü¹¹½¨µÄ¡£µÃÒæÓÚÉÏÊöµÄGradle±¾ÉíµÄÌØÐÔ£¬artifactÔÚGradleÀïʵÏֵøüÁé»îһЩ¡£¿´Ò»¸öÀý×Ó£º

bob [13:00]  ? cat userguide/artifacts/uploading/build.gradle

## jarÀàÐ͵Äartifact
task myJar(type: Jar)
artifacts {
archives myJar
}
## fileÀàÐ͵Äartifact
def someFile = file('build/somefile.txt')
artifacts {
archives someFile
}

## ¸ù¾Ý×Ô¶¨ÒåtaskÀ´Íê³Éartifact
task myTask(type: MyTaskType) {
destFile = file('build/somefile.txt')
}
artifacts {
archives(myTask.destFile) {
name 'my-artifact'
type 'text'
builtBy myTask
}
}

## ¸ù¾Ý×Ô¶¨ÒåtaskÀ´Íê³Éartifact
task generate(type: MyTaskType) {
destFile = file('build/somefile.txt')
}
artifacts {
archives file: generate.destFile, name: 'my-artifact', type: 'text', builtBy: generate
}

ÕâÑù¾Í¼òµ¥µØ¶¨ÒåÁ˺ü¸ÖÖartifactÉú³ÉµÄ¶¨Ò壬¸ù¾Ý²»Í¬µÄ³¡¾°ÐèÇó£¬Éú³ÉÎı¾Îļþ¡¢jar°ü»òÕßzip£¬»¹¿ÉÒÔÔÙÉÏ´«µ½·þÎñÆ÷ÉÏ¡£
Ò»°ãÇé¿öÏ£¬³£ÓõIJå¼þ£¬±ÈÈç˵"Java plugin"¶¼Ä¬È϶¨ÒåÁË"jar"ÕâÑùµÄartifact task£¬ËùÒÔÒ»°ã²»ÐèÒª¶îÍ⿪·¢¡£µ«ÊÇ£¬Õë¶ÔÓÚһЩ¸´ÔÓÇé¿ö£¬»òÕßÔÚplugin»ù´¡ÉÏÔöÇ¿µÄ»°£¬×Ô¶¨Òåartifact task»¹ÊǷdz£ÓÐÓõġ£

Gradle¹¹½¨µÄÏîÄ¿£¬·¢²¼µ½²Ö¿âÖУ¬Ò²·Ç³£ÈÝÒ×£º

apply plugin: 'maven'

uploadArchives {
repositories {
ivy {
credentials {
username "username"
password "pw"
}
url "http://repo.mycompany.com"
}
}
}

Gradle ²å¼þ

ÉÏÃæ¼ò½é½éÉÜÁËÒ»ÏÂGradleµÄһЩ¸ÅÄîºÍÅäÖã¬ÒªÓõ½ÏîÄ¿ÖÐrunÆðÀ´£¬ÏÖÔÚ»¹»¹ÒªÒ»²½£¬¾ÍÊDZ¾½Ú½éÉܵÄGradle²å¼þ¡£GradleÏÖÔÚÒѾ­Ö§³ÖºÜ¶à²å¼þ£¬Õâ¸ø¿ª·¢Õß´øÀ´¼«´óµÄ±ãÀû£¬ÏÈ˵˵Java²å¼þ°É¡£

1£¬Ê¹ÓÃJava plugin£¬Ö»ÐèÒªÔÚbuild.gradleÖмÓÈëÕâ¾ä»°£º

apply plugin: 'java'

2£¬Á˽â»òÉèÖÃJava project²¼¾Ö¡£GradleºÍMavenÒ»Ñù£¬²ÉÓÃÁË¡°Ô¼¶¨ÓÅÓÚÅäÖᱵķ½Ê½¶ÔJava project²¼¾Ö£¬²¢ÇÒ²¼¾Ö·½Ê½ÊǺÍMavenÒ»ÑùµÄ£¬´ËÍ⣬Gradle»¹¿ÉÒÔ·½±ãµÄ×Ô¶¨Òå²¼¾Ö¡£ÔÚGradleÖУ¬Ò»°ã°ÑÕâЩĿ¼½Ð×ösource set¡£¿´Ï¹ٷ½µÄ´ð°¸£º

ÕâÀïҪעÒ⣬ÿ¸öpluginµÄsource set¿ÉÄܶ¼²»Ò»Ñù¡£

ͬÑùµÄ£¬Java plugin»¹¶¨ÒåºÃÁËÒ»¶Ñtask£¬ÈÃÎÒÃÇ¿ÉÒÔÖ±½ÓʹÓ㬱ÈÈ磺clean¡¢test¡¢buildµÈµÈ¡£ÕâЩtask¶¼ÊÇÎ§ÈÆ×ÅJava pluginµÄ¹¹½¨ÉúÃüÖÜÆÚµÄ£º

ͼÖÐÿһ¿é¶¼ÊÇÒ»¸ötask£¬¼ýÍ·±íʾtaskÖ´ÐÐ˳Ðò/ÒÀÀµ£¬±ÈÈçÖ´ÐÐtask jar£¬ÄÇô±ØÐëÏÈÖ´ÐÐtask compileJavaºÍtask processResources¡£ÁíÍâ¿ÉÒÔ¿´µ½£¬GradleµÄJava plugin¹¹½¨ÉúÃüÖÜÆÚ±È½Ï¸´ÔÓ£¬µ«ÊÇÒ²±íÃ÷Á˸ü¼ÓÁé»î£¬¶øÇÒ£¬ÔÚÏîÄ¿ÖУ¬Ò»°ãֻʹÓÃÆäÖг£Óõö£ºclean test check build µÈµÈ¡£

gradle¹¹½¨¹ý³ÌÖУ¬ËùÓеÄÒÀÀµ¶¼±íÏÖΪÅäÖ㬱ÈÈç˵ϵͳÔËÐÐʱµÄÒÀÀµÊÇruntime£¬gradleÀïÓÐÒ»¸öÒÀÀµÅäÖýÐruntime£¬ÄÇôϵͳÔËÐÐʱ»á¼ÓÔØÕâ¸öÒÀÀµÅäÖÃÒÔ¼°ËüµÄÏà¹ØÒÀÀµ¡£ÕâÀï˵µÄÓеãÈÆ£¬¿ÉÒÔ¼òµ¥Àí½âÒÀÀµºÍmavenÀàËÆ£¬Ö»²»¹ýgradleÓÃconfigurationʵÏÖ£¬ËùÒÔ¸üÁé»î£¬Óиü¶àÑ¡Ôñ¡£ÏÂͼÊÇÒÀÀµÅäÖùØÏµÍ¼ÒÔ¼°ºÍtaskµ÷ÓõĹØÏµÍ¼£º

¿ÉÒÔ¿´µ½£¬»ù±¾ºÍMavenÊÇÒ»ÑùµÄ¡£ÆäʵGradleÀïÃæÕâЩÒÀÀµ(scope)¶¼ÊÇͨ¹ýconfigurationÀ´ÊµÏֵģ¬ÕâÀï¾Í²»Ï¸Ëµ£¬ÓÐÐËȤµÄ¿ÉÒÔÑо¿Ò»Ï¹ٷ½×ÊÁÏ¡£

¹ØÓÚ¡°Ô¼¶¨ÓÅÓÚÅäÖá±£¬»¹ÓкܶණÎ÷£¬ÕâÀﲻϸ˵£¬¹Ù·½docÒѾ­ËµµÄºÜÏêϸÁË¡£

Gradle ÆäËü²»´íµÄÌØÐÔ

1£¬ËùÓÐÉùÃ÷¶¼ÊÇÒ»µÈ¹«Ãñ

2£¬¶àproject¹¹½¨

3£¬ÒýÓÃÍⲿ/ͨÓù¹½¨½Å±¾

4£¬Gradle wrapper

С½á

1£¬Gradle·Ç³£¼ò½à£¬ÏîÄ¿±¾ÉíµÄÅäÖôúÂë·Ç³£ÉÙ¡£

2£¬GradleÔÚÍⲿproject¹¹½¨Ò²Ö§³ÖºÜºÃ£¬ÕûÌå¹¹½¨¼òµ¥£¬²¢ÇÒͨ¹ý¹«ÓÃÍⲿ¹¹½¨½Å±¾£¬ÈÃÅäÖÃÄÚÈݾ¡Á¿Ã»ÓÐÈßÓà¡£

3£¬GradleºÜÁé»î£¬¿ÉÒÔ·½ÃæµÄÔö¼ÓºÍÐ޸Ĺ¹½¨¹ý³Ì¡£¶øMavenÈ´ÐèÒª¿ª·¢²å¼þÀ´Ö§³Ö¡£

4£¬GradleÊÇ»ùÓÚGroovyµÄ£¬Ò²¾ÍÊÇ˵ÅäÖÃÖпÉÒÔ±àд×Ô¶¨Òå´úÂ룬ÄÜÊÊÓ¦¸ü¸´Ôӵij¡¾°£¬ÄÜÍê³É¸üÇ¿´óµÄ¹¦ÄÜ£¬±ÈÈç˵£º×Ô¶¯ÉÏ´«¡¢·Ö·¢¡¢²¿ÊðµÈµÈ¡£

ÏîĿʵս

Gradle½éÉÜÁËÄÇô¶à£¬¿ÉÒÔ¿´³ö£¬gradleÊǷdz£Áé»îµÄ£¬¿ÉÒÔÊÊÓ¦¸÷ÖÖ¸´ÔÓ»·¾³¡£½¨Òé¸÷λ´Ó¼Ü¹¹½Ç¶È¿¼ÂÇgradle¹¹½¨£¬¶ø²»½ö½ö°ÑËüµ±×÷Ò»¸ö¹¹½¨¹¤¾ß¡£ÏÂÃæÀ´ËµËµÎÒÃÇʵ¼ÊÏîÄ¿ÖеÄGradle¸ÄÔ칤×÷¡£

±³¾°£º

ÎÒÃǵÄÏîÄ¿¾­¹ýÒ»¸ö°ëQµÄѸËÙ·¢Õ¹£¬Õû¸öÏîÄ¿ÒѾ­ÓÉ1¸ö¼òÒ׺ǫ́±ä³É4¸öϵͳ£«Èô¸É½Å±¾ÈÎÎñÁË£¬ÏîÄ¿ÖдæÔںܶàÈßÓà´úÂëºÍÖØ¸´ÅäÖá£ÎÒÃÇʹÓÃÉÏÃæ½éÉܵķ½·¨¶ÔÏîÄ¿½øÐÐÁ˸ÄÔ죬ÒÔ½â¾öÕâÁ½¸öÎÊÌâ¡£

²½Ö裺

Òª½â¾öÈßÓà´úÂëºÍͨÓÃÅäÖõÄÎÊÌ⣬×î¼òµ¥µÄ×ö·¨¾ÍÊdzéÈ¡³ö¹²Í¬²¿·Ö£¬×÷ΪÆäËüËùÓÐÏîÄ¿µÄparent/commonÏîÄ¿¡£·½·¨£º

1£¬Ê¹ÓÃgit submodule

½«ËùÓÐϵͳÖй«¹²µÄÀà¿âºÍͨÓõÄÅäÖ㬷ŵ½¶ÀÁ¢µÄ²Ö¿âCommonÖС£ÒòΪÎÒÃÇÓÃgitÀ´¹ÜÀí´úÂ룬¶øgit±¾ÉíÌᳫ¶àbranch£¬¶à²Ö¿â£¬ËùÒÔ²ÉÓÃgit submodule·½Ê½£¬ÆäËüÏîÄ¿ÐèÒªÌí¼ÓCommonÕâ¸ösubmodule£º

git submodule add yourGitRepo deps/Common

×îºóµÄ"deps/Common"ÊÇ×Ô¶¨ÒåµÄ£¬Òâ˼¾ÍÊÇÔÚµ±Ç°µÄdepsĿ¼ÏÂÓÃCommonÃû×ÖÀ´µ±×÷submoduleµÄclone¡£

Èç¹ûÄãclone±ðµÄ´øÓÐsubmoduleµÄÏîĿʱ£¬Ä¬ÈÏÇé¿öÏ£¬µ±Ç°µÄproject²¢²»»á°ÑsubmoduleµÄ´úÂë¶¼cloneÏÂÀ´£¬¿ÉÒÔÖ´ÐУº

git submodule foreach git pull

ÒÔÏÂÕâ¶ÎÒ»°ã´ó¼Ò¾­³£»áÓöµ½£º

µ±ÄãcloneÏîĿʱ£¬submodule»áÒÔ×îеÄmaster·ÖÖ§ÉϵÄcommit id×÷Ϊ±¾´ÎµÄtagÏÂÔØ£¬ÀàËÆÒ»¸ö¸±±¾£¬ÒòΪһ°ã´ó¼Ò¶¼ÊÇÓÃsubmodule£¬¶ø²»ÊÇÐÞ¸ÄËü¡£ËùÒÔµ±ÄãµÄsubmoduleÐèÒª¸üеÄʱºò£¬ÐèÒªÏÈÖ´ÐÐÕâ¶Î´úÂ룺

git submodule foreach git checkout master

ÈÃsubmoduleÇл»µ½master·ÖÖ§ÁË£¬È»ºó¾Í¿ÉÒÔÓÃÉÏÃæµÄsubmodule pullÀ´¸üÐÂÁË¡£

2£¬gradle¹¹½¨£º

¼øÓÚÉÏÎĶÔgradleÓŵãµÄÃèÊö£¬ÎÒÃDzÉÓÃgradleÀ´¹¹½¨¡£ÎÒÃǵÄÏîÄ¿×î³õ¶¼ÊÇ»ùÓÚmavenÀ´¹¹½¨µÄ£¬´ÓmavenÇл»µ½gradleºÜ¼òµ¥£¬ÔÚÏîÄ¿¸ùĿ¼Ï£¬ÏÈÖ´ÐУ¨¼ÙÉèÄãµÄ»úÆ÷ÒѾ­°²×°ÁËgradle»·¾³£¬Ò»°ã¸ºÔð¹¹½¨µÄÈËÊ×´ÎÐèÒª°²×°£¬¿ª·¢ÈËÔ±¿ÉÒÔ²»°²×°£©£º

gradle init wrapper

ÕâÑù£¬¾Í»á×Ô¶¯Éú³ÉÏà¹ØµÄgradlew£¬build.gradle£¬settings.gradleµÈÎļþºÍÏà¹ØÄ¿Â¼£¬²¢»á×Ô¶¯ÏÂÔØ¶ÔÓ¦°æ±¾µÄgradle binary°ü£¨ËùÒÔÒÔºó²»ÐèÒª°²×°£©¡£Gradle»á×Ô¶¯Ê¶±ðMavenÀïµÄÅäÖ㬲¢ÏàÓ¦µÄµ¼Èë½øÀ´£¬ÓÐÉÙÁ¿²¿·ÖÅäÖÿÉÄÜÐèÒªÐ޸ġ£

×¢£ºÔÚÒÑÓеÄgradleÏîÄ¿À¾¡Á¿Ê¹ÓÃÉú³ÉµÄgradlewÕâ¸öwrapper£¬ÒòΪËü»á×Ô¶¯ÏÂÔØ¶ÔÓ¦°æ±¾µÄGradle£¬Ò²¾ÍÊÇ˵ÍŶӺÏ×÷µÄÆäËûÈË¿ª·¢»úÉÏÊDz»ÐèÒªÊÖ¶¯°²×°GradleµÄ£¬²¢ÇÒwrapperÒ²Èôó¼ÒµÄGradle°æ±¾Ò»Ö£¬±ÜÃâÎÊÌâ¡£

3£¬gradle½Å±¾ÐÞ¸Ä

ÉÏÃæÖ´ÐÐÍêÖ®ºó£¬»·¾³ÒѾ­×¼±¸ºÃÁË£¬ÏÖÔÚÒª×öµÄ¾ÍÊÇÐ޸Ĺ¹½¨½Å±¾£º

ÒòΪÒѾ­Í¨¹ýgit submodule°Ñ¹«¹²ÏîÄ¿·Åµ½¶ÀÁ¢Ä¿Â¼£¨deps/Common£©ÁË£¬²¢ÇÒËü±¾ÉíÒ²ÊǶÀÁ¢¿É¹¹½¨µÄÏîÄ¿£¬ÄÇôҲ¾ÍÊÇ˵µ±Ç°ÓÐÁ½¸öÏîÄ¿ÁË£¬Ò»¸öÊǵ±Ç°project£¬Ò»¸öÊÇCommonÏîÄ¿£¬Òª×öµÄ¾ÍÊǸæËßgradle£¬Òª¶àÏîÄ¿¹¹½¨£¬±à¼­settings.gradle£¬Ôö¼ÓÏîÄ¿ÅäÖãº

include "deps:Common"

ÒÔÉϾÍÊǰÑCommonÒýÈëµ½µ±Ç°ÏîÄ¿ÁË¡£

¸ù¾ÝÏîÄ¿µÄ²»Í¬£¬È»ºó¶ÔÓ¦ÐÞ¸Äbuild.gradle£¬¾Í´ó¹¦¸æ³ÉÁË¡£¿´Ò»¸öÀý×Ó£º

// ÕâÒ»¶ÎÖ÷ÒªÊǰѹ«¹²¿âCommonµÄ¹¹½¨½Å±¾ÒýÈ룬ÒòΪһ°ã»áÓÐͨÓõÄÅäÖÃÔÚÀïÃæ
def userGradleScript = file("deps/Common/build.gradle")
if (userGradleScript.exists()) {
apply from: userGradleScript
}
// ʹÓÃwar²å¼þ£¬ÕâÑù¾ÍĬÈÏÒýÈëÁËjava²å¼þ
apply plugin: 'war'
// for jetty
apply plugin: 'jetty'
stopKey = 'yourStopKey' // ×Ô¶¨ÒåµÄstopkey
stopPort = xxxx // Í£Ö¹¶Ë¿Ú
httpPort = xxxx // Æô¶¯http¶Ë¿Ú

// ÏîÄ¿ÊôÐÔ
group = 'yourApp'
version = '1.0.0'
description = """ÕâÀïÃèÊöÄãµÄÏîÄ¿"""


// checkstyle configÎļþµØÖ·
checkstyle {
configFile = file("deps/Common/config/checkstyle/checkstyle.xml")
}
// libÒÀÀµ
dependencies {
// ÒÀÀµ¹«¹²¿âCommon£¬compileÊǺÍmavenÀïµÄcompile scopeÒ»Ñù
compile project(':deps:Common')
compile 'commons-validator:commons-validator:1.4.0'
compile('javax.servlet.jsp.jstl:jstl-api:1.2') {
exclude(module: 'servlet-api') // ·ÀÖ¹°æ±¾³åÍ»
}
compile 'javax.persistence:persistence-api:1.0.2'
runtime 'mysql:mysql-connector-java:5.1.26'
providedCompile 'org.apache.tomcat:tomcat-servlet-api:7.0.30'
// providedCompile Õâ¸öconfÔÚjava²å¼þÀïÊDZ¨´íµÄ£¬warÀïÊÇÕýÈ·µÄ
providedCompile 'javax.servlet.jsp:jsp-api:2.1'
...
}

ÎÒÃÇÔÙÀ´¼òµ¥¿´Ï¹«¹²ÏîÄ¿CommonµÄ¹¹½¨½Å±¾£º

// ¶¨ÒåÒ»¶Ñ»ù´¡²å¼þ
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: "jacoco"
apply plugin: 'checkstyle'
apply plugin: 'pmd'
apply plugin: 'findbugs'
apply plugin: 'eclipse'
apply plugin: 'idea'
// ¶¨ÒåÏîÄ¿ÊôÐÔ
group = 'Common'
version = '1.0.0'
description = """Giant common library"""

// ¶¨ÒåÒÀÀµ²Ö¿â
repositories {
mavenCentral()
}
// projectµÄ¶îÍâÊôÐÔ£¬ÕâÀïÓÃÓÚ¶¨ÒåprofileÊôÐÔ£¬Ä£ÄâmavenµÄprofile
ext {
if (project.hasProperty('profile')) {
profile = project['profile']
} else {
profile = "dev"
}
println "profile:" + profile
}
// ¶îÍâÔö¼Ósource path
sourceSets {
main {
resources {
srcDir "src/main/profiles/${profile}"
}
}
}
// projectÒÀÀµ
dependencies {
compile 'ch.qos.logback:logback-core:1.0.13'
compile 'ch.qos.logback:logback-classic:1.0.13'
compile 'ch.qos.logback:logback-access:1.0.13'
compile 'commons-io:commons-io:2.0.1'
compile 'commons-lang:commons-lang:2.6'
compile 'joda-time:joda-time:1.6.2'
compile 'org.testng:testng:6.8.7'
compile 'com.googlecode.jmockit:jmockit:1.5'
...
}
// taskÅäÖÃ
checkstyle {
ignoreFailures = true
sourceSets = [sourceSets.main]
}
findbugs {
ignoreFailures = true
sourceSets = [sourceSets.main]
}
pmd {
ruleSets = ["basic", "braces", "design"]
ignoreFailures = true
sourceSets = [sourceSets.main]
}
jacocoTestReport {
reports {
xml.enabled true
html.enabled true
csv.enabled false
}
sourceSets sourceSets.main
}
tasks.withType(Compile) {
options.encoding = "UTF-8"
}
test {
useTestNG()
jacoco {
excludes = ["org.*"]
}
}

ÕâÑù£¬¾Í¿ÉÒÔÔÚ¹«¹²ÏîÄ¿ÀïÅäÖúÃÒ»¶Ñ»ù´¡µÄtask£¬dependenciesµÈµÈ£¬¶øÊ¹ÓÃÕâ¸ö¹«¹²ÏîÄ¿µÄÆäËüÏîÄ¿Ôò¿ÉÒÔÖ±½ÓʹÓã¬ÎÞÐèÔÙ¶îÍâÅäÖá£

4£¬run

½Å±¾ÐÞ¸ÄÍêÁË£¬¾Í¿ÉÒÔ¿ªÊ¼¹¹½¨ÁË£¨²»ÐèÒª°²×°gradle£¬Ö±½ÓʹÓÃÉú³ÉµÄgradlew¾ÍÐУ©£º

./gradlew build

// »ùÓÚprofile¹¹½¨
./gradlew -Pprofile=dev build

³£Óù¹½¨ÃüÁ

clean£ºÇå³ý֮ǰµÄ¹¹½¨

test£ºÖ´ÐвâÊÔ

compileJava£º±àÒëjava

check£ºÔÚtestÖ®ºó×öÒ»¸öcheck£¬Ò»°ã´úÂë¼ì²é²å¼þ£¬¶¼ÊÇÔÚÕâ¸ö½×¶Î×öµÄ

build£º¹¹½¨´ò°ü

×ܽá

Ëæ×Ź«Ë¾ÒµÎñµÄ·¢Õ¹£¬Èí¼þϵͳ±äµÃÈÕÒæ¸´ÔÓºÍÅÓ´ó£¬Õâ¾ÍÒªÇóÓиüÁé»î¡¢¸ü¸ßЧµÄ¹¹½¨ÏµÍ³À´Ö§³Å¡£ÏÖ´ú¹¹½¨ÏµÍ³GradleÌṩÁËÇ¿´óµÄ¹¦ÄÜ¡¢¼ò½àµÄÓï·¨¡¢Áé»îµÄÅäÖã¬ÄÜÊÊÓ¦¸÷ÖÖ¸´ÔӵĹ¹½¨»·¾³¡£ÀûÓöàproject¹¹½¨£¬ÈÃÕû¸öϵͳģ¿é»¯£¬¹ÜÀí¸ü¸ßЧ¡£

   
3757 ´Îä¯ÀÀ       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