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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

闭关修炼(十八)maven

發(fā)布時(shí)間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 闭关修炼(十八)maven 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

回家了,好鵺~

之前寫(xiě)了一篇關(guān)于maven的介紹和安裝
https://blog.csdn.net/qq_19841133/article/details/109479902


文章目錄

  • Maven概述
    • 作用
      • 依賴(lài)管理
      • 項(xiàng)目構(gòu)建功能
    • 傳統(tǒng)項(xiàng)目
    • 倉(cāng)庫(kù)類(lèi)型
    • maven的配置
    • pom文件
  • maven約定(項(xiàng)目結(jié)構(gòu))
  • 安裝和配置maven
    • 添加鏡像
  • java工程轉(zhuǎn)換為maven工程
    • 良好習(xí)慣
  • maven常用命令
    • mvn complie
    • mvn clean
    • mvn package
    • mvn install
  • maven依賴(lài)
    • 引用本地倉(cāng)庫(kù)
    • 引用中央倉(cāng)庫(kù)
  • maven建立模塊功能
    • 什么是多模塊功能
    • 例子
  • jar包沖突問(wèn)題解決
    • 什么是jar包沖突
    • 使用Maven Helper
  • 私服搭建


Maven概述

Maven 即項(xiàng)目對(duì)象模型(POM,Project Object Model),它可以通過(guò)一小段描述信息來(lái)管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的項(xiàng)目管理工具軟件。

它包含了一個(gè)項(xiàng)目對(duì)象模型,一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周(Project Lifecycle),一個(gè)依賴(lài)管理系統(tǒng)(Dependency Management System)。

java互聯(lián)網(wǎng)級(jí)項(xiàng)目基本使用maven進(jìn)行項(xiàng)目管理。

RPC遠(yuǎn)程調(diào)用:dubbo接口項(xiàng)目直接發(fā)布私服倉(cāng)庫(kù),別人要使用直接去私服拉取即可

作用

依賴(lài)管理

Maven 的核心特性就是依賴(lài)管理。在傳統(tǒng)項(xiàng)目開(kāi)發(fā)中,必須將工程所依賴(lài)的 jar 包導(dǎo)入到工程中,隨著工程規(guī)模變大,jar 包的管理變得非常困難,而且工程也變得越來(lái)越大。

Maven 項(xiàng)目管理工具可以自如地應(yīng)對(duì)這些問(wèn)題。

它不直接將 jar 包導(dǎo)入到工程中,而是通過(guò)在 pom.xml 文件中添加所需 jar 包的坐標(biāo),引入對(duì)該 jar 包的依賴(lài)。

這樣就很好的避免了將 jar 直接復(fù)制到項(xiàng)目中,而是在需要用到 jar 包的時(shí)候,去查找pom.xml 文件中的坐標(biāo),到一個(gè)專(zhuān)門(mén)用于存放 jar 包的倉(cāng)庫(kù)(maven 倉(cāng)庫(kù))中,根據(jù)坐標(biāo)找到并使用這些 jar 包。

項(xiàng)目構(gòu)建功能

一步構(gòu)建。

實(shí)際應(yīng)用中的項(xiàng)目,往往都要經(jīng)歷編譯、測(cè)試、運(yùn)行、打包、安裝、部署等一系列項(xiàng)目構(gòu)建過(guò)程。Maven 具有項(xiàng)目構(gòu)建功能,可以對(duì)項(xiàng)目從編譯、測(cè)試、運(yùn)行、打包、安裝、部署整個(gè)過(guò)程進(jìn)行管理,非常方便。

傳統(tǒng)項(xiàng)目

傳統(tǒng)方式加入jar包放入web-inf lib文件夾,各個(gè)項(xiàng)目都要添加相同的jar包,占用硬盤(pán)資源。

需要去官網(wǎng)下載jar包

項(xiàng)目整合需要解決jar包沖突,自己找對(duì)應(yīng)的版本的jar。

倉(cāng)庫(kù)類(lèi)型

本地倉(cāng)庫(kù):本機(jī)上的倉(cāng)庫(kù),用來(lái)存儲(chǔ)從遠(yuǎn)程倉(cāng)庫(kù)或中央倉(cāng)庫(kù)下載的插件和 jar 包,當(dāng)項(xiàng)目使用一些插件或 jar 包時(shí),優(yōu)先從本地倉(cāng)庫(kù)查找

遠(yuǎn)程倉(cāng)庫(kù):如果項(xiàng)目需要插件或者 jar 包,本地倉(cāng)庫(kù)中沒(méi)有,默認(rèn)去遠(yuǎn)程倉(cāng)庫(kù)下載。遠(yuǎn)程倉(cāng)庫(kù)可以在互聯(lián)網(wǎng)內(nèi),也可以在局域網(wǎng)內(nèi)。

中央倉(cāng)庫(kù): 在 Maven 中內(nèi)置一個(gè)遠(yuǎn)程倉(cāng)庫(kù)地址
http://repo1.maven.org/maven2 ,它是中央倉(cāng)庫(kù),服務(wù)于整個(gè)互聯(lián)網(wǎng),由Maven 團(tuán)隊(duì)自己維護(hù),包含了世界上大部分流行的開(kāi)源項(xiàng)目構(gòu)件。

私服:企業(yè)自行搭建的倉(cāng)庫(kù),供企業(yè)內(nèi)部使用;

其他公共庫(kù):如阿里云倉(cāng)庫(kù)。如果下載官方倉(cāng)庫(kù)的庫(kù)太慢可以修改setting.xml鏡像到阿里云倉(cāng)庫(kù)

maven的配置


bin中存放可執(zhí)行的二進(jìn)制文件
conf存放setting.xml
lib運(yùn)行maven所依賴(lài)的jar包

pom文件

管理依賴(lài)信息,管理jar包信息

maven約定(項(xiàng)目結(jié)構(gòu))

即maven項(xiàng)目結(jié)構(gòu)
src/main
src/main/java: 存放核心編寫(xiě)hava文件
src/main/resources: 存放配置文件

src/test
src/test/java:測(cè)試java編寫(xiě)代碼文件,不會(huì)提交
src/test/resources:測(cè)試配置文件

安裝和配置maven

idea自帶有,可以省略。

以前的博客有寫(xiě),看之前的吧

https://blog.csdn.net/qq_19841133/article/details/109479902

添加鏡像

(如果要添加私服地址也是在這里加)

阿里云鏡像:

<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror>

打開(kāi)settings.xml 復(fù)制進(jìn)去

java工程轉(zhuǎn)換為maven工程

先創(chuàng)建一個(gè)傳統(tǒng)的java工程

創(chuàng)建好了一個(gè)傳統(tǒng)的java項(xiàng)目,把src文件夾刪掉

改成maven結(jié)構(gòu)

右鍵項(xiàng)目目錄,添加項(xiàng)目支持

把maven加上,確定

編輯pom文件

然后修改項(xiàng)目版本,一般都是4.0.0不用改,寫(xiě)上自己的團(tuán)隊(duì)id和jar包id,團(tuán)隊(duì)id是com.xxx或者xxx.xxx隨意起,jar包id為自己的項(xiàng)目名,版本寫(xiě)當(dāng)前版本比如1.0

<?xml version="1.0" encoding="UTF-8"?> <?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/xsd/maven-4.0.0.xsd"><!-- 項(xiàng)目版本 --><modelVersion>4.0.0</modelVersion><!-- 團(tuán)隊(duì)id--><groupId>com.yyz</groupId><!-- jar包唯一id--><artifactId>traditional-project-change-to-maven</artifactId><!-- 版本--><version>1.0</version> </project>

良好習(xí)慣

寫(xiě)main/java代碼去test下進(jìn)行單元和集成測(cè)試

maven常用命令

打開(kāi)cmd

進(jìn)入項(xiàng)目根目錄

輸入 mvn compile

根目錄下會(huì)生成target目錄

target目錄是目標(biāo)輸出目錄,classes目錄存放編譯的class文件

其實(shí)不用開(kāi)cmd這么麻煩,用idea直接可以操作了,點(diǎn)m圖標(biāo)選命令直接操作

mvn complie

編譯項(xiàng)目,剛剛演示過(guò)了

mvn clean

清除操作

輸入mvn clean指令

target目錄就被清除掉了

mvn package

項(xiàng)目編譯并打包

打開(kāi)target文件夾,最下面就能發(fā)現(xiàn)項(xiàng)目的jar包了


寫(xiě)在后面,war包屬于web項(xiàng)目的打包,打war包就可以發(fā)布到tomcat中去了,tomcat自動(dòng)解壓war包,而springboot打包又是jar包,這是因?yàn)閟pring boot中自帶了tomcat,直接可以把它看成一個(gè)應(yīng)用程序作所以為jar包打包了。

在pom.xml可以選擇當(dāng)前項(xiàng)目是什么類(lèi)型的,標(biāo)簽為<packaging>,類(lèi)型有jar、war、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/xsd/maven-4.0.0.xsd"><!-- 項(xiàng)目版本 --><modelVersion>4.0.0</modelVersion><!-- 團(tuán)隊(duì)id--><groupId>com.yyz</groupId><!-- jar包唯一id--><artifactId>traditional-project-change-to-maven</artifactId><!-- 版本--><version>1.0</version><!-- 選擇當(dāng)前項(xiàng)目類(lèi)型--><packaging>jar</packaging><dependencies></dependencies></project>

mvn install

將項(xiàng)目發(fā)布到本地倉(cāng)庫(kù),這次用idea操作


打開(kāi)自己的本地倉(cāng)庫(kù)

就能發(fā)現(xiàn)自己的包


maven依賴(lài)

引用本地倉(cāng)庫(kù)

再新建一個(gè)maven項(xiàng)目,試著引入自己的jar包

添加dependency標(biāo)簽,使用groupId、artifactId、version坐標(biāo)引用自己jar包

<?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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>maven-test-reference-my-package</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.yyz</groupId><artifactId>traditional-project-change-to-maven</artifactId><version>1.0</version></dependency></dependencies> </project>

在test文件夾進(jìn)行測(cè)試

沒(méi)問(wèn)題行了

