GradleÈëÃÅϵÁУ¨1£©£º¼ò½é
GradleÊÇÒ»ÖÖ¹¹½¨¹¤¾ß£¬ËüÅׯúÁË»ùÓÚXMLµÄ¹¹½¨½Å±¾£¬È¡¶ø´úÖ®µÄÊDzÉÓÃÒ»ÖÖ»ùÓÚGroovyµÄÄÚ²¿ÁìÓòÌØ¶¨ÓïÑÔ¡£½üÆÚ£¬Gradle»ñµÃÁ˼«´óµÄ¹Ø×¢£¬ÕâÒ²ÊÇÎÒ¾ö¶¨È¥Ñо¿GradleµÄÔÒò¡£
ÕâÆªÎÄÕÂÊÇGradle½Ì³ÌµÄµÚһƪ£¬ÎÒÃÇÓÐÁ½¸öÄ¿±ê£º
1. °ïÖúÎÒÃÇѧ»á°²×°Gradle¡£
2. ½éÉÜһЩ»ù±¾¸ÅÄÕâÓÐÖúÓÚÎÒÃǽøÒ»²½Àí½â±¾½Ì³ÌµÄºóÃæÕ½ڡ£
ÎÒÃÇ¿ªÊ¼°É£¬ÏÈ¿´Ò»ÏÂÈçºÎ°²×°Gradle¡£
°²×°Gradle
Èç¹ûÎÒÃÇʹÓõIJÙ×÷ϵͳÊÇWindows»òLinux£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÒÔϲ½Öè°²×°Gradle£º
1. ´ÓÕâ¸öÒ³ÃæÏÂÔØ¶þ½øÖÆÎļþ¡£
2. ½âѹZipÎļþ£¬¼ÓÈë»·¾³±äÁ¿£¨ÔÚPATHÖмÓÈëGRADLE_HOME/binĿ¼£©¡£
Èç¹ûÔÚ°²×°¹ý³ÌÖÐÓöµ½ÎÊÌ⣬¿ÉÒÔ½øÒ»²½²é¿´¹Ù·½µÄ°²×°Ö¸ÄÏ¡£
Èç¹ûÎÒÃÇʹÓõIJÙ×÷ϵͳÊÇOS X£¬ÎÒÃÇ¿ÉÒÔʹÓÃHomebrew°²×°Gradle£¬ÔÚÃüÁîÌáʾ·ûÖÐÊäÈëÒÔÏÂÃüÁ
ÎÒÃÇ¿ÉÒÔÑéÖ¤Ò»ÏÂGradleÊÇ·ñ¹¤×÷Õý³££¬ÔÚÃüÁîÌáʾ·ûÖÐÖ´ÐÐÃüÁîgradle -v¼´¿É£¬Èç¹ûGradle¹¤×÷Õý³££¬ÎÒÃÇÓ¦¸ÃÄÜ¿´µ½ÒÔÏÂÊä³ö½á¹û£¨µ±È»£¬WindowsºÍLinuxÓû§¿´µ½µÄ½á¹û»áÓÐϸ΢²îÒ죩¡£
> gradle -v ------------------------------------------------------------ Gradle 1.12 ------------------------------------------------------------ Build time: 2014-04-29 09:24:31 UTC Build number: none Revision: a831fa866d46cbee94e61a09af15f9dd95987421 Groovy: 1.8.6 Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013 Ivy: 2.2.0 JVM: 1.8.0 (Oracle Corporation 25.0-b70) OS: Mac OS X 10.9.3 x86_64 |
ÏÂÃæÎÒÃÇÀ´¿ìËÙä¯ÀÀÒ»ÏÂGradle¹¹½¨µÄ»ù±¾¸ÅÄî¡£
Gradle¹¹½¨¼ò½é
ÔÚGradleÖУ¬ÓÐÁ½¸ö»ù±¾¸ÅÄÏîÄ¿ºÍÈÎÎñ¡£Çë¿´ÒÔÏÂÏê½â£º
ÏîÄ¿ÊÇÖ¸ÎÒÃǵĹ¹½¨²úÎ±ÈÈçJar°ü£©»òʵʩ²úÎ½«Ó¦ÓóÌÐò²¿Êðµ½Éú²ú»·¾³£©¡£Ò»¸öÏîÄ¿°üº¬Ò»¸ö»ò¶à¸öÈÎÎñ¡£
ÈÎÎñÊÇÖ¸²»¿É·ÖµÄ×îС¹¤×÷µ¥Ôª£¬Ö´Ðй¹½¨¹¤×÷£¨±ÈÈç±àÒëÏîÄ¿»òÖ´ÐвâÊÔ£©¡£
ÄÇô£¬ÕâЩ¸ÅÄîºÍGradleµÄ¹¹½¨ÓÖÓÐʲôÁªÏµÄØ£¿ºÃ£¬Ã¿Ò»´ÎGradleµÄ¹¹½¨¶¼°üº¬Ò»¸ö»ò¶à¸öÏîÄ¿¡£
ÏÂÃæÕâÕÅͼչʾÁËÉÏÃæËù̸µ½µÄÕâЩ¸ÅÄîµÄ¹ØÏµ¡£

