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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
GradleÈëÃÅϵÁУ¨ÉÏ£©
 
À´Ô´£º²®ÀÖÔÚÏß ·¢²¼ÓÚ 2015-9-7
  3142  次浏览      27
 

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£¬ÔÚÃüÁîÌáʾ·ûÖÐÊäÈëÒÔÏÂÃüÁ

brew install 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£©£º

apply plugin: '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ÎļþÖУº

apply plugin: 'java'

¾ÍÊÇÕâÑù£¬ÏÖÔÚÎÒÃÇÒѾ­´´½¨ÁËÒ»¸ö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

ÕâÊÇÒ»¸öºÜºÃµÄ·½Ê½£¬²»ÐèÒªÔĶÁ¹¹½¨½Å±¾£¬¾ÍÄܶÔÄãµÄÏîÄ¿½øÐдóÖµÄä¯ÀÀ£¬Èç¹ûÎÒÃÇÔÚÏîÄ¿¸ùĿ¼ÏÂÔËÐÐÕâ¸öÃüÁÎÒÃÇ¿ÉÒÔ¿´µ½ÒÔÏÂÊä³ö£º

> 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

µ±²âÊÔͨ¹ýʱ£¬ÎÒÃÇÄÜ¿´µ½ÈçÏÂÊä³ö£º

> 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Îļþ¡£

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