引用中央倉(cāng)庫(kù)

在這網(wǎng)址里搜索所需的jar包,引入進(jìn)pom文件即可
https://mvnrepository.com/

搜索jar包

選擇版本

復(fù)制dependency

快速跳過(guò),都會(huì)了都會(huì)了

maven建立模塊功能

什么是多模塊功能

工程在多數(shù)情況下是多模塊化的

項(xiàng)目一般在java目錄下有很多包,比如pojo、service、mapper、controller,很多分層的包都放在一個(gè)項(xiàng)目中,這樣其實(shí)是不好的,如果項(xiàng)目多了,要重用一個(gè)接口或者函數(shù),就在每個(gè)項(xiàng)目中重復(fù)拷貝,不便于修改,不能解決復(fù)用問(wèn)題。

在大公司中會(huì)將一個(gè)項(xiàng)目分成多個(gè)子項(xiàng)目,如分成utils、service、web等子項(xiàng)目,子項(xiàng)目頂層是父工程parent。

子項(xiàng)目都繼承parent工程,子項(xiàng)目之間循環(huán)依賴(lài),controll依賴(lài)service,service依賴(lài)mapper。

這么做子項(xiàng)目都可以打包成一個(gè)jar提供給其他團(tuán)隊(duì)進(jìn)行調(diào)用。dubbo服務(wù)化基本都是這樣maven管理

例子

先創(chuàng)建一個(gè)maven項(xiàng)目作為父工程

編輯父工程的pom文件,修改項(xiàng)目類(lèi)型為pom,pom是給子項(xiàng)目繼承用的意思

然后隨便引用一些jar包,模擬真實(shí)的環(huán)境

右鍵根目錄,新建module,選擇maven項(xiàng)目

idea自動(dòng)幫我設(shè)置好了parent

pom文件也自動(dòng)生成了parent標(biāo)簽

當(dāng)然可以自己新建maven項(xiàng)目,然后自己在pom文件添加parent標(biāo)簽標(biāo)識(shí)這個(gè)項(xiàng)目是子項(xiàng)目。

<parent><artifactId>multi-module-parent-test</artifactId><groupId>com.yyz</groupId><version>1.0</version> </parent>

此時(shí)父工程會(huì)多加modules標(biāo)簽標(biāo)識(shí)自己被繼承的子項(xiàng)目

改成web項(xiàng)目,之后添加web應(yīng)用支持,packaging改成war

如果web文件夾沒(méi)有小藍(lán)點(diǎn),對(duì)項(xiàng)目按F4,彈出project structure


點(diǎn)選Web

在右邊把網(wǎng)頁(yè)資源目錄 web resource direction改一下

改成你的web文件夾

重啟tomcat,顯示主頁(yè)正常即可

其他子項(xiàng)目controller、service、mapper同理,packaging方式默認(rèn)為jar,可以不用加

jar包沖突問(wèn)題解決

什么是jar包沖突

具體的說(shuō),在你的項(xiàng)目中,使用了兩個(gè)Jar包,分別是A和B。現(xiàn)在A需要依賴(lài)另一個(gè)Jar包C,B也需要依賴(lài)C。但是A依賴(lài)的C的版本是1.0,B依賴(lài)的C的版本是2.0。這時(shí)候,Maven會(huì)將這1.0的C和2.0的C都下載到你的項(xiàng)目中,這樣你的項(xiàng)目中就存在了不同版本的C,這時(shí)Maven會(huì)依據(jù)依賴(lài)路徑最短優(yōu)先原則,來(lái)決定使用哪個(gè)版本的Jar包,而另一個(gè)無(wú)用的Jar包則未被使用,這就是所謂的依賴(lài)沖突。

比如log4j,log4j-core本身是依賴(lài)了log4j-api的,但是因?yàn)橐恍┢渌哪K也依賴(lài)了log4j-api,并且兩個(gè)log4j-api版本不同,所以我們使用<exclusion>標(biāo)簽排除掉log4j-core所依賴(lài)的log4j-api,這樣Maven就不會(huì)下載log4j-core所依賴(lài)的log4j-api了,也就保證了我們的項(xiàng)目中只有一個(gè)版本的log4j-api。

<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.10.0</version><exclusions><exclusion><artifactId>log4j-api</artifactId><groupId>org.apache.logging.log4j</groupId></exclusion></exclusions> </dependency>

使用Maven Helper

它是idea的一個(gè)插件,可以自己去裝一下

在插件安裝好之后,我們打開(kāi)pom.xml文件,在底部會(huì)多出一個(gè)Dependency Analyzer選項(xiàng)



右邊如果有沖突的依賴(lài)會(huì)標(biāo)紅, 找到標(biāo)紅的依賴(lài),點(diǎn)擊右鍵,然后選擇Exclude即可排除沖突版本的Jar包即可

私服搭建

neuxs搭建。

沒(méi)用過(guò),也不需要…

放篇博客有空再學(xué)習(xí)下…h(huán)ttps://www.cnblogs.com/knowledgesea/p/11190579.html

總結(jié)

以上是生活随笔為你收集整理的闭关修炼(十八)maven的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。