ÎÒÃÇÄܹ»Ê¹ÓÃÒÔÏÂÅäÖÃÎļþ¶ÔGradleµÄ¹¹½¨½øÐÐÅäÖãº
Gradle¹¹½¨½Å±¾£¨build.gradle£©Ö¸¶¨ÁËÒ»¸öÏîÄ¿ºÍËüµÄÈÎÎñ¡£
GradleÊôÐÔÎļþ£¨gradle.properties£©ÓÃÀ´ÅäÖù¹½¨ÊôÐÔ¡£
GradleÉèÖÃÎļþ£¨gradle.settings£©¶ÔÓÚÖ»ÓÐÒ»¸öÏîÄ¿µÄ¹¹½¨¶øÑÔÊÇ¿ÉÑ¡µÄ£¬Èç¹ûÎÒÃǵĹ¹½¨Öаüº¬¶àÓÚÒ»¸öÏîÄ¿£¬ÄÇôËü¾ÍÊDZØÐëµÄ£¬ÒòΪËüÃèÊöÁËÄÄÒ»¸öÏîÄ¿²ÎÓë¹¹½¨¡£Ã¿Ò»¸ö¶àÏîÄ¿µÄ¹¹½¨¶¼±ØÐëÔÚÏîÄ¿½á¹¹µÄ¸ùĿ¼ÖмÓÈëÒ»¸öÉèÖÃÎļþ¡£
Äã¿ÉÒÔÔÚÕâÆªÎÄÕÂÖлñµÃ¸ü¶à¹ØÓÚGradle¹¹½¨½Å±¾µÄÐÅÏ¢¡£
ÎÒÃǼÌÐø£¬ÏÂÃæÎÒÃÇ¿´Ò»ÏÂÈç¹ûʹÓÃGradle²å¼þΪ¹¹½¨¹¤×÷¼ÓÈëй¦ÄÜ¡£
¸ü¼ò¶ÌµÄGradle²å¼þ¼ò½é
GradleµÄÉè¼ÆÀíÄîÊÇ£¬ËùÓÐÓÐÓõÄÌØÐÔ¶¼ÓÉGradle²å¼þÌṩ£¬Ò»¸öGradle²å¼þÄܹ»£º
1.ÔÚÏîÄ¿ÖÐÌí¼ÓÐÂÈÎÎñ
2.ΪмÓÈëµÄÈÎÎñÌṩĬÈÏÅäÖã¬Õâ¸öĬÈÏÅäÖûáÔÚÏîÄ¿ÖÐ×¢ÈëеÄÔ¼¶¨£¨ÈçÔ´ÎļþλÖã©¡£
3.¼ÓÈëеÄÊôÐÔ£¬¿ÉÒÔ¸²¸Ç²å¼þµÄĬÈÏÅäÖÃÊôÐÔ¡£
4.ΪÏîÄ¿¼ÓÈëеÄÒÀÀµ¡£
GradleÓû§ÊÖ²áÌṩÁËһϵÁбê×¼Gradle²å¼þ¡£
ÔÚÎÒÃÇΪÏîÄ¿¼ÓÈëGradle²å¼þʱ£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÃû³Æ»òÀàÐÍÀ´Ö¸¶¨Gradle²å¼þ¡£
ÎÒÃÇ¿ÉÒÔ½«ÏÂÃæÕâÐдúÂë¼ÓÈëµ½build.gradleÎļþÖУ¬Ëüͨ¹ýÃû³ÆÖ¸¶¨Gradle²å¼þ£¨ÕâÀïµÄÃû³ÆÊÇfoo£©£º
ÁíÒ»·½Ã棬ÎÒÃÇÒ²¿ÉÒÔͨ¹ýÀàÐÍÖ¸¶¨Gradle²å¼þ£¬½«ÏÂÃæÕâÐдúÂë¼ÓÈëµ½build.gradleÎļþÖУ¨ÕâÀïµÄÀàÐÍÊÇcom.bar.foo£©£º
apply plugin: 'com.bar.foo' |
Äã¿ÉÒÔÔĶÁÕâÆªÎÄÕ£¬ÕÆÎÕÓ¦Óòå¼þµÄ¸ü¶àÐÅÏ¢¡£
½ñÌì¾Íµ½ÕâÀÎÒÃÇÀ´×ܽáÒ»ÏÂÎÒÃÇËùѧµÄÄÚÈÝ¡£
×ܽá
ÕâÆª½Ì³Ì½²ÊÚÁËÈý²¿·ÖÄÚÈÝ£º
ÎÒÃÇѧ»áÁËÈçºÎ°²×°Gradle
ÎÒÃÇÀí½âÁËGradle¹¹½¨µÄһЩ»ù±¾ÖªÊ¶
ÎÒÃÇÁ˽âÁËÈçºÎʹÓÃGradle²å¼þΪÎÒÃǵĹ¹½¨¹¤×÷Ôö¼Ó¹¦ÄÜ¡£
GradleÈëÃÅϵÁУ¨2£©£ºµÚÒ»¸öJavaÏîÄ¿
ÕâÆª½Ì³ÌµÄÖ÷ÒªÄÚÈÝÊǽ²½âÈçºÎÓÃGradle±àÒëºÍ´ò°üÒ»¸ö¼òµ¥µÄJavaÏîÄ¿¡£
¸ÃJavaÏîĿֻÓÐÒ»¸öÐèÇó£ºÎÒÃǵĹ¹½¨½Å±¾±ØÐë´´½¨Ò»¸ö¿ÉÖ´ÐеÄJarÎļþ£¬»»¾ä»°Ëµ£¬ÎÒÃDZØÐëÄܹ»Ê¹ÓÃÃüÁîjava
-jar jarfile.jar À´ÔËÐÐÎÒÃǵijÌÐò¡£ÎÒÃÇÀ´¿´Ò»ÏÂÈçºÎÂú×ãÕâ¸öÐèÇó¡£
´´½¨Ò»¸öJavaÏîÄ¿
ÎÒÃÇ¿ÉÒÔʹÓÃJava²å¼þ£¨Òë×¢£º¹ØÓÚGradle²å¼þµÄ¶¨Ò壬Çë²é¿´µÚһƪ½Ì³Ì£©À´´´½¨Ò»¸öJavaÏîÄ¿£¬ÎªÁË×öµ½Õâµã£¬ÎÒÃÇÐèÒª°ÑÏÂÃæÕâ¶ÎÓï¾ä¼ÓÈëµ½build.gradleÎļþÖУº
¾ÍÊÇÕâÑù£¬ÏÖÔÚÎÒÃÇÒѾ´´½¨ÁËÒ»¸öJavaÏîÄ¿¡£Java²å¼þ»áÔÚÎÒÃǵĹ¹½¨ÖÐÌí¼ÓһЩеÄÔ¼¶¨£¨ÈçĬÈϵÄÏîÄ¿½á¹¹£©£¬ÐµÄÈÎÎñ£¬ºÍеÄÊôÐÔ¡£
ÈÃÎÒÃÇÀ´¿ìËٵؿ´Ò»ÏÂĬÈϵÄÏîÄ¿½á¹¹¡£
JavaÏîÄ¿½á¹¹
ĬÈϵÄÏîÄ¿½á¹¹ÈçÏ£º
src/main/javaĿ¼°üº¬ÁËÏîÄ¿µÄÔ´´úÂë¡£
src/main/resourcesĿ¼°üº¬ÁËÏîÄ¿µÄ×ÊÔ´£¨ÈçÊôÐÔÎļþ£©¡£
src/test/javaĿ¼°üº¬Á˲âÊÔÀà¡£
src/test/resourcesĿ¼°üº¬Á˲âÊÔ×ÊÔ´¡£ËùÓÐÎÒÃǹ¹½¨Éú³ÉµÄÎļþ¶¼»áÔÚbuildĿ¼Ï±»´´½¨£¬Õâ¸öĿ¼º¸ÇÁËÒÔϵÄ×ÓĿ¼£¬ÕâЩ×ÓĿ¼ÎÒÃÇ»áÔÚÕâÆª½Ì³ÌÖÐÌáµ½£¬ÁíÍ⻹ÓÐһЩ×ÓĿ¼ÎÒÃÇ»á·ÅÔÚÒԺ󽲽⡣
classesĿ¼°üº¬±àÒë¹ýµÄ.classÎļþ¡£
libsĿ¼°üº¬¹¹½¨Éú³ÉµÄjar»òwarÎļþ¡£
Ϊ¹¹½¨¼ÓÈëÒ»¸öÖ÷Àࣨmain class£©
ÈÃÎÒÃÇ´´½¨Ò»¸ö¼òµ¥µÄÖ÷À࣬ÔÚÕâ¸öÀàÖлá´òÓ¡Ò»¸ö¡°Hello world¡±È»ºóSystem.out³öÀ´¡£Õâ¸öHelloWorldÀàµÄÔ´´úÂëÈçÏ£º
package net.petrikainulainen.gradle; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } |
HelloWorldÀà´æ·ÅÔÚsrc/main/java/net/petrikainulainen/gradleĿ¼
ÕâºÜºÃ£¬È»¶ø£¬ÎÒÃÇ»¹ÐèÒª±àÒëºÍ´ò°üÎÒÃǵÄÏîÄ¿£¬²»ÊÇÂð£¿ÎÒÃÇÏÈ¿´Ò»ÏÂÕâ¸öJava¹¤³ÌÖеÄÈÎÎñ¡£
Java¹¤³ÌÖеÄÈÎÎñ
Java²å¼þÔÚÎÒÃǵĹ¹½¨ÖмÓÈëÁ˺ܶàÈÎÎñ£¬ÎÒÃÇÕâÆª½Ì³ÌÉæ¼°µ½µÄÈÎÎñÈçÏ£º
assembleÈÎÎñ»á±àÒë³ÌÐòÖеÄÔ´´úÂ룬²¢´ò°üÉú³ÉJarÎļþ£¬Õâ¸öÈÎÎñ²»Ö´Ðе¥Ôª²âÊÔ¡£
buildÈÎÎñ»áÖ´ÐÐÒ»¸öÍêÕûµÄÏîÄ¿¹¹½¨¡£
cleanÈÎÎñ»áɾ³ý¹¹½¨Ä¿Â¼¡£
compileJavaÈÎÎñ»á±àÒë³ÌÐòÖеÄÔ´´úÂë¡£
ÎÒÃÇ»¹¿ÉÒÔÖ´ÐÐÒÔÏÂÃüÁîµÃµ½Ò»¸ö¿ÉÔËÐÐÈÎÎñ¼°ÆäÃèÊöµÄÍêÕûÁбí
ÕâÊÇÒ»¸öºÜºÃµÄ·½Ê½£¬²»ÐèÒªÔĶÁ¹¹½¨½Å±¾£¬¾ÍÄܶÔÄãµÄÏîÄ¿½øÐдóÖµÄä¯ÀÀ£¬Èç¹ûÎÒÃÇÔÚÏîÄ¿¸ùĿ¼ÏÂÔËÐÐÕâ¸öÃüÁÎÒÃÇ¿ÉÒÔ¿´µ½ÒÔÏÂÊä³ö£º
> gradle tasks :tasks ------------------------------------------------------------ All tasks runnable from root project ------------------------------------------------------------ Build tasks ----------- assemble - Assembles the outputs of this project. build - Assembles and tests this project. buildDependents - Assembles and tests this project and all projects that depend on it. buildNeeded - Assembles and tests this project and all projects it depends on. classes - Assembles classes 'main'. clean - Deletes the build directory. jar - Assembles a jar archive containing the main classes. testClasses - Assembles classes 'test'. Build Setup tasks ----------------- init - Initializes a new Gradle build. [incubating] wrapper - Generates Gradle wrapper files. [incubating] Documentation tasks ------------------- javadoc - Generates Javadoc API documentation for the main source code. Help tasks ---------- dependencies - Displays all dependencies declared in root project 'first-java-project'. dependencyInsight - Displays the insight into a specific dependency in root project 'first-java-project'. help - Displays a help message projects - Displays the sub-projects of root project 'first-java-project'. properties - Displays the properties of root project 'first-java-project'. tasks - Displays the tasks runnable from root project 'first-java-project'. Verification tasks ------------------ check - Runs all checks. test - Runs the unit tests. Rules ----- Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration. Pattern: upload<ConfigurationName>: Assembles and uploads the artifacts belonging to a configuration. Pattern: clean<TaskName>: Cleans the output files of a task. To see all tasks and more detail, run with --all. BUILD SUCCESSFUL Total time: 2.792 secs |
ÎÒÃǼÌÐø£¬ÏÂÃæÒª½²ÔõÑù´ò°üÎÒÃǵÄÏîÄ¿¡£
´ò°üÎÒÃǵÄÏîÄ¿
ÎÒÃÇ¿ÉÒÔͨ¹ýʹÓÃÁ½¸ö²»Í¬µÄÈÎÎñÀ´´ò°üÏîÄ¿¡£
Èç¹ûÎÒÃÇÔÚÃüÁîÌáʾ·ûÖÐÖ´ÐÐÃüÁîgradle assemble£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÒÔÏÂÊä³ö£º
> gradle assemble :compileJava :processResources :classes :jar :assemble BUILD SUCCESSFUL Total time: 3.163 secs |
Èç¹ûÎÒÃÇÔÚÃüÁîÌáʾ·ûÖÐÖ´ÐÐÃüÁîgradle build£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÒÔÏÂÊä³ö£º
> gradle build :compileJava :processResources :classes :jar :assemble :compileTestJava :processTestResources :testClasses :test :check :build BUILD SUCCESSFUL Total time: 3.01 secs |
ÕâЩÃüÁîµÄÊä³ö±íÃ÷ÁËËüÃǵÄÇø±ð£º
assembleÈÎÎñ½ö½öÖ´ÐÐÏîÄ¿´ò°üËù±ØÐëµÄÈÎÎñ¼¯¡£
buildÈÎÎñÖ´ÐÐÏîÄ¿´ò°üËù±ØÐëµÄÈÎÎñ¼¯£¬ÒÔ¼°Ö´ÐÐ×Ô¶¯»¯²âÊÔ¡£ÕâÁ½¸öÃüÁî¶¼»áÔÚbuild/libsĿ¼Öд´½¨Ò»¸öfile-java-project.jarÎļþ¡£Ä¬ÈÏ´´½¨µÄJarÎļþÃû³ÆÊÇÓÉÕâ¸öÄ£°æ¾ö¶¨µÄ£º[projectname].jar£¬´ËÍ⣬ÏîÄ¿µÄĬÈÏÃû³ÆºÍÆäËù´¦µÄĿ¼Ãû³ÆÊÇÒ»Öµġ£Òò´ËÈç¹ûÄãµÄÏîĿĿ¼Ãû³ÆÊÇfirst-java-project£¬ÄÇô´´½¨µÄJarÎļþÃû³Æ¾ÍÊÇfirst-java-project.jar¡£
ÏÖÔÚ£¬ÎÒÃdz¢ÊÔʹÓÃÒÔÏÂÃüÁîÔËÐÐÎÒÃǵijÌÐò£º
java -jar first-java-project.jar |
ÎÒÃÇ¿ÉÒÔ¿´µ½ÒÔÏÂÊä³ö£º
> java -jar first-java.project.jar No main manifest attribute, in first-java-project.jar |
ÎÊÌâ³öÔÚ£¬ÎÒÃÇûÓÐÔÚmanifestÎļþÖÐÅäÖÃJarÎļþµÄÖ÷À࣬ÈÃÎÒÃǼÌÐø¿´¿´ÔõÑù½â¾öÕâ¸öÎÊÌâ¡£
ÅäÖÃJarÎļþµÄÖ÷Àà
Java²å¼þÔÚÎÒÃǵÄÏîÄ¿ÖмÓÈëÁËÒ»¸öJarÈÎÎñ£¬Ã¿Ò»¸öJar¶ÔÏó¶¼Ò»¸ömanifestÊôÐÔ£¬Õâ¸öÊôÐÔÊÇManifestµÄÒ»¸öʵÀý¡£
ÎÒÃÇ¿ÉÒÔ¶ÔÉú³ÉµÄJarÎļþµÄÖ÷Àà½øÐÐÅäÖã¬Ê¹ÓÃManifest½Ó¿ÚµÄattributes()·½·¨¡£»»¾ä»°Ëµ£¬ÎÒÃÇ¿ÉÒÔʹÓÃÒ»¸ö°üº¬¼üÖµ¶ÔµÄmap½á¹¹Ö¸¶¨¼ÓÈëµ½manifestÎļþµÄÊôÐÔ¼¯¡£
ÎÒÃÇÄܹ»Í¨¹ýÉèÖÃMain-ClassÊôÐÔµÄÖµ£¬Ö¸¶¨ÎÒÃdzÌÐòµÄÈë¿Úµã¡£ÔÚÎÒÃǶÔbuild.gradleÎļþ½øÐбØÒªµÄ¸Ä¶¯ºó£¬´úÂëÈçÏ£º
apply plugin: 'java' jar { manifest { attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld' } } |
£¨JavaSE½Ì³ÌÌṩÁ˹ØÓÚmanifestÎļþµÄ¸ü¶àÐÅÏ¢¡££©
ÔÚÎÒÃÇÖ´ÐÐgradle assemble»ògradle buildÃüÁîÉú³ÉÒ»¸öеÄjarÎļþÖ®ºó£¬ÎÒÃÇ¿ÉÒÔÖ´ÐÐÒÔÏÂÃüÁîÔËÐÐjarÎļþ£º
java -jar first-java-project.jar |
µ±ÎÒÃÇÔËÐгÌÐòʱ£¬System.out»á´òÓ¡³öÒÔÏÂÐÅÏ¢£º
> java -jar first-java-project.jar Hello World! |
Õâ¾ÍÊÇÎÒÃǽñÌìËùÓеÄÄÚÈÝ£¬ÎÒÃÇ¿´Ò»ÏÂÎÒÃÇѧµ½ÁËʲô¡£
×ܽá
ÎÒÃÇÒѾͨ¹ýGradle´´½¨ÁËÒ»¸ö¼òµ¥µÄJavaÏîÄ¿£¬ÕâÆª½Ì³Ì½Ì»áÁËÎÒÃÇËĵ㣺
ÎÒÃÇÁ˽âÁË¿ÉÒÔʹÓÃGradleµÄJava²å¼þ´´½¨Ò»¸öJavaÏîÄ¿¡£
ÎÒÃÇÖªµÀÁËJavaÏîÄ¿µÄĬÈϽṹºÍMavenÏîÄ¿µÄĬÈϽṹÊÇÒ»ÑùµÄ¡£
ÎÒÃÇÖªµÀÁ˹¹½¨ËùÉú³ÉµÄËùÓÐÎļþ¶¼ÄÜÔÚbuildĿ¼ÏÂÕÒµ½¡£
ÎÒÃÇÖªµÀÁËÎÒÃÇ¿ÉÒÔ×Ô¶¨Òå¼ÓÈëµ½manifestÎļþÖеÄÊôÐÔ¡£
GradleÈëÃÅϵÁУ¨3£©£ºÒÀÀµ¹ÜÀí
ÔÚÏÖʵÉú»îÖУ¬Òª´´ÔìÒ»¸öûÓÐÈκÎÍⲿÒÀÀµµÄÓ¦ÓóÌÐò²¢·Ç²»¿ÉÄÜ£¬µ«Ò²ÊǼ«¾ßÌôÕ½µÄ¡£ÕâÒ²ÊÇΪʲôÒÀÀµ¹ÜÀí¶ÔÓÚÿ¸öÈí¼þÏîÄ¿¶¼ÊÇÖÁ¹ØÖØÒªµÄÒ»²¿·Ö¡£
ÕâÆª½Ì³ÌÖ÷Òª½²ÊöÈçºÎʹÓÃGradle¹ÜÀíÎÒÃÇÏîÄ¿µÄÒÀÀµ£¬ÎÒÃÇ»áѧϰÅäÖÃÓ¦ÓòֿâÒÔ¼°ËùÐèµÄÒÀÀµ£¬ÎÒÃÇÒ²»áÀíÂÛÁªÏµÊµ¼Ê£¬ÊµÏÖÒ»¸ö¼òµ¥µÄÑÝʾ³ÌÐò¡£
ÈÃÎÒÃÇ¿ªÊ¼°É¡£
²Ö¿â¹ÜÀí¼ò½é
±¾ÖÊÉÏ˵£¬²Ö¿âÊÇÒ»ÖÖ´æ·ÅÒÀÀµµÄÈÝÆ÷£¬Ã¿Ò»¸öÏîÄ¿¶¼¾ß±¸Ò»¸ö»ò¶à¸ö²Ö¿â¡£
GradleÖ§³ÖÒÔϲֿâ¸ñʽ£º
Ivy²Ö¿â
Maven²Ö¿â
Flat directory²Ö¿â
ÎÒÃÇÀ´¿´Ò»Ï£¬¶ÔÓÚÿһÖÖ²Ö¿âÀàÐÍ£¬ÎÒÃÇÔÚ¹¹½¨ÖÐÓ¦¸ÃÈçºÎÅäÖá£
ÔÚ¹¹½¨ÖмÓÈëIvy²Ö¿â
ÎÒÃÇ¿ÉÒÔͨ¹ýURLµØÖ·»ò±¾µØÎļþϵͳµØÖ·£¬½«Ivy²Ö¿â¼ÓÈëµ½ÎÒÃǵĹ¹½¨ÖС£
Èç¹ûÏëͨ¹ýURLµØÖ·Ìí¼ÓÒ»¸öIvy²Ö¿â£¬ÎÒÃÇ¿ÉÒÔ½«ÒÔÏ´úÂëÆ¬¶Î¼ÓÈëµ½build.gradleÎļþÖУº
repositories { ivy { url "http://ivy.petrikainulainen.net/repo" } } |
Èç¹ûÏëͨ¹ý±¾µØÎļþϵͳµØÖ·Ìí¼ÓÒ»¸öIvy²Ö¿â£¬ÎÒÃÇ¿ÉÒÔ½«ÒÔÏ´úÂëÆ¬¶Î¼ÓÈëµ½build.gradleÎļþÖУº
repositories { ivy { url "../ivy-repo" } } |
ÎÒÃǼÌÐø£¬ÏÂÃæÊÇÈçºÎÔÚ¹¹½¨ÖмÓÈëMaven²Ö¿â¡£
ÔÚ¹¹½¨ÖмÓÈëMaven²Ö¿â
ÓëIvy²Ö¿âºÜÀàËÆ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýURLµØÖ·»ò±¾µØÎļþϵͳµØÖ·£¬½«Maven²Ö¿â¼ÓÈëµ½ÎÒÃǵĹ¹½¨ÖС£
Èç¹ûÏëͨ¹ýURLµØÖ·Ìí¼ÓÒ»¸öMaven²Ö¿â£¬ÎÒÃÇ¿ÉÒÔ½«ÒÔÏ´úÂëÆ¬¶Î¼ÓÈëµ½build.gradleÎļþÖУº
repositories { maven { url "http://maven.petrikainulainen.net/repo" } } |
Èç¹ûÏëͨ¹ý±¾µØÎļþϵͳµØÖ·Ìí¼ÓÒ»¸öMaven²Ö¿â£¬ÎÒÃÇ¿ÉÒÔ½«ÒÔÏ´úÂëÆ¬¶Î¼ÓÈëµ½build.gradleÎļþÖУº
repositories { maven { url "../maven-repo" } } |
ÔÚ¼ÓÈëMaven²Ö¿âʱ£¬GradleÌṩÁËÈýÖÖ¡°±ðÃû¡±¹©ÎÒÃÇʹÓã¬ËüÃÇ·Ö±ðÊÇ£º
mavenCentral()±ðÃû£¬±íʾÒÀÀµÊÇ´ÓCentral Maven
2 ²Ö¿âÖлñÈ¡µÄ¡£
jcenter()±ðÃû£¬±íʾÒÀÀµÊÇ´ÓBintary¡¯s JCenter
Maven ²Ö¿âÖлñÈ¡µÄ¡£
mavenLocal()±ðÃû£¬±íʾÒÀÀµÊÇ´Ó±¾µØµÄMaven²Ö¿âÖлñÈ¡µÄ¡£
Èç¹ûÎÒÃÇÏëÒª½«Central Maven 2 ²Ö¿â¼ÓÈëµ½¹¹½¨ÖУ¬ÎÒÃDZØÐëÔÚbuild.gradleÎļþÖмÓÈëÒÔÏ´úÂëÆ¬¶Î£º
repositories { mavenCentral() } |
ÎÒÃǼÌÐø£¬ÏÂÃæÊÇÈçºÎÔÚ¹¹½¨ÖмÓÈëFlat Directory²Ö¿â¡£
ÔÚ¹¹½¨ÖмÓÈëFlat Directory²Ö¿â
Èç¹ûÎÒÃÇÏëҪʹÓÃFlat Directory²Ö¿â£¬ÎÒÃÇÐèÒª½«ÒÔÏ´úÂëÆ¬¶Î¼ÓÈëµ½build.gradleÎļþÖÐ
repositories { flatDir { dirs 'lib' } } |
ÕâÒâζ×Åϵͳ½«ÔÚlibĿ¼ÏÂËÑË÷ÒÀÀµ£¬Í¬ÑùµÄ£¬Èç¹ûÄãÔ¸ÒâµÄ»°¿ÉÒÔ¼ÓÈë¶à¸öĿ¼£¬´úÂëÆ¬¶ÎÈçÏ£º
repositories { flatDir { dirs 'libA', 'libB' } } |
ÎÒÃǼÌÐø£¬ÏÂÃæÒª½²µÄÊÇ£¬ÈçºÎʹÓÃGradle¹ÜÀíÏîÄ¿ÖеÄÒÀÀµ¡£
ÒÀÀµ¹ÜÀí¼ò½é
ÔÚÅäÖÃÍêÏîÄ¿²Ö¿âºó£¬ÎÒÃÇ¿ÉÒÔÉùÃ÷ÆäÖеÄÒÀÀµ£¬Èç¹ûÎÒÃÇÏëÒªÉùÃ÷Ò»¸öеÄÒÀÀµ£¬¿ÉÒÔ²ÉÓÃÈçϲ½Ö裺
Ö¸¶¨ÒÀÀµµÄÅäÖá£
ÉùÃ÷ËùÐèµÄÒÀÀµ¡£
ÈÃÎÒÃÇ¿´Ò»ÏÂÏêϸ²½Ö裺
ÅäÖÃÖеÄÒÀÀµ·ÖÀà
ÔÚGradleÖУ¬ÒÀÀµÊǰ´ÕÕÖ¸¶¨Ãû³Æ½øÐзÖÀàµÄ£¬ÕâЩ·ÖÀà±»³ÆÎªÅäÖÃÏÎÒÃÇ¿ÉÒÔʹÓÃÅäÖÃÏîÉùÃ÷ÏîÄ¿µÄÍⲿÒÀÀµ¡£
Java²å¼þÖ¸¶¨ÁËÈô¸ÉÒÀÀµÅäÖÃÏÆäÃèÊöÈçÏ£º
µ±ÏîÄ¿µÄÔ´´úÂë±»±àÒëʱ£¬compileÅäÖÃÏîÖеÄÒÀÀµÊDZØÐëµÄ¡£
runtimeÅäÖÃÏîÖаüº¬µÄÒÀÀµÔÚÔËÐÐʱÊDZØÐëµÄ¡£
testCompileÅäÖÃÏîÖаüº¬µÄÒÀÀµÔÚ±àÒëÏîÄ¿µÄ²âÊÔ´úÂëʱÊDZØÐëµÄ¡£
testRuntimeÅäÖÃÏîÖаüº¬µÄÒÀÀµÔÚÔËÐвâÊÔ´úÂëʱÊDZØÐëµÄ¡£
archivesÅäÖÃÏîÖаüº¬ÏîÄ¿Éú³ÉµÄÎļþ£¨ÈçJarÎļþ£©¡£
defaultÅäÖÃÏîÖаüº¬ÔËÐÐʱ±ØÐëµÄÒÀÀµ¡£
ÎÒÃǼÌÐø£¬ÏÂÃæÊÇÈçºÎÔÚÏîÄ¿ÖÐÉùÃ÷ÒÀÀµ¡£
ÉùÃ÷ÏîÄ¿ÒÀÀµ
×îÆÕ±éµÄÒÀÀµ³ÆÎªÍⲿÒÀÀµ£¬ÕâЩÒÀÀµ´æ·ÅÔÚÍⲿ²Ö¿âÖС£Ò»¸öÍⲿÒÀÀµ¿ÉÒÔÓÉÒÔÏÂÊôÐÔÖ¸¶¨£º
groupÊôÐÔÖ¸¶¨ÒÀÀµµÄ·Ö×飨ÔÚMavenÖУ¬¾ÍÊÇgroupId£©¡£
nameÊôÐÔÖ¸¶¨ÒÀÀµµÄÃû³Æ£¨ÔÚMavenÖУ¬¾ÍÊÇartifactId£©¡£
versionÊôÐÔÖ¸¶¨ÍⲿÒÀÀµµÄ°æ±¾£¨ÔÚMavenÖУ¬¾ÍÊÇversion£©¡£
СÌùÊ¿£ºÕâЩÊôÐÔÔÚMaven²Ö¿âÖÐÊDZØÐëµÄ£¬Èç¹ûÄãʹÓÃÆäËû²Ö¿â£¬Ò»Ð©ÊôÐÔ¿ÉÄÜÊÇ¿ÉÑ¡µÄ¡£´ò¸ö±È·½£¬Èç¹ûÄãʹÓÃFlat
directory²Ö¿â£¬Äã¿ÉÄÜÖ»ÐèÒªÖ¸¶¨Ãû³ÆºÍ°æ±¾¡£
ÎÒÃǼÙÉèÎÒÃÇÐèÒªÖ¸¶¨ÒÔÏÂÒÀÀµ£º
ÒÀÀµµÄ·Ö×éÊÇfoo¡£
ÒÀÀµµÄÃû³ÆÊÇfoo¡£
ÒÀÀµµÄ°æ±¾ÊÇ0.1¡£
ÔÚÏîÄ¿±àÒëʱÐèÒªÕâЩÒÀÀµ¡£
ÎÒÃÇ¿ÉÒÔ½«ÒÔÏ´úÂëÆ¬¶Î¼ÓÈëµ½build.gradleÖУ¬½øÐÐÒÀÀµÉùÃ÷£º
dependencies { compile group: 'foo', name: 'foo', version: '0.1' } |
ÎÒÃÇÒ²¿ÉÒÔ²ÉÓÃÒ»ÖÖ¿ì½Ý·½Ê½ÉùÃ÷ÒÀÀµ£º[group]:[name]:[version]¡£Èç¹ûÎÒÃÇÏëÓÃÕâÖÖ·½Ê½£¬ÎÒÃÇ¿ÉÒÔ½«ÒÔÏ´úÂë¶Î¼ÓÈëµ½build.gradleÖУº
dependencies { compile 'foo:foo:0.1' } |
ÎÒÃÇÒ²¿ÉÒÔÔÚͬһ¸öÅäÖÃÏîÖмÓÈë¶à¸öÒÀÀµ£¬´«Í³µÄ·½Ê½ÈçÏ£º
dependencies { compile ( [group: 'foo', name: 'foo', version: '0.1'], [group: 'bar', name: 'bar', version: '0.1'] ) } |
Èç¹û²ÉÓÿì½Ý·½Ê½£¬ÄÇ¿ÉÒÔÊÇÕâÑù£º
dependencies { compile 'foo:foo:0.1', 'bar:bar:0.1' } |
×ÔÈ»µØ£¬ÉùÃ÷ÊôÓÚ²»Í¬ÅäÖÃÏîµÄÒÀÀµÒ²ÊÇ¿ÉÒԵġ£±ÈÈç˵£¬Èç¹ûÎÒÃÇÏëÒªÉùÃ÷ÊôÓÚcompileºÍtestCompileÅäÖÃÏîµÄÒÀÀµ£¬¿ÉÒÔÕâô×ö£º
dependencies { compile group: 'foo', name: 'foo', version: '0.1' testCompile group: 'test', name: 'test', version: '0.1' } |
ͬÑùµÄ£¬¸øÁ¦µÄ¿ì½Ý·½Ê½ÓÖÀ´ÁË(£þ¦á£þ)
dependencies { compile 'foo:foo:0.1' testCompile 'test:test:0.1' } |
ÎÒÃÇÒѾѧϰÁËÒÀÀµ¹ÜÀíµÄ»ù´¡ÖªÊ¶£¬ÏÂÃæÎÒÃÇÀ´ÊµÏÖÒ»¸öÑÝʾ³ÌÐò¡£
´´½¨ÑÝʾ³ÌÐò
ÑÝʾ³ÌÐòµÄÐèÇóÊÇÕâÑùµÄ£º
ÑÝʾ³ÌÐòµÄ¹¹½¨½Å±¾±ØÐëʹÓÃMaven central²Ö¿â¡£
ÑÝʾ³ÌÐò±ØÐëʹÓÃLog4jдÈëÈÕÖ¾¡£
ÑÝʾ³ÌÐò±ØÐë°üº¬°üº¬µ¥Ôª²âÊÔ£¬±£Ö¤ÕýÈ·µÄÐÅÏ¢·µ»Ø£¬µ¥Ôª²âÊÔ±ØÐëʹÓÃJUnit±àд¡£
ÑÝʾ³ÌÐò±ØÐë´´½¨Ò»¸ö¿ÉÖ´ÐеÄJarÎļþ¡£
ÎÒÃÇÀ´¿´Ò»ÏÂÔõÑùʵÏÖÕâЩÐèÇó¡£
ÅäÖòֿâ
ÎÒÃǵÄÑÝʾ³ÌÐòµÄÒ»¸öÐèÇóÊǹ¹½¨½Å±¾±ØÐëʹÓÃMaven central²Ö¿â£¬ÔÚÎÒÃÇʹÓÃMaven central²Ö¿âÅäÖù¹½¨½Å±¾ºó£¬Ô´´úÂëÈçÏ£º
apply plugin: 'java' repositories { mavenCentral() } jar { manifest { attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld' } } |
ÎÒÃÇÔÙÀ´¿´Ò»ÏÂÈçºÎ¶ÔÎÒÃǵÄÑÝʾ³ÌÐò½øÐÐÒÀÀµÉùÃ÷¡£
ÒÀÀµÉùÃ÷
ÔÚbuild.gradleÎļþÖУ¬ÎÒÃÇÉùÃ÷ÁËÁ½¸öÒÀÀµ£º
Log4j£¨°æ±¾1.2.17£©ÓÃÀ´¼Ç¼ÈÕÖ¾¡£
JUnit£¨°æ±¾4.11£©ÓÃÀ´±àдµ¥Ôª²âÊÔ¡£
ÔÚÎÒÃÇÉùÃ÷ÁËÕâЩÒÀÀµºó£¬build.gradleÎļþÊÇÕâÑùµÄ£º
apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'log4j:log4j:1.2.17' testCompile 'junit:junit:4.11' } jar { manifest { attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld' } } |
ÎÒÃǼÌÐø£¬ÉÔ΢¼ÓÈëһЩ´úÂë¡£
±àд´úÂë
ΪÁËʵÏÖÎÒÃÇÑÝʾ³ÌÐòµÄÐèÇ󣬡°ÎÒÃDz»µÃ²»¹ý¶È¹¤³Ì»¯Ò»Ï¡±£¬ÎÒÃǻᰴÕÕÏÂÁв½Öè´´½¨³ÌÐò£º
´´½¨Ò»¸öMessageServiceÀ࣬µ±ÆäÖеÄgetMessage()·½·¨±»µ÷ÓÃʱ£¬·µ»Ø×Ö·û´®¡°Hello
World!¡±¡£
´´½¨Ò»¸öMessageServiceTestÀ࣬ȷ±£MessageServiceÀàÖеÄgetMessage()·½·¨·µ»Ø×Ö·û´®¡°Hello
World!¡±¡£
´´½¨³ÌÐòµÄÖ÷À࣬´ÓMessageService¶ÔÏó»ñÈ¡ÐÅÏ¢£¬²¢Ê¹ÓÃLog4jдÈëÈÕÖ¾¡£
ÅäÖÃLog4j¡£
ÎÒÃǰ´²¿¾Í°àµÄ²Ù×÷һϡ£
Ê×ÏÈ£¬ÔÚsrc/main/java/net/petrikainulainen/gradleĿ¼ÏÂн¨Ò»¸öMessageServiceÀಢ¼ÓÒÔʵÏÖ£¬´úÂëÈçÏ£º
package net.petrikainulainen.gradle; public class MessageService { public String getMessage() { return "Hello World!"; } } |
Æä´Î£¬ÔÚsrc/main/test/net/petrikainulainen/gradleĿ¼ÏÂн¨Ò»¸öMessageServiceTestÀ࣬±àдµ¥Ôª²âÊÔ£¬´úÂëÈçÏ£º
package net.petrikainulainen.gradle; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class MessageServiceTest { private MessageService messageService; @Before public void setUp() { messageService = new MessageService(); } @Test public void getMessage_ShouldReturnMessage() { assertEquals("Hello World!", messageService.getMessage()); } } |
µÚÈý£¬ÔÚsrc/main/java/net/petrikainulainen/gradleĿ¼ÏÂн¨Ò»¸öHelloWorldÀ࣬ÕâÊdzÌÐòµÄÖ÷À࣬´ÓMessageService¶ÔÏó»ñÈ¡ÐÅÏ¢£¬²¢Ê¹ÓÃLog4jдÈëÈÕÖ¾£¬´úÂëÈçÏ£º
package net.petrikainulainen.gradle; import org.apache.log4j.Logger; public class HelloWorld { private static final Logger LOGGER = Logger.getLogger(HelloWorld.class); public static void main(String[] args) { MessageService messageService = new MessageService(); String message = messageService.getMessage(); LOGGER.info("Received message: " + message); } } |
µÚËÄ£¬ÔÚsrc/main/resourcesĿ¼ÖУ¬Ê¹ÓÃlog4j.propertiesÅäÖÃlog4j£¬log4j.propertiesÎļþÈçÏ£º
log4j.appender.Stdout=org.apache.log4j.ConsoleAppender log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout log4j.appender.Stdout.layout.conversionPattern=%-5p - %-26.26c{1} - %m\n log4j.rootLogger=DEBUG,Stdout |
ÕâÑù¾ÍºÃÁË£¬ÎÒÃÇ¿´¿´ÈçºÎÖ´ÐвâÊÔ¡£
Ö´ÐвâÊÔ
ÎÒÃÇ¿ÉÒÔͨ¹ýÒÔÏÂÃüÁîÖ´ÐвâÊÔ¡£
µ±²âÊÔͨ¹ýʱ£¬ÎÒÃÇÄÜ¿´µ½ÈçÏÂÊä³ö£º
> gradle test :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :test BUILD SUCCESSFUL Total time: 4.678 secs |
È»¶ø£¬Èç¹û²âÊÔʧ°Ü£¬ÎÒÃǽ«¿´µ½ÈçÏÂÊä³ö£º
> gradle test :compileJava :processResources :classes :compileTestJava :processTestResources :testClasses :test net.petrikainulainen.gradle.MessageServiceTest > getMessage_ShouldReturnMessageFAILED org.junit.ComparisonFailure at MessageServiceTest.java:22 1 test completed, 1 failed :test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at:
file:///Users/loke/Projects/Java/Blog/gradle-examples/dependency-management/build/reports/tests/index.html * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 4.461 secs |
ÕýÈçÎÒÃÇËù¿´µ½µÄ£¬Èç¹ûµ¥Ôª²âÊÔʧ°ÜÁË£¬Êä³öÐÅÏ¢Öн«ÃèÊöÒÔÏÂÐÅÏ¢£º
ÄÄÒ»¸ö²âÊÔʧ°ÜÁË¡£
Ö´ÐÐÁ˼¸¸ö²âÊÔ£¬ÆäÖм¸¸öʧ°ÜÁË¡£
²âÊÔ±¨¸æµÄλÖ㬲âÊÔ±¨¸æÌṩÁËʧ°Ü£¨»ò³É¹¦£©µÄ²âÊԵĶîÍâÐÅÏ¢¡£
µ±ÎÒÃÇÖ´Ðе¥Ôª²âÊÔʱ£¬Gradle»áÔÚÏàӦĿ¼´´½¨²âÊÔ±¨¸æ£º
build/test-resultsĿ¼°üº¬Ã¿´Î²âÊÔÖ´ÐеÄÔʼÊý¾Ý¡£
build/reports/testsĿ¼°üº¬Ò»¸öHTML±¨¸æ£¬ÃèÊöÁ˲âÊԵĽá¹û¡£
HTML²âÊÔ±¨¸æÊÇÒ»¸ö·Ç³£ÓÐÓõŤ¾ß£¬ÒòΪËüÃèÊöÁ˲âÊÔʧ°ÜµÄÔÒò¡£±ÈÈç˵£¬Èç¹ûÎÒÃǵĵ¥Ôª²âÊÔÈÏΪMessageServiceÀàÖеÄgetMessage()·½·¨·µ»Ø×Ö·û´®¡°Hello
Worl1d!¡±£¬ÄÇôHTML±¨¸æ¿´ÉÏÈ¥¾ÍÏñÏÂͼһÑù£º

ÎÒÃǼÌÐø£¬ÏÂÃæÊÇÈçºÎ´ò°üºÍÔËÐÐÎÒÃǵÄÑÝʾ³ÌÐò¡£
´ò°üºÍÔËÐгÌÐò
ÎÒÃÇÄܹ»¿ÉÒÔʹÓÃÒÔÏÂÈÎÒâÒ»ÖÖÃüÁî´ò°ü³ÌÐò£ºgradle assembly»ògradle build£¬ÕâÁ½¸öÃüÁî¶¼»áÔÚbuild/libsĿ¼Öд´½¨dependency-management.jarÎļþ¡£
µ±ÎÒÃÇʹÓÃjava -jar dependency-management.jarÃüÁîÔËÐÐÑÝʾ³ÌÐòʱ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÈçÏÂÊä³ö£º
> java -jar dependency-management.jar Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger at net.petrikainulainen.gradle.HelloWorld.<clinit>(HelloWorld.java:10) Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more |
Å׳öÒì³£µÄÔÒòÊÇ£¬µ±ÎÒÃÇÔËÐгÌÐòʱ£¬Log4jµÄÒÀÀµÔÚclasspathÖÐûÓÐÕÒµ½¡£
½â¾öÕâ¸öÎÊÌâ×î¼òµ¥µÄ·½Ê½ÊÇ´´½¨Ò»¸öËùνµÄ¡°ÅÖ¡±JarÎļþ£¬¼´°ÑËùÓгÌÐòÔËÐÐËùÐèµÄÒÀÀµ¶¼´ò°üµ½JarÎļþÖÐÈ¥¡£
ͨ¹ý²éÔÄGradle CookbookÖеĽ̳̣¬¿ÉÒÔÐ޸Ĺ¹½¨½Å±¾£¬ÈçÏ£º
apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'log4j:log4j:1.2.17' testCompile 'junit:junit:4.11' } jar { from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } manifest { attributes 'Main-Class': 'net.petrikainulainen.gradle.HelloWorld' } } |
ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔÔËÐÐÑÝʾ³ÌÐòÁË£¨´ò°üºó£©£¬Ò»ÇÐÕý³££º
> java -jar dependency-management.jar INFO - HelloWorld - Received message: Hello World! |
ÕâЩ¾ÍÊǽñÌìµÄÄÚÈÝÁË£¬ÎÒÃÇ×ܽáÒ»ÏÂѧµ½ÁËʲô¡£
×ܽá
ÕâÆª½Ì³Ì½Ì»áÁËÎÒÃÇËĸö·½ÃæµÄÄÚÈÝ£º
ÎÒÃÇѧ»áÁËÅäÖù¹½¨ËùÐèµÄ²Ö¿â¡£
ÎÒÃÇѧ»áÁËÈçºÎÉùÃ÷ËùÐèµÄÒÀÀµÒÔ¼°ÒÀÀµµÄ·ÖÀࣨ·Ö×飩¡£
ÎÒÃÇÁ˽âÁËGradle»áÔÚ²âÊÔÖ´Ðк󴴽¨Ò»¸öHTML²âÊÔ±¨¸æ¡£
ÎÒÃÇѧ»áÁË´´½¨Ò»¸öËùνµÄ¡°ÅÖ¡±JarÎļþ¡£
|