Maven的簡介、安裝、項目創建、所遇問題及解決、maven與Tomcat聯調


                                                                              一路磕磕絆絆,一路摸索向前!


簡介篇:

maven是什麼
       maven翻譯爲“專家”,“內行”。Maven是Apache下的一個純java開發的開源項目,它是一個項目管理工具,使用maven對java項目進行構建、依賴管理。當前使用Maven的項目在持續增長。

                                          

什麼是項目構建
       項目構建是一個項目從編寫源代碼到編譯、測試、運行、打包、部署、運行的過程

傳統項目構建過程

構建過程如下:
       1)在IDEA中創建一個java web工程       2)在工程中編寫源代碼及配置文件等       3)對源代碼進行編譯,java文件編譯成class文件       4)執行Junit單元測試       5)將工程打成war包部署至tomcat運行

maven項目構建過程
       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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章