一路磕磕絆絆,一路摸索向前!
簡介篇:
maven是什麼
maven翻譯爲“專家”,“內行”。Maven是Apache下的一個純java開發的開源項目,它是一個項目管理工具,使用maven對java項目進行構建、依賴管理。當前使用Maven的項目在持續增長。
什麼是項目構建
項目構建是一個項目從編寫源代碼到編譯、測試、運行、打包、部署、運行的過程
傳統項目構建過程
構建過程如下:
1)在IDEA中創建一個java web工程 2)在工程中編寫源代碼及配置文件等 3)對源代碼進行編譯,java文件編譯成class文件 4)執行Junit單元測試 5)將工程打成war包部署至tomcat運行
maven項目構建過程
maven將項目構建的過程進行標準化,每個階段使用一個命令完成,下圖展示了構建過程的一些階段:
mvn –version |
顯示版本信息 |
mvn clean |
清理項目生產的臨時文件,一般是模塊下的target目錄 |
mvn compile |
編譯源代碼,一般編譯模塊下的src/main/java目錄 |
mvn package |
項目打包工具,會在模塊下的target目錄生成jar或war等文件 |
mvn test |
測試命令,或執行src/test/java/下junit的測試用例. |
mvn install |
將打包的jar/war文件複製到你的本地倉庫中,供其他模塊使用 |
mvn deploy |
將打包的文件發佈到遠程參考,提供其他人員進行下載依賴 |
mvn site |
生成項目相關信息的網站 |
mvn eclipse:eclipse |
將項目轉化爲Eclipse項目 |
mvn dependency:tree |
打印出項目的整個依賴樹 |
mvn archetype:generate |
創建Maven的普通java項目 |
mvn tomcat:run |
在tomcat容器中運行web應用 需要插件支持 只有tomcat1.7的插件,沒有1.8的 所以tomcat8.0用不了此命令 |
mvn jetty:run | 調用 Jetty 插件的 Run 目標在 Jetty Servlet 容器中啓動 web 應用 |
基本命令:【參考https://www.cnblogs.com/MyFavorite/archive/2012/03/18/2404330.html】
1. mvn help:describe 你是否因爲記不清某個插件有哪些goal而痛苦過,你是否因爲想不起某個goal有哪些參數而苦惱,那就試試這個命令吧,它會告訴你一切的。參數: 1. -Dplugin=pluginName 2. -Dgoal(或-Dmojo)=goalName:與-Dplugin一起使用,它會列出某個插件的goal信息,如果嫌不夠詳細,同樣可以加-Ddetail.(注:一個插件goal也被認爲是一個 “Mojo”) 下面大家就運行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!
2. mvn archetype:generate 你是怎麼創建你的maven項目的?是不是像這樣:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你還再用的話,那你就out了,現代人都用mvn archetype:generate了,它將創建項目這件枯燥的事更加人性化,只需輸入archetype:generate,剩下的就是做”選擇題”了.
3. mvn tomcat:run 用了maven後,你再也不需要用eclipse裏的tomcat來運行web項目(實際工作中經常會發現用它會出現不同步更新的情況),只需在對應目錄(如/ryanote)裏運行 mvn tomat:run命令,然後就可在瀏覽器裏運行http://localhost:8080/ryanote查看了.如果你想要更多的定製,可以在pom.xml文件里加下面配置: 01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 12 當然你也可以在命令里加參數來實現特定的功能,下面幾個比較常用: 1. 跳過測試:-Dmaven.test.skip(=true) 2. 指定端口:-Dmaven.tomcat.port=9090 3. 忽略測試失敗:-Dmaven.test.failure.ignore=true 當然,如果你的其它關聯項目有過更新的話,一定要在項目根目錄下運行mvn clean install來執行更新,再運行mvn tomcat:run使改動生效.
4. mvnDebug tomcat:run 這條命令主要用來遠程測試,它會監聽遠程測試用的8000端口,在eclipse裏打開遠程測試後,它就會跑起來了,設斷點,調試,一切都是這麼簡單.上面提到的那幾個參數在這裏同樣適用.
5. mvn dependency:sources 故名思義,有了它,你就不用到處找源碼了,運行一下,你項目裏所依賴的jar包的源碼就都有了
maven工程構建的優點:1、一個命令完成構建、運行,方便快捷。2、maven對每個構建階段進行規範,非常有利於大型團隊協作開發。
什麼是依賴管理
什麼是依賴?一個java項目可能要使用一些第三方的jar包纔可以運行,那麼我們說這個java項目依賴了這些第三方的jar包。
舉個例子:一個crm系統,它的架構是SSH框架,該crm項目依賴SSH框架,具體它依賴的Hibernate、Spring、Struts2。
什麼是依賴管理?就是對項目所有依賴的jar包進行規範化管理。
傳統項目的依賴管理
傳統的項目工程要管理所依賴的jar包完全靠人工進行,程序員從網上下載jar包添加到項目工程中,如下圖:程序員手工將Hibernate、struts2、spring的jar添加到工程中的WEB-INF/lib目錄下。
手工拷貝jar包添加到工程中的問題是:1、沒有對jar包的版本統一管理,容易導致版本衝突。2、從網上找jar包非常不方便,有些jar找不到。3、jar包添加到工程中導致工程過大。
maven項目的依賴管理
maven項目管理所依賴的jar包不需要手動向工程添加jar包,只需要在pom.xml(maven工程的配置文件)添加jar包的座標,自動從maven倉庫中下載jar包、運行。
使用maven依賴管理添加jar的好處:1、通過pom.xml文件對jar包的版本進行統一管理,可避免版本衝突。2、maven工程可以自動從maven倉庫下載jar包,非常方便。
Maven的優點:
通過上邊介紹傳統項目和maven項目在項目構建及依賴管理方面的區域,maven有如下的好處:
1、一步構建:maven對項目構建的過程進行標準化,通過一個命令即可完成構建過程。2、依賴管理:maven工程不用手動導jar包,通過在pom.xml中定義座標從maven倉庫自動下載,方便且不易出錯。3、maven的跨平臺,可在window、linux上使用。4、maven遵循規範開發有利於提高大型團隊的開發效率,降低項目的維護成本,大公司都會考慮使用maven來構建項目。
Maven項目工程目錄約定:
src/main/java —— 存放項目的.java文件
src/main/resources —— 存放項目資源文件,如spring, hibernate配置文件
src/test/java —— 存放所有單元測試.java文件,如JUnit測試類
src/test/resources —— 測試資源文件
target —— 項目輸出位置,編譯後的class文件會輸出到此目錄
pom.xml——maven項目核心配置文件
Project
|-src
| |-main
| | |-java —— 存放項目的.java文件
| | |-resources —— 存放項目資源文件,如spring, hibernate配置文件
|-webapp —— webapp目錄是web工程的主目錄
|-WEB-INF
|-web.xml
| |-test
| |-java ——存放所有測試.java文件,如JUnit測試類
| |-resources —— 測試資源文件
|-target —— 目標文件輸出位置例如.class、.jar、.war文件
|-pom.xml ——maven項目核心配置文件
不管是軟件創建,還是手動創建Maven的目錄結構,工程的目錄必須遵循上面的結構。如圖所示 IDEA 創建出來的Maven項目結構如下
maven安裝篇:
- 1將下載的 maven 壓縮包解壓到本地,如 D:\Maven\apache-maven-3.6.1。
-
2右鍵---計算機屬性----高級系統設置---高級---環境變量---系統變量----新建
變量名:MAVEN_HOME
變量值:D:\Maven\apache-maven-3.6.1
注意:這個值是 maven 壓縮包解壓的位置,如下圖所示:
-
3將 MAVEN_HOME 添加到 path 目錄下。
選擇 path---編輯---新建---將 %MAVEN_HOME%\bin 添加進去,然後點擊確定就可以了,如下圖所示:
-
4查看 Maven 環境變量是否配置成功
打開命令提示符,快捷鍵 windows+R.輸入 mvn -v
如果出現如下maven 的版本信息,那麼就配置成功,如下圖所示:
- 修改maven安裝位置下的conf文件夾內的 settings.xml ,指定本地倉庫地址。添加標籤語句:<localRepository>自定義路徑</localRepository>,如下圖所示:
新建maven項目篇:
- 使用vscode新建maven工程
- 選擇create maven project後,即可根據提示創建目標工程。如:maven-archetype-webapp,而後選擇版本。【下圖爲項目相關信息,輸入後回車即可。】
- -DgourpId: 組織名,公司網址的反寫 + 項目名稱
- -DartifactId: 項目名-模塊名
- -DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart,創建一個簡單的 Java 應用
- -DinteractiveMode: 是否使用交互模式
- pom.xml文件的配置
在Maven中,pom.xml文件是項目配置的核心,它包含構建項目所需的主要信息。在上面的示例中,自動生成了pom.xml文件,其中的標籤“packaging”爲“war”—注意這裏不是“jar”。當使用Maven構建項目時,該項目將自動打成war包用來部署。
第一次運行錯誤一:pom.xml文件第一行報錯!
Failed to read artifact descriptor for junit:junit:jar:4.11
org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for junit:junit:jar:4.11
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:255)
at······
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:482)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:400)
... 43 more
Java(0)Missing artifact junit:junit:jar:4.11Java(0)
第一次運行錯誤二:
CoreException: Could not calculate build plan: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-compiler-plugin:jar:3.8.0: ArtifactResolutionException: Failure to transfer org.apache.maven.plugins:maven-compiler-plugin:pom:3.8.0 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-compiler-plugin:pom:3.8.0 from/to central (https://repo.maven.apache.org/maven2): connect timed outJava(0)
解決方案:
以上兩個錯誤是同時發生的。我找到了第一個錯誤所提示的【Failed to read artifact descriptor for junit:junit:jar:4.11】,然後定位到倉庫中的如下文件夾。然後把 junit-4.11.jar 文件名修改爲了 4.11.jar。然後回到terminal輸入mvn install命令,重新把包加載一遍。然後驚奇的發現錯誤消失了,而且兩個錯誤全消失了!
Maven添加 jar 包依賴:
老鐵,記住嘍!網址:https://mvnrepository.com/ 。上面會給出所需包引用方式。
【方法一】Maven與Tomcat聯調(現在突然意識到自己徒勞了······,行不通。)
1、打開tomcat的安裝目錄的 conf/tomcat-users.xml,添加以下內容:
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
(2)爲了讓maven可以訪問tomcat的權限,所以需要把如上創建的用戶添加到maven安裝目錄下conf中的settings.xml中的servers標籤內。
<!-- 配置tomcat-/manager/text 訪問權限 -->
<server>
<id>tomcat</id>
<username>admin</username>
<password>admin</password>
</server>
(3)配置工程目錄下的pom.xml文件,加入build,並配置tomcat7的maven插件,即在項目下pom.xml文件中的<plugins
>標籤內加入:
???
【方法二】Maven與Tomcat手動聯調(無須法一配置,直接打開)
- 啓動 tomcat,將上面生成的 .war 文件手動複製到 tomcat 安裝目錄的 webapps 文件夾下,假設 .war 的文件名爲 learn-web在瀏覽器輸入
http://localhost:8080/learn-web/index.jsp
我這路徑雖然亂,但思想是上面的思想。
參考及致謝:
https://www.cnblogs.com/best/p/9676515.html
https://blog.csdn.net/m0_37167369/article/details/81628305