這篇文章主要介紹“Maven命令怎么使用”,在日常操作中,相信很多人在Maven命令怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Maven命令怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)專注于正藍(lán)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供正藍(lán)營銷型網(wǎng)站建設(shè),正藍(lán)網(wǎng)站制作、正藍(lán)網(wǎng)頁設(shè)計(jì)、正藍(lán)網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造正藍(lán)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供正藍(lán)網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
如何快速創(chuàng)建一個 Maven 項(xiàng)目,可以通過 Maven 的 Archetype 來進(jìn)行創(chuàng)建,Archetype 是 Maven 提供的各種各樣的工程模板,通過這些模板可以生成不同的 Maven 項(xiàng)目結(jié)構(gòu)。
Maven 提供的 Archetype 列表如下:
Archetype ArtifactIds | Description |
---|---|
maven-archetype-archetype | generate a sample archetype project. |
maven-archetype-j2ee-simple | generate a simplifed sample J2EE application. |
maven-archetype-mojo | generate a sample a sample Maven plugin. |
maven-archetype-plugin | generate a sample Maven plugin. |
maven-archetype-plugin-site | generate a sample Maven plugin site. |
maven-archetype-portlet | generate a sample JSR-268 Portlet. |
maven-archetype-quickstart | generate a sample Maven project. |
maven-archetype-simple | generate a simple Maven project. |
maven-archetype-site | generate a sample Maven site which demonstrates some of the supported document types like APT, XDoc, and FML and demonstrates how to i18n your site. |
maven-archetype-site-simple | generate a sample Maven site. |
maven-archetype-webapp | generate a sample Maven Webapp project. |
這里我們選擇 maven-archetype-quickstart
這個模板進(jìn)行快速創(chuàng)建,因?yàn)樗峁┝艘粋€標(biāo)準(zhǔn)的項(xiàng)目結(jié)構(gòu),基于這個基本項(xiàng)目結(jié)構(gòu)可以進(jìn)行后續(xù)擴(kuò)展。
project |-- pom.xml `-- src |-- main | `-- java | `-- $package | `-- App.java `-- test `-- java `-- $package `-- AppTest.java
1)通過 Maven 命令
Maven 提供了命令快速創(chuàng)建 Maven 項(xiàng)目:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4
命令中指定我們前面所說的 Maven Archetype:maven-archetype-quickstart
信息。
運(yùn)行過程中會提示讓你輸入項(xiàng)目的 Naven 坐標(biāo)信息,直到創(chuàng)建完成。基礎(chǔ)部分這里不撰述了,需要完整 Maven 教程的關(guān)注公眾號Java技術(shù)棧在后臺回復(fù)"mvn"獲取。
2)通過 IDEs
通過 IDE 也能快速創(chuàng)建 Maven 項(xiàng)目,現(xiàn)在 Java IDEs 都支持 Maven 或者自帶 Maven 插件,下面以 Intellij IDEA
為例進(jìn)行創(chuàng)建。
選擇 maven-archetype-quickstart
:
輸入項(xiàng)目的 Naven 坐標(biāo)信息:
選擇 Maven 及倉庫設(shè)置信息:
等待項(xiàng)目構(gòu)建完成,如下所示:
項(xiàng)目生成后,我們就可以把原系統(tǒng)的文件移到新的 Maven 項(xiàng)目了,因生成的項(xiàng)目結(jié)構(gòu)比較簡單,Maven 提供的 maven-archetype-webapp
模板也不符合要求:
我們的項(xiàng)目性質(zhì)又是后臺系統(tǒng),涉及到方方面面,所以還需要再完善其他資源目錄的創(chuàng)建:
- src - main - java - resources - filters - webapp - test - java - resources
這是一個比較標(biāo)準(zhǔn)的 Maven Web 項(xiàng)目結(jié)構(gòu),我把它弄成了一個基礎(chǔ)腳手架,還集成了各種現(xiàn)成的插件和功能,后面其他項(xiàng)目轉(zhuǎn) Maven 可以直接拿來套用。
已經(jīng)上傳到了 Github:
https://github.com/javastacks/maven-demo-project
主要目錄結(jié)構(gòu)介紹:
目錄 | 說明 |
---|---|
src/main/java | 源代碼目錄 |
src/main/resources | 資源目錄 |
src/main/filters | 多環(huán)境配置過濾目錄 |
src/main/webapp | Web應(yīng)用文件目 |
src/test/java | 測試代碼目錄 |
src/test/resources | 測試資源目錄 |
所有目錄創(chuàng)建完后,再根據(jù)文件性質(zhì)把原系統(tǒng)所有除了(*.jar)文件移到對應(yīng)的目錄,這里沒什么難度。
配置 Maven 環(huán)境信息:
src/main/filters/filter-${env}.properties src/main/resources/config true src/main/resources/resource false org.apache.maven.plugins maven-compiler-plugin ${maven-compiler-plugin.version} org.apache.maven.plugins maven-war-plugin ${maven-war-plugin.version} false dev true dev test test mirror mirror prod prod
依賴轉(zhuǎn)換就是要把所有原系統(tǒng)的(*.jar)依賴包全部轉(zhuǎn)換為 Maven 依賴管理,這里是難點(diǎn),要解決編譯、啟動、運(yùn)行時遇到的 jar 包沖突、版本沖突等異常。
我的思路是先把一些核心框架的依賴進(jìn)行轉(zhuǎn)換,再進(jìn)行一些比較獨(dú)立的公共工具包的轉(zhuǎn)換,最后就是一些不熟悉的依賴轉(zhuǎn)換。
引入 Maven 依賴的時候,看下其所有附屬的所有依賴,再逐漸從 lib 目錄刪除,直到全部刪除完成即轉(zhuǎn)換完成。
在找對應(yīng)依賴的時候,如果中央倉庫找不到,其他遠(yuǎn)程倉庫能找到的,就在公司私庫中添加該包所在的遠(yuǎn)程倉庫代理配置。
如果中央倉庫或者其他遠(yuǎn)程倉庫都找不到的,比如第三方的 SDK 包,就上傳到公司私庫。怎么上傳到私庫,點(diǎn)擊這里閱讀,更多 Maven 教程在公眾號Java技術(shù)棧回復(fù)maven進(jìn)行閱讀。
根據(jù) JAR 包找 Maven 依賴的時候,可能有多個名稱一樣的依賴,不知道引用哪個,這時候需要去原始 JAR 包中看下包名,根據(jù)包名就大概知道坐標(biāo)信息了。
依賴傳遞:
在依賴轉(zhuǎn)換過程中,如果一個依賴又依賴了其他依賴,可以直接引用父依賴即可,如在老項(xiàng)目中存在:poi、poi-ooxm、poi-ooxml-schemas 這三個依賴:
但在 POI 依賴體系中,poi-ooxml
包又需要依賴其他兩個包,所以只需要引入 poi-ooxml
依賴即可:
org.apache.poi poi-ooxml 4.1.2
這樣就把這個包需要依賴的其他包都引進(jìn)來了,這就是 Maven 管理依賴的好處,不會出現(xiàn)多包少包的情況,也能盡量避免依賴沖突。
依賴范圍:
在老項(xiàng)目中,所有 jar 包都在 web-inf/lib 目錄下,如:Servlet、JUnit,這些包在打完生產(chǎn)包之后也還在目錄下,沒有生命周期的管理。
在 Maven 中就能控制它們的生命周期:
javax.servlet javax.servlet-api ${javax.servlet-api.version} provided junit junit ${junit.version} test
Servlet 只需要編譯時用到,JUnit 只需要測試時用到,控制好每個包的依賴范圍,做到每個包的作用范圍最小化。
解決沖突:
當(dāng)傳遞的依賴版本不符合,或者是同一個包出現(xiàn)不同版本導(dǎo)致沖突的時候要學(xué)會使用排除:
或者強(qiáng)制指定包版本:
org.bouncycastle bcprov-jdk16 ${bctsp-jdk16.version}
有的時候,還要根據(jù)需要使用 classifier
指定不同 JDK 的版本:
com.test test ${test.version} JDK6
如源代碼編譯報錯,不知道引用的哪個 JAR 包、或者哪個版本,可以到原始項(xiàng)目中點(diǎn)對應(yīng)的類引用進(jìn)去看就知道了。
整個改造過程比較順利,就是編譯和運(yùn)行時需要解決一些 JAR 包沖突導(dǎo)致的問題,根據(jù)上面的種種方法直至編譯、啟動正常。
到此,關(guān)于“Maven命令怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!