例子:HelloWorld
創(chuàng)建
用mvn插件archetype創(chuàng)建helloworld項目:
egao$?mvn archetype:generate?-DgroupId=com.ellie.helloworld -DartifactId=helloworld -Dpackage=com.ellie.helloworld -Dversion=1.0-SNAPSHOT
項目的默認目錄結(jié)構(gòu)如下(除非特別定制还绘,maven項目都遵循這種慣例):
egao$ cd helloworld
egao$ ll
total 0
-rw-r--r--? 1 egao? staff? 762 Dec 28 10:24?pom.xml
drwxr-xr-x? 4 egao? staff? 136 Dec 28 10:24?src
編譯打包
"mvn package"捐晶,將執(zhí)行mvn默認生命周期中從開始到package 階段(包括default-resources瓷叫,default-compile,default-testResources逢倍,default-testCompile,default-test景图,default-jar)的所有任務较雕。
egao$ mvn package
[INFO] Scanning for projects...
...
[INFO] Building helloworld 1.0-SNAPSHOT
...
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---
...
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---
...
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ helloworld ---
...
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ helloworld ---
...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ helloworld ---
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ helloworld ---
...
[INFO] BUILD SUCCESS
...
構(gòu)建后會生成target目錄,class文件和jar文件位于該目錄:
egao$ ll
total 8
-rw-r--r-- 1 egao staff 762 Dec 28 10:24 pom.xml
drwxr-xr-x 4 egao staff 136 Dec 28 10:24 src
drwxr-xr-x 8 egao staff 272 Dec 28 14:08 target
egao$ java -cp target/helloworld-1.0-SNAPSHOT.jar com.ellie.helloworld.App
Hello World!
Maven概念解析
POM
項目坐標:groupId+artifactId+version+packaging
子項目會繼承父項目的pom症歇。所有pom都繼承自一個super pom郎笆。
通過mvn help:effective-pom可以查看構(gòu)建時真正使用的pom。
插件和生命周期
maven控制構(gòu)建過程(生命周期)忘晤,構(gòu)建過程的每個具體步驟是交給插件執(zhí)行的宛蚓。
以HelloWorld為例,它使用默認的生命周期设塔。
process-resources 階段:resources:resources
compile 階段:compiler:compile
process-classes 階段:(默認無目標)
process-test-resources 階段:resources:testResources
test-compile 階段:compiler:testCompile
test 階段:surefire:test
prepare-package 階段:(默認無目標)
package 階段:jar:jar
在HelloWorld的構(gòu)建過程中凄吏,maven-compiler-plugin這個插件使用了兩次:編譯業(yè)務代碼(compile階段,compiler:compile)闰蛔,編譯測試代碼(test-compile階段痕钢,compiler:testCompile)。
依賴管理
依賴傳遞:項目依賴A.jar, A.jar又依賴B.jar序六,項目只需定義對A的依賴任连。maven會根據(jù)A的pom文件自動下載B
依賴的scope:決定了依賴關系的適用范圍。默認是compile例诀,任何時候都會被包含在 classpath 中随抠,包括打包。test scope只有在test階段才會起作用繁涂。provided scope在打包時不起作用拱她,它表示運行環(huán)境會提供這個依賴的jar
庫
public的maven項目可以從默認的maven庫下載:http://repo.maven.org/maven2
maven下載的jar在本地默認存放在~/.m2/repository中。
maven 查找需要的 jar 文件時扔罪,會先在本地找秉沼,然后去遠程庫找。