使用命令行管理maven項目


 

 

創建maven java項目

自己創建一個文件夾,進入cmd,shift+鼠標右鍵)這樣創建的maven[java]項目就在該文件夾下了。

 

打開cmd第一種方式

打開cmd第二種方式

 命令:mvn archetype:generate -DgroupId=com.td.maven.quickstart -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart

mvn:核心命令

    archetype:generate:創建項目,現在maven版本使用generate命令了,老版本使用

create命令。

   -DgroupId=com.td.maven.quickstart :創建該maven項目時的groupId是什么,該作用在上面已經解釋了。一般使用包名的寫法。因為包名是用公司的域名的反寫,獨一無二

   -DartifactId=simple:創建該maven項目時的artifactId是什么,就是項目名稱

   -DarchetypeArtifactId=maven-archetype-quickstart:表示創建的是[maven]java項目

    運行的前提:需要聯網,必須上網下載一個小文件

 

 

maven java項目結構

 

 

圖中有一個target目錄,是因為將該java項目進行了編譯,src/main/java下的源代碼就會編譯成.class文件放入target目錄中,target就是輸出目錄。

 

創建 maven web 項目

  命令:mvn archetype:generate -DgroupId=com.td.maven.quickstart -DartifactId=myWebApp -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot

 

  其他都差不多,創建maven web項目的話 -DarchetypeArtifactId=maven-archetype-webapp 比創建java項目多了一個 -Dversion=0.01-snapshot, 在創建java項目的時候也可以加上這個,如果不寫,會默認幫我們加上1.0-snapshot

 

maven web項目結構

 

命令操作maven javaweb項目 

 

編譯:mvn compile  --src/main/java目錄java源碼編譯生成class target目錄下)

測試:mvn test    --src/test/java 目錄編譯

清理:mvn clean    --刪除target目錄,也就是將class文件等刪除

打包:mvn package  --生成壓縮文件:java項目#jar包;web項目#war包,也是放在target目錄下

安裝:mvn install   --將壓縮文件(jar或者war)上傳到本地倉庫

部署|發布:mvn deploy  --將壓縮文件上傳私服

 

 

使用命令操作maven java項目

 

注意:使用命令時,必須在maven java項目的根目錄下,及可以看到pom.xml

 

描述:將maven java項目打包上傳到本地倉庫供別人調用

 

使用 mvn install

 

 

maven項目的完整生命周期,當執行生命周期后面命令時,前面步驟的命令自動執行

 

紅色標記字體的意思就是當我們直接使用mvn install命令對項目進行上傳至本地倉庫時,那么前面所有的步驟將會自動執行,比如源代碼的編譯,打包等等。 

 

其他命令

maven javaweb項目轉換Eclipse工程

 mvn eclipse:eclipse

 mvn eclipse:clean  清除eclipse設置信息,又從eclipse工程轉換為maven原生項目了    

 ...轉換IDEA工程

 mvn idea:idea

 mvn idea:clean  同上 

 

pom.xml的依賴關系

groupIdartifactIdversion是依賴的基本坐標,缺一不可;

type:依賴的類型,比如是jar包還是war包等

            默認為jar,表示依賴的jar

optional:標記依賴是否可選。默認值false

exclusions:排除傳遞依賴,解決jar沖突問題

            依賴傳遞的意思就是,A項目 依賴 B項目,B項目 依賴 C項目,當使用A項目時,就會把B也給加載進來,這是傳遞依賴,依次類推,C也會因此給加載進來。

            這個有依賴傳遞有好處,也有壞處,壞處就是jar包的沖突問題,比如,A 依賴 B(B的版本為1)C 依賴 B(B的版本為2),如果一個項目同時需要AC,那么A,C都會傳遞依賴將B給加載進來,問題就在這里,兩個B的版本不一樣,將兩個都加載進去就會引起沖突,這時候就需要使用exclusions這個屬性配置了。maven也會有一個機制避免兩個都加載進去,maven 默認配置在前面的優先使用,但是我們還是需要使用exclusions來配置更合理

 

scope:依賴范圍,意思就是通過pom.xml加載進來的jar包,來什么范圍內使用生效,范圍包括編譯時,運行時,測試時

 

compile:默認值,如果選擇此值,表示編譯、測試和運行都使用當前jar

test:表示只在測試時當前jar生效,在別的范圍內就不能使用該jar包。例如:junit 。此處不寫也不報錯,因為默認是compilecompile包擴了測試

runtime,表示測試和運行時使用當前jar,編譯時不用該jar包。例如:JDBC驅動。JDBC驅動,在編譯時(也就是我們寫代碼的時候都是采用接口編程,壓根就沒使用到JDBC驅動包內任何東西,只有在運行時才用的到,所以這個是典型的使用runtime這個值的例子),此處不寫也不報錯,理由同上

provided,表示編譯和測試時使用當前jar,運行時不在使用該jar了。例如:servlet-apijsp-api等。【必須填寫】

什么意思呢? 在我們以前創建web工程,編寫servlet或者jsp時,就沒導入過jar包把,因為myeclipse或者別的ide幫我們提供了這兩個jar包,內置了,所以我們在編譯期測試期使用servlet都不會報缺少jar包的錯誤,而在運行時期,離開了myeclipse或別的ide,就相當於缺失了這兩個jar包,但此時tomcat又會幫我們提供這兩個jar,以便我們不會報錯,所以,這兩個很特殊。看圖

1、開發階段(Eclipse提供),看下圖以此證明我們說的

java web 5.0項目:

 

java web 6.0項目:

2、運行階段(tomcat提供) 

所以,根據這個特點,如果使用maven開發項目,就不是web項目了,那么myeclipse就不會在給我們提供這兩個jar包,我們就必須自己手動通過坐標從倉庫中獲取,但是針對上面的分析,當運行的時候,tomcat會幫我們提供這兩個jar包,所以我們自己從倉庫中獲取的jar包就不能和tomcat中的沖突,那么就正好可以通過provided這個屬性,來設置這兩個jar的作用范圍,就是在變異時期和測試時期生效即可。

system:表示我們自己手動加入的jar包,不屬於maven倉庫(本地,第三方等),屬於別得類庫的這樣的jar包,只在編譯和測試期生效,運行時無效。一般不用 

 

依賴調節原則

這個就是maven解決傳遞依賴時jar包沖突問題的方法,按照兩種原則,上面已經介紹了一種了,就是下面的第二原則

1、第一原則:路徑近者優先原則

   A-->B-->C-->D-->X(1.6)

   E-->D-->X(2.0)

   使用X(2.0),因為其路徑更近 

2、第二原則:第一聲明者優先原則。就是如果路徑相同,maven 默認配置在前面的優先使用

   A-->B --> X(1.6)

   C-->D--> X(2.0)

   這樣就是路徑相同,那么如果A在前面,C在后面,則使用X(1.6)

   maven會先根據第一原則進行選擇,第一原則不成,則按第二原則處理。

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM