日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Maven入门详解与安装配置

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Maven入门详解与安装配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Maven:

Maven出現前的問題:

假設你現在做了一個項目,項目中肯定要用到一些jar包,比如說mybatis,log4j,JUnit等,除了這些之外,你有可能用到你的同事開發的其他的東西,比如說別人做了一個財務模塊或做了一個結算的模塊,你在這里邊有可能要用到這些東西。假如有一天你們的項目中mybatis進行了一個升級,但是它內部使用的JUnit沒有升級,你升級以后的mybatis假如要用5.0的JUnit,而你項目中目前用的是4.0的,會不會沖突?必然會出問題!這個時候管理起來會比較麻煩,你需要各種調整。更有甚者,假如同事做的這些東西升級了但又沒有通知你,這個時候,就會出現幾種嚴重的問題:

  • jar包不統一,jar不兼容
  • 工程升級維護過程操作繁瑣
  • Maven的本質是一個項目管理工具,將項目開發和管理過程抽象成一個項目對象模型(POM)

    Maven通過加載pom.xml這個配置文件就可以知道我們項目的相關信息,如果我們做8個項目,對應的是1個文件,還是8個文件?肯定是8個!

    Maven是如何幫我們進行項目資源管理的呢?

    • 通過依賴管理
    • 所謂依賴管理就是maven對項目所有依賴資源的一種管理,它和項目之間是一種雙向關系,當我們做項目的時候maven的依賴管理可以幫助你去管理你所需要的其他資源,當其他的項目需要依賴我們項目的時候,maven也會把我們的項目當作一種資源去進行管理,這就是一種雙向關系。

    Maven的依賴管理資源存在哪兒呢?

    • 本地倉庫私服、中央倉庫
    • 本地倉庫顧名思義就是存儲在本地的一種資源倉庫,如果本地倉庫中沒有相關資源,可以去私服上獲取,私服也是一個資源倉庫,只不過不在本地,是一種遠程倉庫,如果私服上也沒有相關資源,可以去中央倉庫去獲取,中央倉庫也是一種遠程倉庫。
    • Maven除了幫我們管理項目資源之外還能幫助我們對項目進行構建,管理項目的整個生命周期,當然它的這些功能需要使用一些相關的插件來完成,當然整個生命周期過程中插件是需要配合使用的,單獨一個無法完成完整的生命周期。

    Maven的作用:

  • 項目構建:提供標準的,跨平臺的自動化構建項目的方式
  • 依賴管理:方便快捷的管理項目依賴的資源(jar包),避免資源間的版本沖突等問題
  • 統一開發結構:提供標準的,統一的項目開發結構
  • 各目錄存放資源類型說明:

    • src/main/java:項目java源碼
    • src/main/resources:項目的相關配置文件(比如mybatis配置,xml映射配置,自定義配置文件等)
    • src/main/webapp:web資源(比如html,css,js等)
    • src/test/java:測試代碼
    • src/test/resources:測試相關配置文件
    • src/pom.xml:項目pom文件

    Maven環境搭建:

    maven的官網:http://maven.apache.org/
    官方下載地址:http://maven.apache.org/download.cgi

    maven各目錄結構說明:

    • bin:可執行程序目錄
    • boot:maven自身的啟動加載器
    • conf:maven配置文件的存放目錄
    • lib:maven運行所需庫的存放目錄

    Win系統環境配置:

  • 我的電腦-------->屬性--------->高級系統設置---------->新建系統變量MAVEN_HOME

    新建系統環境變量MAVEN_HOME然后輸入maven所在的路徑
  • 系統變量值就是maven軟件的根目錄

  • 環境變量配置好之后需要測試環境配置結果,在DOS命令窗口下輸入以下命令查看輸出,如果能夠看到輸出的maven的版本信息代表配置成功
  • mvn -v

    MacOs系統配置:

    官網下載:https://maven.apache.org/download.cgi

  • 下載好將里面的apache-maven-3.6.1-bin.tar.gz解壓到指定目錄
  • 找個方便的層級不深的目錄新建文件夾,里面創建一個repository文件夾用作本地倉庫,再把maven里conf下的settings.xml拷貝過來
  • 然后編輯conf下的settings.xml配置文件(兩個配置文件要一致),添加本地倉庫和阿里鏡像,放在<mirrors>里,本地倉庫的隨便放
  • 全局settings與局部settings:

    • 全局settings:當前計算機中Maven公共配置
    • 局部settings:當前用戶的配置(本地倉庫就是局部的)

    把settings文件里默認加的mirror標簽注釋掉,換成下面的阿里云的鏡像在國內使用會快一點

    換成下面這個

    <!-- 配置阿里云鏡像 --><mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror></mirrors><!-- 本地倉庫 --><localRepository>這里寫你的本地倉庫路徑,例:/Users/itzhuzhu/Desktop/Java/maven/repository</localRepository>
  • 打開終端輸入vim ~/.bash_profile添加maven路徑信息,最后面兩行就是
  • # maven配置 export MAVEN_HOME=/Users/itzhuzhu/Desktop/Java/maven/apache-maven-3.8.4 export PATH=$PATH:$MAVEN_HOME/bin
  • 退出以后執行source .bash_profile刷新一下,然后輸入mvn -v顯示下面這樣的就是配置成功
  • itzhuzhu@itzhuzhudeMacBook-Pro ~ % source .bash_profileitzhuzhu@itzhuzhudeMacBook-Pro ~ % mvn -v Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537) Maven home: /Users/itzhuzhu/Desktop/Java/maven/apache-maven-3.8.4 Java version: 11.0.13, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-11.0.13.jdk/Contents/Home Default locale: zh_CN_#Hans, platform encoding: UTF-8 OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

    倉庫:

    • 倉庫:用于存儲資源,主要是各種jar包
    • 中央倉庫:maven團隊自身維護的倉庫,里面所有的jar包都是開源的
    • 私服:各公司/部門等小范圍內存儲資源的倉庫,私服也可以從中央倉庫獲取資源
      • 私服的作用:
    • 保存具有版權的資源,包含購買或自主研發的jar
    • 解決遠程訪問中中央倉庫速度慢的問題
    • 一定范圍內共享資源,能做到僅對內不對外開放
    • 本地獲取私服的,私服有了就直接返回,沒有的話才去中央倉庫獲取
    • 本地倉庫:開發者自己電腦上存儲資源的倉庫,也可從遠程倉庫獲取資源

    坐標:

    坐標:maven中的坐標用于描述倉庫中資源的位置
    https://repo1.maven.org/maven2/
    maven坐標的作用:

    使用唯一標識,唯一性定義資源位置,通過該標識可以將資源的識別與下載工作交由機器完成。

    maven坐標的主要組成如下:

    • groupId:定義當前資源隸屬組織名稱(通常是域名反寫,如:org.mybatis;com.itheima)

    • artifactId:定義當前資源的名稱(通常是項目或模塊名稱,如:crm,sms)

    • version:定義當前資源的版本號

    • packaging:定義資源的打包方式,取值一般有如下三種

    • jar:該資源打成jar包,默認是jar
    • war:該資源打成war包
    • pom:該資源是一個父資源(表明使用maven分模塊管理),打包時只生成一個pom.xml不生成jar或其他包結構

    如果要查詢maven某一個資源的坐標,可以去maven的倉庫進行查詢,https://mvnrepository.com/,在該網站中可直接搜索想要的資源,然后就能得到該資源的坐標

    maven構建命令:

    maven的構建命令以mvn開頭,后面添加功能參數,可以一次性執行多個命令,用空格分離,這些在idea不需要手動。

    mvn compile:編譯

    • 編譯完成后在項目project-java下多了一個目錄target,在這個目錄下就存放的是maven編譯好的一些東西和字節碼文件

    mvn clean:清理

    • 需要刪除這些文件執行mvn clean命令即可,清理掉后target目錄也就消失了

    mvn test:測試

    • 其中產生的test-classes就是測試代碼的字節碼文件,surefire-reports是它產生的測試報告

    mvn package:打包

    • 執行測試包中的測試程序,只需執行mvn test命令即可

    mvn install:安裝到本地倉庫

    • 輸出會發現mvn install命令執行的時候也會將前面的命令都執行一遍
    • maven是按照groupId/artifactId/version的結構在本地倉庫進行存儲

    idea配置maven:

  • 新建java項目選擇maven

  • 新建web項目選擇這個

  • 打開idea的設置搜索maven,然后修改下面三個地址就可以了

  • 創建好了以后檢查maven工程的格式和依賴

  • pom解析:

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><!--指定pom模型的版本--><modelVersion>4.0.0</modelVersion><!--打包方式,web打wer包,java打jar包--><packaging>war</packaging><name>untitled2</name><!--組織名--><groupId>org.example</groupId><!--項目名--><artifactId>untitled2</artifactId><!--版本--><version>1.0-SNAPSHOT</version><!--設置當前工程所有依賴--><dependencies><!--具體的依賴--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><!--構建--><build><!--設置插件--><plugins><!--具體的插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat-maven-plugin-it</artifactId><version>2.1</version></plugin></plugins></build></project>

    檢查maven是否可以下載:

    經過我無數小時的報錯我總結了報錯原因大多數是以下幾點:

  • 標簽的位置不對
  • 使用的是遠程倉庫,導致下載不了,解決辦法就是settings.xml加阿里鏡像,要放在 標簽里
  • 配置本地倉庫,兩邊的settings.xml文件要一致
  • idea配置全局maven路徑
  • 在電腦上查找.m2的文件夾,直接給它全部干掉
  • 再查找一下.lastUpdate這種文件,全部給它干掉
  • 把下面常用的jar導入測試下載速度:

    <dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.3</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.12.0-rc1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.12.0-rc1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.0-rc1</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest</artifactId><version>2.2</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-all</artifactId><version>1.3</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-library</artifactId><version>2.2</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.4</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>com.jolbox</groupId><artifactId>bonecp</artifactId><version>0.8.0.RELEASE</version></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.6.8</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.29</version></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.3.175</version></dependency><dependency><groupId>org.hsqldb</groupId><artifactId>hsqldb</artifactId><version>2.3.2</version></dependency><dependency><groupId>com.fasterxml.jackson.jaxrs</groupId><artifactId>jackson-jaxrs-xml-provider</artifactId><version>2.3.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.39</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-core</artifactId><version>2.2.2</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-jsp</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-servlet</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-template</artifactId><version>2.2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version><scope>provided</scope></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version><scope>provided</scope></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.0.2.RELEASE</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.0.2.RELEASE</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-messaging</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument-tomcat</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc-portlet</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId><version>4.0.2.RELEASE</version></dependency><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.7.4</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>3.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>3.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>3.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.webflow</groupId><artifactId>spring-webflow</artifactId><version>2.3.2.RELEASE</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>javax.el</artifactId><version>2.2.3</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-asm</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jul-to-slf4j</artifactId><version>1.7.6</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.1</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.logback-extensions</groupId><artifactId>logback-ext-spring</artifactId><version>0.1.1</version></dependency></dependencies>

    Maven依賴管理:

    依賴是指在當前項目中運行所需的jar,依賴配置的格式如下圖

    依賴傳遞:

    依賴傳遞:

  • 直接依賴:在當前項目中通過依賴配置建立的依賴關系
  • 間接依賴:被依賴的資源如果依賴其他資源,則表明當前項目間接依賴其他資源
  • 直接依賴和間接依賴其實也是一個相對關系
  • 項目A想用項目B的東西,只需要把項目B的坐標加在pom文件里就可以了,如果項目B還用到了項目C的東西,在項目A也是可以用的

    <dependencies><!--項目2的坐標--><dependency><groupId>org.example</groupId><artifactId>maven01</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>

    依賴傳遞的沖突問題:

    在依賴傳遞過程中產生了沖突,我們有三種優先法則

  • 路徑優先:當依賴中出現相同資源時,層級越深,優先級越低,反之則越高
  • 聲明優先:當資源在相同層級被依賴時,配置順序靠前的覆蓋靠后的
  • 特殊優先:當同級配置了相同資源的不同版本時,后配置的覆蓋先配置的
  • 可選依賴

    加optional標簽,設為true,

    作用:不想讓別人知道自己用的maven用了什么就用可選

    <dependencies><dependency><groupId>org.example</groupId><artifactId>maven01</artifactId><version>1.0-SNAPSHOT</version><optional>true</optional></dependency></dependencies>

    排除依賴:

    加exclusions,復制要排除的資源信息
    作用:排除依賴指主動斷開依賴的資源,被排除的資源無需執行版本,依賴傳過來不想用,就加這個

    <dependencies><dependency><!--項目2的文件--><groupId>org.example</groupId><artifactId>maven01</artifactId><version>1.0-SNAPSHOT</version><optional>true</optional><exclusions><exclusion><groupId>junit</groupId><artifactId>junit</artifactId></exclusion></exclusions></dependency></dependencies>

    依賴范圍:

    依賴的jar默認情況可以在任何地方可用,可以通過scope標簽設定其作用范圍

    這里的范圍主要是指以下三種范圍

  • 主程序范圍有效(src/main目錄范圍內)
  • 測試程序范圍內有效(src/test目錄范圍內)
  • 是否參與打包(package指令范圍內)
  • 此外:scope標簽的取值有四種:compile,test,provided,runtime

    這四種取值與范圍的對應情況如下:

    依賴范圍的傳遞性:

    Maven生命周期:

    maven的構建生命周期描述的是一次構建過程經歷了多少個事件

    生命周期是運行的階段,插件是為了支持聲明周期存在,構建過程就是靠這倆的

  • clean:清理工作
  • pre-clean:執行一些在clean之前的工作

    clean:移除上一次構建產生的所有文件

    post-clean:執行一些在clean之后立刻完成的工作

  • default:核心工作,例如編譯,測試,打包,部署等
  • 執行test那就把test前面所有的都執行一遍,執行default就把default前面的都執行一遍,以此類推

  • site:產生報告,發布站點等
  • pre-site:執行一些在生成站點文檔之前的工作
    site:生成項目的站點文檔
    post-site:執行一些在生成站點文檔之后完成的工作,為部署做準備
    site-deploy:將生成的站點文檔部署到特定的服務器上

    插件:

    • 插件與生命周期內的階段綁定,在執行到對應生命周期時執行對應的插件
    • maven默認在各個生命周期上都綁定了預先設定的插件來完成相應功能
    • 插件還可以完成一些自定義功能

    插件的配置方式如下:

    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.4</version><executions><execution><goals><!-- 可以打多個包 --><goal>jar</goal><goal>test-jar</goal></goals><phase>generate-test-resources</phase></execution></executions></plugin></plugins>

    在maven官網中有對插件的介紹:

    http://maven.apache.org/plugins/index.html

    總結

    以上是生活随笔為你收集整理的Maven入门详解与安装配置的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。