闭关修炼(十八)maven
回家了,好鵺~
之前寫了一篇關于maven的介紹和安裝
https://blog.csdn.net/qq_19841133/article/details/109479902
文章目錄
- Maven概述
- 作用
- 依賴管理
- 項目構建功能
- 傳統項目
- 倉庫類型
- maven的配置
- pom文件
- maven約定(項目結構)
- 安裝和配置maven
- 添加鏡像
- java工程轉換為maven工程
- 良好習慣
- maven常用命令
- mvn complie
- mvn clean
- mvn package
- mvn install
- maven依賴
- 引用本地倉庫
- 引用中央倉庫
- maven建立模塊功能
- 什么是多模塊功能
- 例子
- jar包沖突問題解決
- 什么是jar包沖突
- 使用Maven Helper
- 私服搭建
Maven概述
Maven 即項目對象模型(POM,Project Object Model),它可以通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件。
它包含了一個項目對象模型,一組標準集合,一個項目生命周(Project Lifecycle),一個依賴管理系統(Dependency Management System)。
java互聯網級項目基本使用maven進行項目管理。
RPC遠程調用:dubbo接口項目直接發布私服倉庫,別人要使用直接去私服拉取即可
作用
依賴管理
Maven 的核心特性就是依賴管理。在傳統項目開發中,必須將工程所依賴的 jar 包導入到工程中,隨著工程規模變大,jar 包的管理變得非常困難,而且工程也變得越來越大。
Maven 項目管理工具可以自如地應對這些問題。
它不直接將 jar 包導入到工程中,而是通過在 pom.xml 文件中添加所需 jar 包的坐標,引入對該 jar 包的依賴。
這樣就很好的避免了將 jar 直接復制到項目中,而是在需要用到 jar 包的時候,去查找pom.xml 文件中的坐標,到一個專門用于存放 jar 包的倉庫(maven 倉庫)中,根據坐標找到并使用這些 jar 包。
項目構建功能
一步構建。
實際應用中的項目,往往都要經歷編譯、測試、運行、打包、安裝、部署等一系列項目構建過程。Maven 具有項目構建功能,可以對項目從編譯、測試、運行、打包、安裝、部署整個過程進行管理,非常方便。
傳統項目
傳統方式加入jar包放入web-inf lib文件夾,各個項目都要添加相同的jar包,占用硬盤資源。
需要去官網下載jar包
項目整合需要解決jar包沖突,自己找對應的版本的jar。
倉庫類型
本地倉庫:本機上的倉庫,用來存儲從遠程倉庫或中央倉庫下載的插件和 jar 包,當項目使用一些插件或 jar 包時,優先從本地倉庫查找
遠程倉庫:如果項目需要插件或者 jar 包,本地倉庫中沒有,默認去遠程倉庫下載。遠程倉庫可以在互聯網內,也可以在局域網內。
中央倉庫: 在 Maven 中內置一個遠程倉庫地址
http://repo1.maven.org/maven2 ,它是中央倉庫,服務于整個互聯網,由Maven 團隊自己維護,包含了世界上大部分流行的開源項目構件。
私服:企業自行搭建的倉庫,供企業內部使用;
其他公共庫:如阿里云倉庫。如果下載官方倉庫的庫太慢可以修改setting.xml鏡像到阿里云倉庫
maven的配置
bin中存放可執行的二進制文件
conf存放setting.xml
lib運行maven所依賴的jar包
pom文件
管理依賴信息,管理jar包信息
maven約定(項目結構)
即maven項目結構
src/main
src/main/java: 存放核心編寫hava文件
src/main/resources: 存放配置文件
src/test
src/test/java:測試java編寫代碼文件,不會提交
src/test/resources:測試配置文件
安裝和配置maven
idea自帶有,可以省略。
以前的博客有寫,看之前的吧
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>打開settings.xml 復制進去
java工程轉換為maven工程
先創建一個傳統的java工程
創建好了一個傳統的java項目,把src文件夾刪掉
改成maven結構
右鍵項目目錄,添加項目支持
把maven加上,確定
編輯pom文件
然后修改項目版本,一般都是4.0.0不用改,寫上自己的團隊id和jar包id,團隊id是com.xxx或者xxx.xxx隨意起,jar包id為自己的項目名,版本寫當前版本比如1.0
良好習慣
寫main/java代碼去test下進行單元和集成測試
maven常用命令
打開cmd
進入項目根目錄
輸入 mvn compile
根目錄下會生成target目錄
target目錄是目標輸出目錄,classes目錄存放編譯的class文件
其實不用開cmd這么麻煩,用idea直接可以操作了,點m圖標選命令直接操作
mvn complie
編譯項目,剛剛演示過了
mvn clean
清除操作
輸入mvn clean指令
target目錄就被清除掉了
mvn package
項目編譯并打包
打開target文件夾,最下面就能發現項目的jar包了
寫在后面,war包屬于web項目的打包,打war包就可以發布到tomcat中去了,tomcat自動解壓war包,而springboot打包又是jar包,這是因為spring boot中自帶了tomcat,直接可以把它看成一個應用程序作所以為jar包打包了。
在pom.xml可以選擇當前項目是什么類型的,標簽為<packaging>,類型有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"><!-- 項目版本 --><modelVersion>4.0.0</modelVersion><!-- 團隊id--><groupId>com.yyz</groupId><!-- jar包唯一id--><artifactId>traditional-project-change-to-maven</artifactId><!-- 版本--><version>1.0</version><!-- 選擇當前項目類型--><packaging>jar</packaging><dependencies></dependencies></project>mvn install
將項目發布到本地倉庫,這次用idea操作
打開自己的本地倉庫
就能發現自己的包
maven依賴
引用本地倉庫
再新建一個maven項目,試著引入自己的jar包
添加dependency標簽,使用groupId、artifactId、version坐標引用自己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文件夾進行測試
沒問題行了
引用中央倉庫
在這網址里搜索所需的jar包,引入進pom文件即可
https://mvnrepository.com/
搜索jar包
選擇版本
復制dependency
快速跳過,都會了都會了
maven建立模塊功能
什么是多模塊功能
工程在多數情況下是多模塊化的
項目一般在java目錄下有很多包,比如pojo、service、mapper、controller,很多分層的包都放在一個項目中,這樣其實是不好的,如果項目多了,要重用一個接口或者函數,就在每個項目中重復拷貝,不便于修改,不能解決復用問題。
在大公司中會將一個項目分成多個子項目,如分成utils、service、web等子項目,子項目頂層是父工程parent。
子項目都繼承parent工程,子項目之間循環依賴,controll依賴service,service依賴mapper。
這么做子項目都可以打包成一個jar提供給其他團隊進行調用。dubbo服務化基本都是這樣maven管理
例子
先創建一個maven項目作為父工程
編輯父工程的pom文件,修改項目類型為pom,pom是給子項目繼承用的意思
然后隨便引用一些jar包,模擬真實的環境
右鍵根目錄,新建module,選擇maven項目
idea自動幫我設置好了parent
pom文件也自動生成了parent標簽
當然可以自己新建maven項目,然后自己在pom文件添加parent標簽標識這個項目是子項目。
此時父工程會多加modules標簽標識自己被繼承的子項目
改成web項目,之后添加web應用支持,packaging改成war
如果web文件夾沒有小藍點,對項目按F4,彈出project structure
點選Web
在右邊把網頁資源目錄 web resource direction改一下
改成你的web文件夾
重啟tomcat,顯示主頁正常即可
其他子項目controller、service、mapper同理,packaging方式默認為jar,可以不用加
jar包沖突問題解決
什么是jar包沖突
具體的說,在你的項目中,使用了兩個Jar包,分別是A和B。現在A需要依賴另一個Jar包C,B也需要依賴C。但是A依賴的C的版本是1.0,B依賴的C的版本是2.0。這時候,Maven會將這1.0的C和2.0的C都下載到你的項目中,這樣你的項目中就存在了不同版本的C,這時Maven會依據依賴路徑最短優先原則,來決定使用哪個版本的Jar包,而另一個無用的Jar包則未被使用,這就是所謂的依賴沖突。
比如log4j,log4j-core本身是依賴了log4j-api的,但是因為一些其他的模塊也依賴了log4j-api,并且兩個log4j-api版本不同,所以我們使用<exclusion>標簽排除掉log4j-core所依賴的log4j-api,這樣Maven就不會下載log4j-core所依賴的log4j-api了,也就保證了我們的項目中只有一個版本的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的一個插件,可以自己去裝一下
在插件安裝好之后,我們打開pom.xml文件,在底部會多出一個Dependency Analyzer選項
右邊如果有沖突的依賴會標紅, 找到標紅的依賴,點擊右鍵,然后選擇Exclude即可排除沖突版本的Jar包即可
私服搭建
neuxs搭建。
沒用過,也不需要…
放篇博客有空再學習下…https://www.cnblogs.com/knowledgesea/p/11190579.html
總結
以上是生活随笔為你收集整理的闭关修炼(十八)maven的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闭关修炼(九)注解
- 下一篇: 关于嵌入式的技术竞争力