-
maven中的坐標和倉庫
構件:插件<plugin>+jar包<dependency>
坐標概念:maven中,任何一個依賴、插件、都可以稱為構件,所有構件通過坐標作為其唯一標識。
建議:創建maven項目時,盡量符合規范<gorupId>(公司域名反寫+項目名)和<artifactId>(項目名-模塊名),<version>(構建的版本號)這樣看起來更清晰,并符合邏輯,也更方便搜索。
倉庫概念:管理項目的構件,倉庫分為本地倉庫和遠程倉庫。本地倉庫找不到我們的構件,則會去maven的中央倉庫查找,查找到后就會下載到本地倉庫中,如果遠程倉庫中也找不到就會報錯,maven默認提供了一個中央倉庫地址(apache-maven——>lib——>maven-model-builder.license.jar里的pom-4.0.0xml,maven提供的超級pom,所有Maven項目都會繼承這個pom)。
中央倉庫地址:基本上平常用的開源框架,這里都會有,它包含了絕大多數的Java開源項目(基本上平常開發常用的開源框架都可以找到)。
<layout>:表示使用默認布置。
<snapshots>下<enabled>為false:禁止下載快照的版本構件。
鏡像倉庫:A提供了和B一樣的功能,Maven的中央倉庫服務器都是位于國外的,有時可能由于一些原因導致無法訪問外網,所以國內提供了它的鏡像倉庫,相對來說,更快、更穩定一些。
修改鏡像倉庫的位置:apache-maven——>conf——>setting.xml中mirror,配置了鏡像倉庫,就不會再訪問中央倉庫。
更改倉庫位置:maven從遠程倉庫中下載的構件,默認存放在用戶目錄中C:\Users\Administrator\.m2\repository,一般不會把倉庫放在C盤目錄中,如果遇到一些問題這個數據可能就沒了,所以一般在<localRepository>標簽中放置的是其他盤下的倉庫。并且把setting復制一份放到goujian文件夾下,更新maven版本,就不用在重新更改了,直接把這個copy過去即可。
查看全部 -
一、eclipse中安裝maven插件(如果eclipse是4.0以上或者myEclipse就不用安裝插件了)
1、插件放置在eclipse中的dropins文件夾下,并重啟eclipse。
2、Maven需要jdk支持,而eclipse已經添加了jre,根據提示修改eclipse.ini。
3、eclipse-ini文件中
512m下添加-vm
再在底下添加jdk的bin目錄的路徑+javaw.exe
4、修改eclipse默認的jre(eclipse運行在JRE之上,maven使用到了JRE的支持,所以要修改eclipse的JRE,使其可以找到JDK,使用目錄中私有的JRE,這樣就能完全解決這個問題,默認的JRE沒有一些包)
Preferences——>Java——>Installed JREs——>Add——>我們安裝JDK的位置
Preferneces——>Maven——>Installations——>Add——>我們安裝的Maven的位置
5、修改User Settings(找到settings.xml)
二、創建Maven項目
1、目錄模板選擇maven-archetype-quickstart
2、運行Maven項目——》右鍵run as——》Maven Builder——》輸入compile點擊run即可
3、Maven打包——》右鍵run as——》Maven Builder——》package(打包之后在項目根目錄中就會有一個target文件夾,該文件夾下就會有該jar包
查看全部 -
maven的生命周期和插件
拓展:
1、解決不能在eclipse項目中創建maven項目的解決辦法:https://www.cnblogs.com/DreamDrive/p/5571913.html
2、https://blog.csdn.net/weixin_42223248/article/details/80809499解決Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:3.0.2 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:3.0.2
我們之前使用到clean、compiler、test、package、install,這幾個命令對對象進行操作,這其實也對應了項目完整的構建過程。
完整的項目構建過程包括:清理——>編譯——>測試——>打包——>集成測試——>驗證——>部署,等步驟。
maven將這個過程進行了抽象,實際上maven和插件是密不可分的,maven抽象出了項目構建的生命周期,而插件是對maven抽象的具體實現,比如我們對項目進行編譯,那么compiler就對應了maven compiler plugin。
maven中定義三套獨立的生命周期:分別包括clean、default、site,這三套生命周期是相互獨立的,每個生命周期又包含一些階段,各個生命周期的階段是有順序的,且后面的階段依賴前面的階段,執行每個階段時,其前面的階段會依次順序執行,但不會觸發另外兩套生命周期的任何階段,就好像之前使用到的package命令,該命令用于打包,雖然在運行package命令之前,并沒有compile和test,但當我們運行package之后,它的compile和test是依次執行的,也就是運行package這個階段時,compile和test會自動的運行。
1、clean:目的是來清理項目,它又分為三個階段。
pre-clean執行清理前的工作
clean清理上一次構建生成的所有文件
post-clean執行清理后的文件
2、default:目的是來構建項目(生命周期中最核心,包含了構建項目時所要執行的步驟),階段比較多,常用階段有以下幾種。
例如:compile test package install,默認都是default這個生命周期中的。
3、site:生成項目的站點,會根據pom種的信息,自動生成一個站,它又分為以下幾個階段。
pre-site:在生成項目站點前要完成的工作。
site:生成項目的站點文檔。
post-site:在生成項目站點后要完成的工作。
site-deploy:發布生成的站點到服務器上。
eclipse支持java、C、C++、PHP等開發語言,eclipse中也可以使用它的sql插件來訪問數據庫,而eclipse的基本版本默認僅是支持java的,其它許許多多的功能都是由于第三方的插件來實現的,單單對maven而言,它沒有什么執行業務的功能,它的下載包也非常小,maven中所有的命令也是調用這個插件來實現的,maven的官網中提供了很多的插件,在plugins都是它的插件。
使用source插件:source插件可以將項目源碼進行打包,需喲在pom.xml中加入一個插件如下圖一,當運行target命令時,就可以將項目源碼進行打包,所以要綁定source到default生命周期package階段,如下圖二,也就是說在這個階段要運行source這個插件,至于目標可以查看maven官網source插件的目標,有五個目標,我們可以使用其中一個。如圖三,然后run as——>maven build如下圖4,當運行完package命令后,項目自動的幫我們完成了編譯、測試、以及對該項目的打包,并且生成了source.jar包,說明對生命周期的階段而言,執行某個階段時,其前面的階段會依次順序的執行。
拓展:
【a】IntelliJ IDEA 可以參考這篇文章
https://liuyanzhao.com/6012.html【b】給大家推薦 一個中央庫 http://www.mvnrepository.com/ 重點是可以自動把坐標寫好了 直接復制就好了。
【c】給你們個博客看看
https://www.cnblogs.com/hongwz/p/5456578.html【d】eclipse配置jdk以適應maven,感覺講的太復雜了繞暈了。
推薦:https://blog.csdn.net/nmjuzi/article/details/82352624【e】https://blog.csdn.net/GDUTACMA2011149/article/details/50993257解決Could?not calculate build plan:Plugin org.apache.maven.plugins:maven-resources
查看全部 -
maven中Pom.xml解析
Pom.xml:maven項目的核心管理文件,用于項目描述、組織管理、依賴管理、構建信息的管理,Pom中包含了許多的標簽。
Pom.xml的常用元素:
<project>是pom.xml的根元素,包含了pom的一些約束信息。
<modelVersion>是一個固定的版本,也是必須的元素,指定了當前pom的版本。
坐標的信息由以下標簽組成:
<groupId>主項目的標識,用來定義當前的maven屬于哪個實際的項目,和我們為項目創建的包是一樣的,是由反寫的公司網址+項目名組成</groupId>
注意:maven的項目和實際的項目不是一一對應關系,maven項目體現的是模塊化的概念,因此一個實際項目往往會劃分成很多的模塊。
<artifactId>表示一個模塊的標識,實際項目中的一個模塊,一般會使用項目名+模塊名進行標識,比如struts2項目,它下面可能分為struts2demo01、struts2demo02,struts2是項目名,而demo01和demo02是模塊名</artifactId>
<version>標識當前項目的版本號,版本號一般都是由三個數字來組成的,第一個0標識大版本號,第二個0表示分支版本號,第三個0表示小版本號,一般形式可以寫為0.0.1snapshot,snapshot為快照的版本,版本除了snapshot,還有內測的測試版本alpha,以及公測版beta,比如在網上玩新出的游戲,經常會有公測不刪檔,對應的就是該版本,還有Release版本,它是一個穩定的版本,以及GA版本是一個正式的發布版本<version>。
<packaging>maven項目打包的方式,不指定默認打包是jar,還可以打包成其他類型,比如war、zip、pom等<packaging>
其他的標簽:
<name>項目的描述名,一般是在產生對象文檔時候才會使用</name>
<url>項目的地址</url>
<description>項目的描述</description>
<developers>開發人員的列表,項目發布的時候,可以把開發人員的信息填寫進去</developers>
<licenses>許可證的信息,比如經常用到的開源框架,它都會有一些許可證的信息</licenses>
<organization>組織信息</organization>
依賴列表:它是比較重要的,會經常使用到,依賴列表下可以包含多個依賴項,依賴項通過制定它的坐標來確定依賴所在的位置,也就是<groupId><artifactId><version>,還可以指定它的<type>,還可以使用<scope>指定依賴的范圍(之前寫的junit的測試范圍是test,test表示junit,這個構件(junit的jar包),只在測試的依賴范圍內有用,比如在主代碼中引用junit這個類,它就會報錯),<optional>該標簽有兩個值,分別是true和false,它的作用是設置依賴是否可選,默認是false,子項目默認是false時,子項目默認是繼承的,如果為true,子項目必須顯示的引入該依賴,<exclusions>是一個排除依賴傳遞的列表,該標簽下可以排除多個依賴通過<exclusion>,作用是:比如Ajar包依賴Bjar包,Bjar包又依賴Cjar包,C對于A來說就是傳遞依賴,如果A不想依賴C,就可以使用這個標簽,比如我們使用的Spirng除了核心的jar包之外,它的jar包還引用其它很多相關的jar包,但對于我們而言只需要使用Spring的jar包,而其他的一些相關的jar包我們并不需要使用。
<dependencyManagement>依賴的管理,也可以通過<dependencies>聲明依賴列表,通過<dependency>包含多個依賴,但是它并不會被運行,也就是說它不會被引入到實際的依賴當中,該標簽一般主要用于定義在父模塊中,供子模塊繼承用的。比如之前多個maven項目中,都使用到junit,我們就可以抽象出一個父類的模塊,然后在父類模塊中對junit進行一個定義,其他子模塊直接繼承該父模塊即可。
<build>通常為我們構建的行為來提供相應的支持,我們經常在這里使用到<plugins>表示插件的列表,在該標簽下可以有多個<plugin>標簽,(我們之前使用到source插件對項目進行打包),在<plugin>中依舊是要指出插件的坐標通過<groupId><artifactId><version>
<parent>以及<modules>:經常使用到的:<parent>通常用于在子模塊中對父模塊的pom的一個繼承,<modules>用來聚合運行多個maven的項目,如果有很多的maven模塊是要編譯的話呢,我們之前的辦法是一個一個的編譯,而使用<modules>就可以指定多個的模塊,然后在一起進行編譯。
查看全部 -
maven依賴范圍
通過junit依賴來講解依賴的范圍<scope>
我們平時開發時,如果使用某一框架,就要引入相應的jar包到項目的classpath路徑中,這樣我們的項目就可以使用框架封裝好的一些方法。
maven中提供了三種classpath:
1、編譯
2、測試
3、運行
而我們使用junit依賴范圍的值為test,這就表明了junit只存在測試的classpath中,也就是存在測試的范圍,所以依賴范圍就是控制依賴與三種classpath的關系的。
具體的scope的屬性:查看maven官網(maven.apache.org),查看它的文檔,點擊Index (category),找到The Dependencies and Dependency Exclusions,找到Dependency Scope,提供了6種scope,分別是
compile:默認的范圍,如果沒有指定依賴范圍,就會使用此依賴的范圍的maven依賴,編譯測試運行這三種classpath都有效。
provided:編譯和測試時都有效,最后運行不會被加入(舉了一個例子,當我們構建一個JavaEE的Web應用時,可以依賴ServletAPI,但是在最后運行時,并不會被加入,因為Web容器已經包含了這個API,如果再加入就會導致沖突)。
runtime:在測試和運行時有效,典型的例子就是jdbc驅動的實現,項目的主代碼的編譯只需要jdk提供的jdbc的API,只有在執行測試或者運行項目的時候才需要實現生成接口的具體jdbc的驅動
test:只在測試時有效,典型應用就是junit。
system:和provided一樣,編譯和測試時有效,與本機系統相關聯,可移植性差,比如要引用本機的Java_Home,如果把項目移植到其他系統上,就可能由于路徑的不一致,而導致錯誤。
import:導入的依賴范圍,它只使用在dependencyManagement標簽中,表示從其他的pom中繼承過來的依賴。
該文檔提供了import的例子,將A中的依賴導入到B中。
查看全部 -
maven依賴傳遞
舉例:古惑仔電影中,山雞和南哥混,南哥和B哥混,對于山雞而言就間接和B哥混了,換成程序而言,山雞依賴南哥,南哥依賴B哥,山雞就就依賴傳遞B哥了。
案例:
描述:新建3個maven項目,選擇quickstart模板,第一個Group Id為com.hongxing,Artifact Id為hongxing-bge,Package為默認的,第二個Group Id為com.hongxing,Artifact Id為hongxing-nange,第三個Group Id為com.hongxing,Artifact Id為hongxing-shanji。
步驟1:南哥依賴于B哥,南哥的pom.xml中進行配置,引入B哥的依賴,需要知道B哥的坐標,然后編譯一下南哥,Maven——>Maven build(在Goals:compile)。
南哥的maven項目首先會到本地倉庫中進行查找B哥的jar包,如果本地倉庫中沒有,則會從遠程中央倉庫中下載,如果遠程中央倉庫中沒有,則會報錯,我們先將B哥進行打包,Maven——>Maven build(Goals:clean package),然后再將B哥安裝到本地倉庫中Maven——>Maven build(install),它依然會編譯,并且會測試一遍,并且安裝到指定的倉庫中,接下來再對南哥進行編譯Maven——>Maven build(clean compile),這樣南哥就構建成功了。
步驟2:山雞依賴于南哥,首先,要打包南哥的maven項目,并進行安裝到本地倉庫中Maven——>Maven build(clean install),依舊要找到南哥的坐標,然后編譯一下山雞Maven——>Maven build(compile)
依賴具有傳遞性,山雞的maven項目并沒有依賴B哥,B哥的依賴缺自動的加入到了山雞的依賴目錄里。排除依賴:依賴南哥的<dependency>標簽中添加<exclusions><exclusion>B哥的坐標<exclusions><exclusion>
舉例:山雞只聽從南哥的吩咐,不聽其他人的吩咐,將B哥的依賴從山雞的maven項目依賴中排除,。
產生如下圖JRE System Library為J2SE1.5的原因是:maven默認使用jdk1.5,我們可以將其修改,點擊JRE System Library的Properties屬性,選擇JavaSE-1.7(jre7),這樣修改比較麻煩每次創建一個項目都需要修改一下,可以修改settings.xml,找到<profiles>大概182行,加入如下圖片的代碼,指定它默認的jdk為1.7。
查看全部 -
maven聚合和繼承
maven聚合:如果想在maven中將多個項目進行install,將其安裝到本地倉庫中,必須對其依次執行install命令,maven中有一種方式可以將其放到一起運行,這種方式稱為聚合。
案例:將山雞、南哥、B哥聚合到本地倉庫中,這里需要新建一個maven項目,依舊使用quickstart模板,Group Id為com.hongxing,Artifact Id為hongxing-aggreation,它作為其他pom的容器,需要修改它的pom的<package>為pom</package>,然后使用<modules><module>B哥的maven項目名</module><module>南哥的maven項目名</module><module>山雞的maven項目名</module></modules>,然后右鍵hongxing-aggreation的Maven——>Maven build,Goals輸入clean install控制臺輸出結果為三次構建,第一次生成B哥的jar,并且將其安裝到本地倉庫中,第二次生成南哥的jar,并且將其安裝到本地倉庫中,第三次生成山雞的jar,并且將其安裝到本地倉庫中。
繼承:三個maven項目中都有一個共同的特點,就是都使用了junit,并且在每個項目的pom.xml中,都對其進行了配置,比如說b哥的maven使用了如下圖,這樣就出現了很多重復的地方,其實maven中可以想java中一樣,將其共同的特性封裝成一個父類,所以新建一個maven項目,Group Id為com.hongxing,Artifact Id為hongxing-parent,然后修改它的pom.xml,要將<dependencies>標簽放置在<dependencyManagement>標簽里,如果使用這個標簽對依賴進行管理,它并不會在這個項目中運行,也可以將junit的版本號提取出來,在外面定義一個<properties>屬性,并在該屬性里通過<junit.version>設置junit的版本號,這樣就可以在<dependencies>中的<version>中像使用EL表達式那樣來調用它,${junit.version},最后將它的<package>改成pom,然后打開B哥的pom讓其繼承pom,這里就可以將junit的版本號進行刪除,<scope>也可以刪除掉,這里要使用到<parent>標簽,然后引入我們的parent的maven的坐標,這樣junit已經從父類parent,也就是pom中繼承過來了。
src目錄依然有報錯,其實test目錄和main目錄,對于parent的pom來說,是沒有作用的,可以將其進行刪除,然后更新一下它,Maven——>Update Project,這個叉號就消除了。
查看全部 -
使用maven構建Web項目(介紹如何使用maven創建web項目,如何安裝jetty插件和tomcat插件,并簡介如何將項目打包到jetty和tomcat 中,并運行。)
案例:
描述:新建maven項目,這里使用webapp的模板(Group Id為org.apache.maven.archetypes,Artifact Id為maven-archetype-webapp),項目的Group Id為com.imooc.webdemo,Artifact Id為webdemo,項目里的index.jsp有×號,是因為沒有ServletAPI的原因,所以需要在pom.xml中添加Servlet的依賴,打開瀏覽器進入maven的中央倉庫,(https://mvnrepository.com/)搜索Servlet,點擊3.0.1,將Servlet的坐標復制到pom中,為該坐標設置scope為provided,也就是說只在編譯時和測試時運行,然后將junit的版本更改為4.10,接下來檢查為我們創建的目錄是否正確,只為我們創建了資源目錄,所以按照maven的約定我們手動創建其他目錄,在Java Resource下,只為我們創建了資源目錄,按照maven的約定,手動創建其他目錄,點擊Java Resource選擇New——>Source Folder,Project名為maven項目名,Folder name為src/main/java,然后再創建存放測試用例的目錄,Folder name為src/test/java,如果無法創建目錄,在Navigator視圖下src的main下進行創建,再轉到Explorer視圖,進行更新Maven——>Update Project,這樣存放資源文件的目錄就顯示出來了,接下來需要檢查,classes文件的輸出路徑,項目上右鍵Build Path——>Configuration Build Path,點擊source,如下圖二為輸出路徑,確保它的輸出路徑為target/classes,接著要把項目轉化成Web項目,項目上右鍵Properties——>Project Facets選上Dynamic Web Module,接下來需要修改部署時的默認配置,項目右鍵Properties——>Deployment Assembly,里面除了主代碼的目錄之外,測試目錄的代碼依舊是在發布時部署上去的,這里要將其刪除,因為最終發布產品時,我們并不需要這些測試的文件,這樣一個Web項目就創建成功了,訪問的網址為:localhost:8080/webdemo/。
使用package命令將其打包,也就是打成war包,然后將其拷貝到支持的web容器中,項目就可在瀏覽器中進行訪問了,這里使用jetty作為web容器。
首先在<builder>標簽中添加jetty插件,jetty插件去maven的中央倉庫中搜索Jetty Maven Plugin,使用的是最新的版本,把該插件的坐標復制到pom的<builder><plugins><plugin>標簽中,然后啟動一下,Run as——>Maven build,Goals輸入jetty:run,如果控制臺顯示Started Jetty Server表明Jetty容器啟動成功了,這樣就可以在瀏覽器訪問該項目了,訪問http://localhost:8080/出現HelloWorld代表成功,如果想在打包的階段直接運行jetty插件,可以在Jetty的坐標中添加<executions><execution>指定它的階段,也就是package階段運行目標,<phase>package</phase><goals>run</goal></execution></executions>目標為run如圖三,在打包成功后使用jetty:run來運行jetty服務,然后右鍵項目,run as——>Maven build,Goals:輸入clean package,訪問localhost:8080出現hello world表示成功,如果要使用Tomcat作為容器,需要加入一個Tomcat的插件,進入Tomcat的官網,點擊Maven Plugin,找到Version2.2,這里面有個例子,將它的坐標復制到pom中,如圖4。
查看全部 -
課程總結
【一】maven下載和環境搭建:如何在windows下安裝maven,主要是配置了maven 的環境變量,分別是建一個pom變量指向maven的安裝目錄,然后為能在maven 的命令行中使用maven命令,然后將Path路徑指向maven的bin目錄。
【二】maven目錄骨架說明:學習了maven的基本骨架src——>main——>java——>主代碼,src——>test——>測試代碼,用于測試用例存放的路徑,并且要在maven項目的根目錄中存放pom.xml用于管理項目依賴和構建構成。
【三】常用的maven命令:介紹了常用命令以及使用archetypes自動生命maven的目錄骨架。
【四】倉庫和坐標:如何修改倉庫位置,和坐標的基本概念
【五】在eclipse安裝和創建maven項目
【六】生命周期,pom.xml以及依賴、聚合、繼承:對pom中常用的標簽進行了解析
【七】eclipse中使用maven插件創建web項目和jetty插件的安裝,并在jetty和tomcat容器中進行運行。
查看全部 -
東方人?!吃。ge查看全部
-
modelVersion:指定了當前pom的版本
groupId:指定當前屬于哪個實際的項目,反寫的公司網址+項目名(反寫即com在前,后面.imooc)
artifactId:模塊的標識,項目名+模塊名
version:版本號
第一位大版本號、第二位分支版本號、第三位小版本號
snapshot快照,alpha內部測試,beta公測,Release穩定,GA正式發布
packaging:打包方式,默認是jar,還有war、zip、pom
name:項目描述名,在產生項目對象文檔的時候才會使用
url:項目地址
description:項目描述
developers:開發信息
licenses:許可證信息
organization:組織信息
查看全部 -
mvn常用命令
mvn - vs 查看maven版本
?mvn compile 編譯
mvn test 測試
mvn package 打包
mvn clean 刪除target
mvn install? 安裝ajr包到本地倉庫
查看全部 -
課程總結、maven 骨架
查看全部
舉報