Maven極簡入門指南(二)手動(dòng)創(chuàng)建maven項(xiàng)目hellomaven
之前講過Maven介紹及環(huán)境搭建,介紹了maven的作用和如何搭建maven環(huán)境。接下來就以一個(gè)helloworld的例子來說一說如何創(chuàng)建maven項(xiàng)目以及maven項(xiàng)目的項(xiàng)目結(jié)構(gòu),最后講maven如何編譯運(yùn)行項(xiàng)目。
一、創(chuàng)建Maven項(xiàng)目
其實(shí)所謂創(chuàng)建Maven項(xiàng)目,說白了就是創(chuàng)建一個(gè)符合Maven約定的項(xiàng)目骨架,也就是項(xiàng)目目錄。這些項(xiàng)目的目錄可以手動(dòng)創(chuàng)建,也可以用maven插件。這里我就介紹使用archetype插件自動(dòng)建立目錄。
首先,創(chuàng)建項(xiàng)目存放的目錄(例如d:\maven_project),然后打開終端或者命令行并切換到d:\maven_project目錄下,執(zhí)行以下Maven命令:
mvn archetype:generate -DgroupId=com.weiz.hellomaven -DartifactId=hello-maven-test -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false參數(shù)說明
groupId :用戶定義package命名空間artifactId:創(chuàng)建的項(xiàng)目名稱命令輸出情況:
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 -Dgroovy.source.encoding=UTF-8[INFO] Scanning for projects.....省略輸出.[INFO] Parameter: basedir, Value: D:\maven_project[INFO] Parameter: package, Value: com.weiz.hellomaven[INFO] Parameter: groupId, Value: com.weiz.hellomaven[INFO] Parameter: artifactId, Value: hello-maven-test[INFO] Parameter: packageName, Value: com.weiz.hellomaven[INFO] Parameter: version, Value: 1.0-SNAPSHOT[INFO] project created from Old (1.x) Archetype in dir: D:\maven_project\hello-maven-test[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 4.039 s[INFO] Finished at: 2020-05-23T16:40:59+08:00[INFO] ------------------------------------------------------------------------
注意:如果是剛安裝的Maven,第一次創(chuàng)建項(xiàng)目時(shí)可能需要一段時(shí)間,因?yàn)镸aven需要從網(wǎng)上下載大部分最近的artifacts (plugin jars and other files)到你的本地倉庫。如果失敗了,再執(zhí)行一次該命令即可。
輸出了“BUILD SUCCESS”時(shí)表示項(xiàng)目創(chuàng)建成功了,創(chuàng)建一個(gè)hello-maven-test的項(xiàng)目。

二、Maven項(xiàng)目結(jié)構(gòu)
1、項(xiàng)目結(jié)構(gòu)
maven工程與以往的java工程目錄結(jié)構(gòu)有所不同,以往的java工程目錄目錄一般只有一個(gè)src用于存放包及java文件,而maven工程目錄長這樣:
$ MavenProject|-- pom.xml|-- src| |-- main| | `-- java| | `-- resources| `-- test| | `-- java| | `-- resources
一般將java的功能代碼,放在main/java下面,而測試代碼放在test/java下,這樣在運(yùn)行時(shí),maven才可以識別目錄并進(jìn)行編譯。
src/main/java - 存放項(xiàng)目.java文件;
src/main/resources - 存放項(xiàng)目資源文件;
src/test/java - 存放測試類.java文件;
src/test/resources - 存放測試資源文件;
target - 項(xiàng)目輸出目錄;
pom.xml - Maven核心文件(Project Object Model)
2、pom文件
POM文件代表工程對象模型(Project Object Model)它是使用Maven工作的基本組件,位于工程根目錄。POM文件支持繼承。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.weiz.hellomaven</groupId><artifactId>hello-maven-test</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>hello-maven-test</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies></project>
3、maven 坐標(biāo)
maven 的所有構(gòu)件均通過坐標(biāo)進(jìn)行組織和管理。maven 的坐標(biāo)通過 5 個(gè)元素進(jìn)行定義,其中 groupId、artifactId、version 是必須的,packaging 是可選的(默認(rèn)為jar),classifier 是不能直接定義的。
groupId這是工程組的標(biāo)示,它在一個(gè)組織或項(xiàng)目中通常是唯一的,例如,上述項(xiàng)目中com.weiz.hellomaven擁有所有當(dāng)前組織的項(xiàng)目。
artifactId當(dāng)前工程標(biāo)識。通常是工程的名稱,如上述中的hello-maven-test。groupId和artifactId一起定位了當(dāng)前項(xiàng)目的倉庫中的位置信息
version工程版本號,如:com.weiz.hellomaven:hello-maven-test:1.0-SNAPSHOT
三、編譯、運(yùn)行
上面講了項(xiàng)目的目錄結(jié)構(gòu),已經(jīng)如何創(chuàng)建項(xiàng)目,那么怎么項(xiàng)目怎么編譯、運(yùn)行呢?
1、編譯
打開控制臺,進(jìn)入到新創(chuàng)建的工程的目錄下,執(zhí)行命令:mvn compile

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< com.weiz.hellomaven:hello-maven-test >----------------
[INFO] Building hello-maven-test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------.
.省略輸出
.
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.923 s
[INFO] Finished at: 2020-05-23T17:41:56+08:00
[INFO] ------------------------------------------------------------------------
輸出了“BUILD SUCCESS”時(shí)表示項(xiàng)目編譯成功。項(xiàng)目編譯成功后會(huì)在項(xiàng)目下生成一個(gè)target文件夾,里面存放編譯后的文件。
2、運(yùn)行測試類
編譯成功后執(zhí)行mvn test命令,運(yùn)行測試類:mvn test

[INFO] Scanning for projects...
.
省略輸出
.
.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.weiz.hellomaven.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 sec
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 -Dgroovy.source.encoding=UTF-8
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.131 s
[INFO] Finished at: 2020-05-23T17:53:57+08:00
[INFO] ------------------------------------------------------------------------
輸出信息里會(huì)顯示單元測試的成功,失敗數(shù)。
四、Maven常用命令
來看一下maven幾個(gè)常用的構(gòu)建命令,格式為mvn xxx。
| 命令 | 功能 | 備注 |
| mvn compile | 編譯源代碼 | 這個(gè)過程會(huì)下載工程所有依賴的jar包 |
| mvn clean | 清理環(huán)境 | 清理target目錄 |
| mvn test | 執(zhí)行單元測試用例 | |
| mvn install | 安裝jar包到本地倉庫 | |
| mvn dependency:tree | 樹型顯示maven依賴關(guān)系 | 用于排查依賴沖突的問題 |
| mvn dependency:list | 顯示maven依賴列表 | |
| mvn package | 打包,將java工程打成jar包或war包 |
除了以上命令之外,還有之前介紹的查看maven版本的命令:mvn -v 。
最后
以上,用hellomaven為例,首先介紹了如何創(chuàng)建maven項(xiàng)目、然后maven項(xiàng)目的結(jié)構(gòu),最后將如何編譯運(yùn)行maven項(xiàng)目。是不是特別簡單。雖然簡單,但這是所有開發(fā)者必學(xué)必會(huì)的基礎(chǔ)技能。請大家關(guān)注(架構(gòu)師精進(jìn))!
推薦閱讀:
