Maven實(shí)現(xiàn)項(xiàng)目構(gòu)建工具
1.Maven介紹
1.1Maven是什么
Maven項(xiàng)目對(duì)象模型(POM),可以通過(guò)一小段描述信息來(lái)管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的項(xiàng)目管理工具軟件。
Maven 除了以程序構(gòu)建能力為特色之外,還提供高級(jí)項(xiàng)目管理工具。由于 Maven 的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行 Maven 構(gòu)建腳本就可以構(gòu)建簡(jiǎn)單的項(xiàng)目。由于 Maven 的面向項(xiàng)目的方法,許多 Apache Jakarta 項(xiàng)目發(fā)文時(shí)使用 Maven,而且公司項(xiàng)目采用 Maven 的比例在持續(xù)增長(zhǎng)。
Maven這個(gè)單詞來(lái)自于意第緒語(yǔ)(猶太語(yǔ)),意為知識(shí)的積累,最初在Jakata Turbine項(xiàng)目中用來(lái)簡(jiǎn)化構(gòu)建過(guò)程。當(dāng)時(shí)有一些項(xiàng)目(有各自Ant build文件),僅有細(xì)微的差別,而JAR文件都由CVS來(lái)維護(hù)。于是希望有一種標(biāo)準(zhǔn)化的方式構(gòu)建項(xiàng)目,一個(gè)清晰的方式定義項(xiàng)目的組成,一個(gè)容易的方式發(fā)布項(xiàng)目的信息,以及一種簡(jiǎn)單的方式在多個(gè)項(xiàng)目中共享JARs
知識(shí)點(diǎn)總結(jié):
Maven項(xiàng)目對(duì)象模型(POM) 主要管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的項(xiàng)目管理工具軟件。
1.2為什么要使用maven
由于 Java 的生態(tài)非常豐富,無(wú)論你想實(shí)現(xiàn)什么功能,都能找到對(duì)應(yīng)的工具類,這些工具類都是以 jar包的形式出現(xiàn)的,例如 Spring,SpringMVC、MyBatis、數(shù)據(jù)庫(kù)驅(qū)動(dòng),等等,都是以 jar包的形式出現(xiàn)的,jar包之間會(huì)有關(guān)聯(lián),在使用一個(gè)依賴之前,還需要確定這個(gè)依賴所依賴的其他依賴,所以,當(dāng)項(xiàng)目比較大的時(shí)候,依賴管理會(huì)變得非常麻煩臃腫,這是 Maven 解決的第一個(gè)問(wèn)題。
Maven 還可以處理多模塊項(xiàng)目。簡(jiǎn)單的項(xiàng)目,單模塊分包處理即可,如果項(xiàng)目比較復(fù)雜,要做成多模塊項(xiàng)目,例如一個(gè)電商項(xiàng)目有訂單模塊、會(huì)員模塊、商品模塊、支付模塊...,一般來(lái)說(shuō),多模塊項(xiàng)目,每一個(gè)模塊無(wú)法獨(dú)立運(yùn)行,要多個(gè)模塊合在一起,項(xiàng)目才可以運(yùn)行,這個(gè)時(shí)候,借助 Maven 工具,可以實(shí)現(xiàn)項(xiàng)目的一鍵打包。
Maven 之前,我們更多的是使用Ant的項(xiàng)目構(gòu)建工具,Ant 有一個(gè)特點(diǎn),每次都得寫,每次都寫的差不多,配置也臃腫。所以,后來(lái)搞出來(lái)Maven。Maven就是最先進(jìn)的版本構(gòu)建工具嗎?不是的,只不過(guò),目前在 Java 領(lǐng)域 Maven 使用比較多。除了 Maven,還有 Gradle。
2.Maven安裝
Maven是 Java項(xiàng)目,因此必須先安裝 JDK。
2.1下載Maven:
下載地址:http://maven.apache.org/download.cgi
2.2解壓并配置
bin: 該目錄包含了mvn運(yùn)行的腳本,分別為mvn、mvn.bat、mvnDebug、mvnDebug.bat和m2.conf,這些腳本用來(lái)配置 Java 命令,準(zhǔn)備 CLASSPATH 和相關(guān)的 Java 系統(tǒng)屬性,然后執(zhí)行 Java 命令
boot: 該目錄只包含一個(gè)文件,以maven 3.0為例,該文件為plexus-classworlds-2.2.3.jar。plexus-classworlds是一個(gè)類加載器框架,相對(duì)于默認(rèn)的 Java 類加載器,它提供了更豐富的語(yǔ)法以方便配置,Maven 使用該框架加載自己的類庫(kù)。
conf: 該目錄包含了要給非常重要的文件settings.xml。直接修改該文件,就能再機(jī)器上全局地定制 Maven 的行為。一般情況下,我們更偏向于復(fù)制該文件至/.m2/目錄下(表示用戶目錄),然后修改該文件,在用戶范圍定制 Maven 的行為。
lib: 該目錄包含了所有 Maven 運(yùn)行時(shí)需要的 Java 類庫(kù),Maven 本身是分模塊開發(fā)的,因此用戶能看到諸如maven-core-3.0.jar和maven-model-3.0.jar之類的文件。
LICENSE: 該文件記錄了 Maven 使用的軟件許可證
NOTICE:該文件記錄了 Maven 包含的第三方軟件。
README.txt: 該文件則包含了 Maven 的簡(jiǎn)要介紹,包括安裝需求以及如何安裝的簡(jiǎn)要指令等。
2.3編輯Maven環(huán)境變量
2.3.1檢查JDK環(huán)境變量
1.配置Java_Home環(huán)境變量
2.通過(guò)DOS命令窗口 檢查配置是否有效
2.3.2 配置maven_home環(huán)境變量
1.配置MAVEN_HOME
2.配置環(huán)境變量
3.檢查Maven是否有效 重啟DOS窗口
3.Maven配置
實(shí)際上,沒(méi)有特殊需求的話,安裝好之后直接就可以用了。一般來(lái)說(shuō),還是需要稍微配置一下,比如中央倉(cāng)庫(kù)的問(wèn)題。Maven默認(rèn)使用自己的中央倉(cāng)庫(kù),使用起來(lái)網(wǎng)速比較慢,這個(gè)時(shí)候,可以通過(guò)修改配置文件,將倉(cāng)庫(kù)改成國(guó)內(nèi)的鏡像倉(cāng)庫(kù),國(guó)內(nèi)倉(cāng)庫(kù)使用較多的是阿里巴巴的倉(cāng)庫(kù)。
3.1倉(cāng)庫(kù)類型
倉(cāng)庫(kù)類型 說(shuō)明 | |
---|---|
本地倉(cāng)庫(kù) | 就是你自己電腦上的倉(cāng)庫(kù),每個(gè)人電腦上都有一個(gè)倉(cāng)庫(kù),默認(rèn)位置在當(dāng)前用戶名\.m2\repository |
私服倉(cāng)庫(kù) | 一般來(lái)說(shuō)是公司內(nèi)部搭建的 Maven私服,處于局域網(wǎng)中,訪問(wèn)速度較快,這個(gè)倉(cāng)庫(kù)中存放的 jar一般就是公司內(nèi)部自己開發(fā)的 jar |
中央倉(cāng)庫(kù) | 由 Apache團(tuán)隊(duì)來(lái)維護(hù),包含了大部分的 jar,早期不包含Oracle數(shù)據(jù)庫(kù)驅(qū)動(dòng),從 2019年 8月開始,包含了 Oracle 驅(qū)動(dòng) |
現(xiàn)在存了三個(gè)倉(cāng)庫(kù),那么jar包如何查找呢?
3.2本地倉(cāng)庫(kù)配置
本地倉(cāng)庫(kù)默認(rèn)位置在當(dāng)前用戶名\.m2\repository
,這個(gè)位置可以自定義,但是不建議大家自定義這個(gè)地址,有幾個(gè)原因:
- 雖然所有的本地的 jar都放在這個(gè)倉(cāng)庫(kù)中,但是并不會(huì)占用很大的空間。
- 默認(rèn)的位置比較隱蔽,不容易碰到
技術(shù)上來(lái)說(shuō),當(dāng)然是可以自定義本地倉(cāng)庫(kù)位置的,在 conf/settings.xml中自定義本地倉(cāng)庫(kù)位置:
<localRepository>f:\My-Maven-Repository</localRepository>
3.3遠(yuǎn)程鏡像配置
由于默認(rèn)的中央倉(cāng)庫(kù)下載較慢,因此,也可以將遠(yuǎn)程倉(cāng)庫(kù)地址改為阿里巴巴的鏡像倉(cāng)庫(kù)地址:
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror>
這段配置,加在 settings.xml中的 mirrors節(jié)點(diǎn)中:
4.Maven常用命令
Maven中有一些常見的命令,如果使用Eclipse需要手動(dòng)敲命令,如果使用 IDEA的話,可以不用命令,直接點(diǎn)點(diǎn)點(diǎn)就可以了
常用命令 中文含義 說(shuō)明 | ||
mvn clean | 清理 | 這個(gè)命令可以用來(lái)清理已經(jīng)編譯好的文件 |
mvn compile | 編譯 | 將 Java代碼編譯成Class文件 |
mvn test | 測(cè)試 | 項(xiàng)目測(cè)試 |
mvn package | 打包 | 根據(jù)用戶的配置,將項(xiàng)目打成 jar包或者 war包 |
mvn install | 安裝/部署 | 手動(dòng)向本地倉(cāng)庫(kù)安裝一個(gè) jar |
mvn deploy | 上傳 | 將 jar上傳到私服 |
這里需要注意的是,這些命令都不是獨(dú)立運(yùn)行的,它有一個(gè)順序。舉個(gè)簡(jiǎn)單例子:
我想將jar上傳到私服,那么就要構(gòu)建jar,就需要執(zhí)行package命令,要打包,當(dāng)然也需要測(cè)試,那就要走mvn test 命令,要測(cè)試就要先編譯.............................. ,因此,最終所有的命令都會(huì)執(zhí)行一遍。不過(guò),開發(fā)者也可以手動(dòng)配置不執(zhí)行某一個(gè)命令,這就是跳過(guò)。一般來(lái)說(shuō),除了測(cè)試,其他步驟都不建議跳過(guò)。
當(dāng)然,如果開發(fā)者使用了 IDEA,這些命令不用手動(dòng)敲,點(diǎn)一下就行:
1.validate 驗(yàn)證工程是否正確,所有需要的資源是否可用。 命令: mvn validate
2.compile 將文件由.java文件編譯為.class文件 動(dòng)態(tài)生成target文件目錄 命令: mvn compile
3.clean 清空target文件目錄 命令: mvn clean
4.test 執(zhí)行測(cè)試方法是否正確 命令: mvn test
5.package 將項(xiàng)目的target文件打包為jar包文件 命令: mvn package
6.verify 對(duì)集成測(cè)試的結(jié)果進(jìn)行檢查,以保證質(zhì)量達(dá)標(biāo) 命令: mvn verify
7.install 安裝打包的項(xiàng)目到本地倉(cāng)庫(kù),以供其他項(xiàng)目使用 命令: mvn install
8.site 項(xiàng)目站點(diǎn)文檔創(chuàng)建的處理 命令: mvn site
9.deploy 拷貝最終的工程包到遠(yuǎn)程倉(cāng)庫(kù)中,以共享給其他開發(fā)人員和工程 (了解 用不到)
4.1 通過(guò)命令來(lái)構(gòu)建項(xiàng)目
可以直接通過(guò)命令來(lái)構(gòu)建一個(gè) Maven項(xiàng)目,不過(guò)在實(shí)際開發(fā)中,一般使用Eclipse或者 IDEA就可以直接創(chuàng)建 Maven項(xiàng)目了。創(chuàng)建命令:
mvn archetype:generate
需要注意:第一次使用該命令,會(huì)先下載構(gòu)建項(xiàng)目所需的jar包
項(xiàng)目創(chuàng)建成功后,就兩個(gè)文件:
說(shuō)明對(duì)一個(gè)任何一個(gè)項(xiàng)目而言,最最核心的就是這兩個(gè)。
pom.xml中,則定義了所有的項(xiàng)目配置
4.2 對(duì)項(xiàng)目進(jìn)行打包
接下來(lái),我們通過(guò)mvn package
命令可以將剛剛創(chuàng)建的項(xiàng)目打成一個(gè) jar包。
在打包之前,需要配置JDK的版本至少為 7以上,因此,我們還需要手動(dòng)修改一下pom.xml 文件,即添加如下配置:
<!-- java版本 --> <profile> <id>jdk-11</id> <activation> <activeByDefault>true</activeByDefault> <jdk>11</jdk> </activation> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <maven.compiler.compilerVersion>11</maven.compiler.compilerVersion> </properties> </profile>
執(zhí)行打包命令,注意執(zhí)行所有命令時(shí),命令行要定位到 pom.xml文件所在的目錄,看到如下提示,表示項(xiàng)目打包成功。
4.3 將項(xiàng)目安裝到本地倉(cāng)庫(kù)
如果需要將項(xiàng)目安裝到本地倉(cāng)庫(kù),可以直接執(zhí)行 mvn install
命令,注意,mvn install
命令會(huì)包含上面的 mvn package
過(guò)程。
安裝到本地倉(cāng)庫(kù)之后,這個(gè)時(shí)候,點(diǎn)開自己的本地倉(cāng)庫(kù),就可以看到相關(guān)的 jar了。
到此這篇關(guān)于Maven實(shí)現(xiàn)項(xiàng)目構(gòu)建工具的文章就介紹到這了,更多相關(guān)Maven項(xiàng)目構(gòu)建工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例
本文將結(jié)合實(shí)例代碼,介紹SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06詳解Java數(shù)據(jù)庫(kù)連接JDBC基礎(chǔ)知識(shí)(操作數(shù)據(jù)庫(kù):增刪改查)
這篇文章主要介紹了詳解Java數(shù)據(jù)庫(kù)連接JDBC基礎(chǔ)知識(shí)(操作數(shù)據(jù)庫(kù):增刪改查),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Flowable?ReceiveTask使用場(chǎng)景分析
這篇文章主要為大家介紹了Flowable?ReceiveTask使用場(chǎng)景分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法
這篇文章主要介紹了IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Java8 Lambda表達(dá)式模板方法實(shí)現(xiàn)解析
這篇文章主要介紹了Java8 Lambda表達(dá)式模板方法實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法
本文主要介紹了mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02使用Java實(shí)現(xiàn)類似Comet風(fēng)格的web app
這篇文章主要介紹了使用Java實(shí)現(xiàn)類似Comet風(fēng)格的web app的方法,包括客戶端的響應(yīng)和XML解析等功能,需要的朋友可以參考下2015-11-11