maven基本使用-個人手稿版

      網友投稿 806 2022-05-29

      一.項目會遇到什么事情?

      1,構建:編譯代碼,運行測試,打包,部署應用,運行服務器等;

      2,依賴:項目依賴大量的第三方包,第三方包又依賴另外的包;對依賴包的管理非常麻煩;

      Maven能做什么事情?

      1,Maven翻譯為“知識的積累”,“專家”,“行家”,是一個跨平臺的項目管理工具;

      2,Maven主要用作基于Java平臺的項目(Maven本身也是Java編寫的)的構建、依賴包管理和項目信息管理;

      3,Maven能提供一種項目的配置,配置好的項目,只需要運行一條簡單的命令,就能完成重復的,繁瑣的構建動作;

      4,Maven能提供一種項目的依賴配置,配置好的項目,Maven能自動的從Maven的中央倉庫中幫我們下載并管理項目依賴的jar包,并且還能自動的管理這些jar包依賴的其他jar包;

      5,Maven提供了一種標準的項目目錄結構,測試命名規則等項目的最佳實踐方案,統一了不同項目的學習成本(約定大于配置);

      二.為什么用Maven?

      IDE/Eclipse:

      1,手工操作較多,編譯、測試、部署等工作都是獨立的,很難一步完成

      maven基本使用-個人手稿版

      2,每個人的IDE配置都不同,很容易出現本地代碼換個地方編譯就出錯

      3,每個項目的依賴包必須自己維護了管理

      Ant:

      1,沒有一個約定的目錄結構

      2,必須明確讓ant做什么,什么時候做,然后編譯,打包

      3,沒有生命周期,必須定義目標及其實現的任務序列

      4,沒有集成依賴管理

      Maven的安裝

      1.檢查JDK安裝的情況(需要1.6以上的版本):

      添加JAVA_HOME,需要指向JDK安裝目錄;

      配置CLASSPATH的:變量名:CLASSPATH。變量值:設置為.;%JAVA_HOME%/lib

      添加PATH,添加%JAVA_HOME%\BIN;

      2.安裝maven

      設置系統環境變量,MAVEN_HOME,指向maven的根目錄

      設置環境變量Path,將%MAVEN_HOME%\bin加入Path中

      注意:所有標點均為英文下標點

      配置成功后,在cmd中輸入mvn -v 就出現如下信息,表示配置成功

      C:\Users\Administrator\Desktop>mvn -v

      Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1;

      2014-12-15T01:29:23+08:00)

      Maven home: E:\javaStudy\software\maven\apache-maven-3.2.5\bin\..

      Java version: 1.8.0_31, vendor: Oracle Corporation

      Java home: E:\javaStudy\software\JDK

      Default locale: zh_CN, platform encoding: GBK

      OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "dos"

      maven的文件結構

      bin:包含了Maven的運行腳本文件;

      boot:Maven的依賴的類加載器;

      conf:非常重要,Maven的全局配置文件(settings.xml),定制Maven的運行行為

      lib:Maven依賴的jar包(里面的maven-model-builder-3.2.5.jar重要,后面再介紹)

      .m2文件夾

      運行一個maven命令:mvn help:system,觀察maven的執行動作;

      在用戶的個人文件夾下,生成一個.m2文件夾,文件夾里面有一個repository文件夾,里面是剛下載的jar文件;

      最佳實踐:將倉庫地址重新定位

      1,將maven的conf/settings.xml拷貝到.m2中;作為個人MAVEN配置文件;

      2,重新定位repository目錄地址:配置;

      Maven的簡單使用

      1.hello maven項目

      1)Maven規定了一套默認的項目格式:

      src/main/java —— 存放項目的.java文件

      src/main/resources —— 存放項目資源文件,如spring、struts2配置文件,db.properties

      src/main/webapp —— 存放jsp,css,image等文件

      src/test/java —— 存放所有測試.java文件,如JUnit測試類

      src/test/resources —— 測試資源文件

      pom.xml——主要要寫的maven配置文件

      target —— 項目由maven自動輸出位置

      2)按照下面的目錄結構創建一個目錄結構:

      --src

      -----main

      ----------java

      -----test

      ----------java

      --pom.xml

      3)編寫下面的Java類:

      (1)在src/main/java下添加類:

      package cn.xmg.maven;

      public class Hello {

      public String sayHello(String name){

      return "Hello Maven World!";

      }

      }

      (2)在src/test/java下添加類:

      package cn.xmg.maven;

      import org.junit.Test;

      import static junit.framework.Assert.*;

      public class HelloTest {

      @Test

      public void testHello(){

      Hello hello = new Hello();

      String results = hello.sayHello("World");

      assertEquals("Hello World!",results);

      }

      }

      4)編輯pom.xml

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

      4.0.0

      cn.xmg.maven

      Hello

      0.0.1-SNAPSHOT

      Hello

      junit

      junit

      4.9

      test

      5)切換到項目根目錄下,用cmd分別執行下列命令并觀察:

      (1)執行 mvn compile命令

      編譯項目

      執行mvn clean命令

      清空編譯好的東西

      執行mvn clean compile命令

      先清空后編譯

      (4)執行mvn clean test命令

      進行測試

      (5)執行mvn clean package命令

      將項目打包

      (6)執行mvn clean site命令

      生成文檔

      執行mvn install命令

      將自己的項目打包jar包并上傳到本地倉庫,上傳地址和pom.xml配置文件中相同,如下:

      4.0.0

      cn.xmg.maven

      Hello

      0.0.1-SNAPSHOT

      Hello

      Maven幫我們下載的jar包的目錄和pom.xml配置文件相對應

      junit

      junit

      4.9

      test

      也就是說,可以在pom.xml中配置的jar包目錄,使用自己上傳的jar包,按照這樣的格式去配置pom.xml文件。

      在pom.xml配置文件中追加配置,將自己上傳的項目jar包作為jar包被引用。然后刪除cn\xmg\maven目錄下的Hello.java文件,然后重新進行測試。

      能夠測試成功說明該測試已經將自己項目打包生成的jar包引用了。

      使用maven很重的一點就是使用這樣的一種項目與項目間的依賴關系。

      附錄:

      可以通過MAVEN的命令來生成Maven項目骨架:

      執行命令mvn archetype:generate

      可以看到有很多的archetype,每個前面有一個序號,輸入序號(或者直接回車,選的就是quick-start):

      一次輸入需要的內容,

      項目創建成功

      2,一次性生成

      mvn archetype:create -DgroupId=[your group id] -DartifactId=[your archetype id] -DarchetypeArtifactId=maven-archetype-webapp

      3,如果mvn archetype:generate列出內容過多,或者下載過慢,運行:

      mvn archetype:generate -DarchetypeCatalog=internal

      只列出系統內部有的archetype;

      四.eclipse/myeclipse + maven

      1.在myeclipse中安裝maven插件

      將這三個插件文件復制到myeclipse/eclipse安裝目錄下的dropins目錄,重啟myeclipse/eclipse即可;

      Maven插件基本配置

      使用

      導入已經存在的maven項目

      新建maven項目

      在工作空間: new--》others--》

      Maven中一些重要概念

      1.坐標:

      Maven中坐標就是用來規范maven唯一標示一個構建的方法;

      Maven坐標構成:

      1)groupId:項目名稱

      2)artifactId:項目中Maven項目/模塊名稱

      3)version:項目版本

      4)packing:打包的方式,比如jar、war、pom等;

      5)classifier:附屬構件,比如source,javadoc等,但是注意,一般不會直接定義classifier,附加構件不是直接定義的,是插件幫助構件的;

      生成的文件名是根據坐標生成的,規則:artifactId-version[-classifier].packing

      在倉庫中的位置也是根據坐標生成的,后面再介紹;

      2.配置依賴:

      1)一個較完整的依賴配置包括

      junit

      junit

      3.8.1

      test

      groupId:該依賴項目的groupId;

      artifactId:該依賴項目的artifactId;

      version:該依賴項目的版本;(也是通過這三個坐標找到jar包位置)

      type:依賴項目的類型,對應坐標中的packing,即文件類型,一般不填,默認為jar;

      scope:該依賴項目的依賴范圍;

      optional:標記依賴是否可選;

      exclusion:設置排除依賴傳遞性;

      (1)scope

      --》Maven在編譯,測試,運行的時候,各需要一套classpath;(比如編譯的時候會有編譯的classpath;測試的時候會有測試的classpath;)scope表明該依賴的項目和三個classpath的關系

      --》scope的可選值:

      1)compile:默認,綁定編譯classpath;注意,編譯classpath在編譯,測試,運行時都有效;

      2)test:綁定測試classpath;

      3)provided:運行時已提供;綁定編譯和測試的classpath;運行時無效;典型的如servlet-api.jar

      4)runtime:測試,運行時有效;典型的如jdbc具體驅動實現;

      5)import:(maven繼承中使用,不講)

      --》依賴的傳遞性:

      1)測試junit4.8和junit4.9的區別;并查看Junit4.9依賴項目中的pom.xml文件;

      2)依賴的分類;A->B(第一直接依賴);B->C(第二直接依賴);A->C(傳遞依賴)

      3)依賴的傳遞:

      (第二依賴) compile ???????????????test ?????????????????provided ?????????????????runtime

      (第一依賴)

      compile ???????????????????????compile ????????????????N ???????????????????????????????????????????????????compile

      test ?????????????????????????????test ???????????????????????N ??????????????????????????????????????????????????test

      provided ?????????????????????provided ???????????????N ??????????????????provided ??????????????????provided

      runtime ???????????????????????runtime ?????????????????N ???????????????????????????????????????????????????runtime

      Optional

      依賴的可選:可選項目不會被傳遞;

      如果A項目依賴B項目;B項目依賴C或者D(比如一個基礎項目,兼容了MYSQL或者ORACLE,那么他可能依賴mysql-connector或者classes12.jar)

      但是在A項目運行的時候,只需要C或者D其中一個就可以了。那么對于B項目來說,C和D項目就可以設置optional為true;在A項目中單獨設置C或者D的依賴;

      Exclusion

      exclusions:排除一個或多個傳遞性依賴;

      傳遞性依賴可能帶來的問題:

      A->B1;C->B2;那么項目中會有兩個B項目;如果包不存在沖突,那么就可以保留一個高版本的B版本即可;在A項目中:

      org.xxx

      A

      1.1

      org.xxx

      B

      2)最佳實踐

      (1)使用properties歸類版本:

      3.0.5.RELEASE

      org.springframework

      spring-test

      ${org.springframework.version}

      test

      (2)依賴的分析:

      mvn dependency:analyze

      mvn dependency:tree

      倉庫

      倉庫用于統一管理和存放依賴包的地方;

      倉庫中依賴包存放的方式和坐標的對應關系:groupId/artifactId/version/artifactId-version.packing

      倉庫的分類:本地倉庫和遠程倉庫;組件倉庫和插件倉庫;

      maven倉庫 ?—— ??本地倉庫

      |—— ??遠程倉庫 ?—— ?中央倉庫

      |—— 私服

      |—— 其他公共庫

      超級POM中:

      central

      Central Repository

      https://repo.maven.apache.org/maven2

      default

      false

      id:倉庫的id,只有中央倉庫id為central,倉庫的id必須唯一,如果其他倉庫id覆蓋central,則相當于覆蓋了中央倉庫;

      url:倉庫的URL地址;

      layout:倉庫的布局,MAVEN2以上都用default;

      snapshots:代表不從中央倉庫中下載快照版本;

      可以在POM中配置其他的公共倉庫;

      倉庫的鏡像:如果一個倉庫完全和中央倉庫同步,我們就可以選擇本地的這種倉庫作為中央倉庫的鏡像倉庫;

      在settings.xml中配置:

      maven.cn

      central

      cn

      http://maven.net.cn/content/groups/public/

      *:匹配所有的倉庫(比如配置私服)

      external:*:所有遠程倉庫(localhost,file除外);

      rep1,rep2:倉庫1和倉庫2;

      *,!rep1:除了倉庫1其他所有的;

      倉庫的搜索:

      http://www.mvnrepository.com/

      生命周期

      Maven的生命周期是抽象的,比如當我們執行mvn clean實際上會執行一系列的動作,這些動作就是生命周期;

      Maven的生命周期由多個階段構成,在Maven中有以下幾套生命周期:

      1,clean(清理,對應clean):

      pre-clean:執行清理前要做的事情

      clean:執行清理動作

      post-clean:清理后要做的事情

      2,default:(構建,對應install)

      validate:

      initialize:初始化工作

      generate-sources:

      process-sources: 復制并處理資源文件,至目標目錄,準備打包。

      compile: 編譯項目的源代碼。

      process-classes:

      generate-test-sources:

      process-test-sources:復制并處理資源文件,至目標測試目錄。

      test-compile:編譯測試源代碼。

      process-test-classes:在測試前的工作

      test:使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署。

      prepare-package:執行打包前的工作

      package:接受編譯好的代碼,打包成可發布的格式,如 JAR 。

      pre-integration-test:集成測試前工作;

      integration-test:執行集成測試;

      post-integration-test:集成測試后的工作;

      verify:

      install:將包安裝至本地倉庫,以讓其它項目依賴。

      deploy:將最終的包復制到遠程的倉庫,以讓其它開發人員與項目共享。

      3,site(站點,對應site)

      pre-site:執行一些需要在生成站點文檔之前完成的工作

      site:生成項目的站點文檔

      post-site:執行一些需要在生成站點文檔之后完成的工作,并且為部署做準備

      site-deploy:將生成的站點文檔部署到特定的服務器上

      命令行和生命周期的對應:

      1,注意,命令行不是和生命周期一一對應,可能一個命令行只執行了一個生命周期的部分階段;

      2,mvn clean:對應clean周期的clean之前的東西;

      3,mvn test:對應default周期的test之前的階段;

      4,mvn clean install:對應clean+default周期的install之前的;

      注意:生命周期中不是每個階段都有事情做?。。。?!

      插件目標和插件

      1,Maven中只定義了生命周期,而生命周期中每個步驟怎么做,是需要插件來完成的;

      2,一個插件往往能執行多個功能,插件的每一個功能,就叫做插件的目標;

      3,插件綁定:插件的目標需要和生命周期中的某個階段綁定,才能完成一定的任務,插件綁定分兩種:

      1)內置綁定:比如,maven-clean-plugin:clean,(比如我們可以直接執行mvn org.apache.maven.plugins:maven-clean-plugin:clean插件)

      2)自定義綁定:可以通過元素把插件目標綁定在生命周期上;

      org.mortbay.jetty

      jetty-maven-plugin

      process-test-classes

      start

      4,內置綁定的執行:

      1,比如mvn dependency:tree,等價于執行mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:tree;在這里其實就可以看到groupId,artifactId,version都存在了;

      2,怎么定位插件倉庫?

      1,插件是單獨放在插件倉庫之中的;

      2,默認的插件groupId都是org.apache.maven.plugins;

      3,在插件庫中找到org\apache\maven\plugins,里面有一個maven-metadata-central.xml;

      Apache Maven Clean Plugin

      clean

      maven-clean-plugin

      Apache Maven Compiler Plugin

      compiler

      maven-compiler-plugin

      在這里就能找到artifactId;

      私服

      掌握nexus私服的搭建和配置;

      Java Maven

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Lucene 8.5.2演示API
      下一篇:準備校招,關于JAVA 異常,面試看這篇就夠了
      相關文章
      亚洲AV日韩AV永久无码免下载| 春暖花开亚洲性无区一区二区| 久久亚洲精品11p| 亚洲手机中文字幕| 日本久久久久亚洲中字幕| 国产V亚洲V天堂A无码| 亚洲一级特黄无码片| 亚洲高清无码专区视频| WWW国产亚洲精品久久麻豆| 亚洲AV无码国产剧情| 亚洲国产精品精华液| 亚洲国产精品嫩草影院| 久久亚洲精品无码av| 国产精品亚洲色婷婷99久久精品| 亚洲成av人片在线天堂无| 亚洲成AV人片高潮喷水| 国产精品无码亚洲精品2021| 色偷偷噜噜噜亚洲男人| 春暖花开亚洲性无区一区二区| 亚洲成?Ⅴ人在线观看无码| 亚洲精品视频免费观看| 亚洲无码视频在线| 亚洲午夜久久久久久久久久| 亚洲精品成人网站在线观看 | 亚洲精品无码不卡在线播放HE| 亚洲乱码一区二区三区在线观看| 亚洲精品少妇30p| 亚洲男人的天堂在线播放| 亚洲网站在线免费观看| 亚洲人成网站在线观看播放动漫| 亚洲youjizz| 亚洲国产精品成人AV在线| 自拍偷自拍亚洲精品播放| 亚洲精品视频久久久| 亚洲精品成人无限看| 亚洲色图视频在线观看| 亚洲人成77777在线观看网| 亚洲AV永久无码精品一福利| 亚洲国产天堂久久久久久| 亚洲精品乱码久久久久久蜜桃不卡 | 久久精品国产亚洲精品2020|