筆記12:maven專案管理工具
阿新 • • 發佈:2020-07-20
maven基礎
maven開發專案 jar包不在專案中 配置jar包的座標
---依賴管理:
maven工程對jar包的管理過程
---maven構建
專案從編譯、測試、執行、打包、安裝、部署整個過程交給maven進行管理
---尋找jar包
配置檔案座標 --》系統盤找本地倉庫 --》(本地倉庫未找到並聯網)到中央倉庫(放置了幾乎所有開源的jar包)下載
--》(本地倉庫未找到並在同一區域網)遠端倉庫(私服)(jar包沒有則到中央倉庫)^
---倉庫三類:【本地】 【遠端(私服)】 【中央倉庫】
---專案部分:【核心程式碼】 【配置檔案】 【測試程式碼】 【測試配置檔案】
---Maven專案標準目錄結構:
src/main/java 核心程式碼
src/main/resources 配置檔案
src/test/java 測試程式碼部分
src/test/resources 測試配置檔案
src/main/webapp 頁面資源,js、css、圖片等等
---maven兩大核心功能
依賴管理
一鍵構建
---maven常用命令
【clean清理】 清理專案編譯所有資訊 【compile編譯】 把src/main/java下的類檔案編譯為class檔案 【test測試】 把src/main/java和src/test/java下的類檔案都編譯 【package打包】 把src/main/java和src/test/java下的類檔案都編譯並打成war包 【install安裝】 把src/main/java和src/test/java下的類檔案都編譯並打成war包並把war包安裝到了本地倉庫 【deploy釋出】 不可直接執行,需要進行配置 往後的命令都會把前一個命令執行一次
---maven生命週期
清理生命週期: clean
預設生命週期: compile-->test-->package-->install-->deploy 每一個構建專案的命令都對應了maven底層一個外掛
站點生命週期:
---專案物件模型(POM)
專案自身資訊 ==》依賴管理模型 專案執行所依賴的jar包資訊 專案執行環境資訊,比如:jdk、tomcat資訊 --依賴管理模型(dependency) <dependency> <groupId>javax.servlet</groupId> //公司組織名稱:路徑 <artifactId>servlet-api</artifactId> //專案名 <version>2.5</version> //版本號 <scope>provided</scope> //jar作用域 </dependency>
---pom引入的jar包作用域 provided
compile 編譯、測試、執行有效 參與打包
test 測試 不參與打包
provided 編譯、測試 不參與打包
runtime 測試、執行
system 編譯、測試
---工程執行環境的修改
<bui1d>
<plugins>
<p1ugin><!--配置執行tomat版本-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<bersion>2.2</version>
<configuration>
<port>8888</port><!--修改埠號-->
</configuration>
</plugin>
<plugin><!--配置maven編譯外掛版本 即jdk版本-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
maven專案管理筆記
----maven:一個專案管理工具
--1-依賴管理:maven對專案中jar包的管理過程。
傳統工程==直接把jar包放置在專案中
maven工程==真正的jar包放置在倉庫中,專案中只用放置jar包的座標。
--倉庫三類:【本地】 【遠端(私服)】 【中央倉庫】
--倉庫間的關係:
1-啟動maven工程時,maven工程通過pom檔案中jar包座標去本地倉庫
2-預設情況下,如果本地倉庫沒有對應jar包並連著網,maven工程自動去中央倉庫下載jar包到本地倉庫。
3-本地倉庫沒有對應jar包,沒有網,在公司同一區域網下,會先從公司私服下載jar包
4-私服沒有jar包,可從中央倉庫下載,也可從本地上傳
--2-一鍵構建:maven自身集成了tomcat外掛,可以對專案進行編譯、測試、打包、安裝、釋出等操作。
--maven常用命令
【clean清理】 清理專案編譯所有資訊
【compile編譯】 把src/main/java下的類檔案編譯為class檔案
【test測試】 把src/main/java和src/test/java下的類檔案都編譯
【package打包】 把src/main/java和src/test/java下的類檔案都編譯並打成war包
【install安裝】 把src/main/java和src/test/java下的類檔案都編譯並打成war包並把war包安裝到了本地倉庫
【deploy釋出】 打jar包上傳到私服。不可直接執行,需要進行配置
----Maven匯入jar包衝突解決
<dependencies>
<!--maven工程要匯入jar包的座標,就必須要考慮解決jar包衝突
解決jar包衝突的方式一:
==第一宣告優先原則:那個jar包的座標靠上的位置,這個jar包就是先宣告的
先宣告的jar包座標下的依賴包,可以優先進入專案中
解決jar包衝突的方式二:
==maven匯入jar包的一些概念
==直接依賴:專案中直接匯入的jar包,就是該專案的直接依賴包
==傳遞依賴:專案中沒有直接匯入的jar包,可以通過專案直接依賴jar包傳遞到專案中去
==路徑近和優先原則。直接依賴路徑比傳遞依賴路徑近,那麼最終進入專案的jar包回事路徑近的直接依賴包
解決jar包衝突的方式三:
==當我們要排除某個jar包下依賴包,在配置exclusions標籤的時候,內部可以不寫版本號。
因為此時依賴包使用的版本和預設本直接匯入的jar包版本一樣
-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version><!--傳遞依賴:會匯入spring-core:4.2.4.RELEASE-->
<exclusions>
<exclusion><!--排除該jar包下的傳遞依賴包spring-core-->
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version><!--傳遞依賴:會匯入spring-core:5.0.2.RELEASE-->
</dependency>
<!--<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.8.RELEASE</version><!–直接依賴:會匯入spring-4.2.8.RELEASE–>
</dependency>-->
</dependencies>
----以上座標最終匯入傳遞依賴:spring-core:5.0.2.RELEASE的jar包
----該解決jar包衝突的原則不是做一次專案用一次,而是有時需要匯入一個新jar包時需要用(遵循)
----pom檔案內標籤
<!--
Maven工程是可以分父子依賴關係的。
凡是依賴別的專案後,拿到的專案的依賴包,都屬於傳遞依賴。
比如:當前a專案,被b專案依賴。那麼a專案中所有jar包都會傳遞到b專案中。
b專案開發者如果愛b專案中匯入一套ssm框架的jar包,對於b專案是直接依賴
那麼直接依賴的jar包就會把a專案傳遞過去的jar包覆蓋掉。
為了防止以上情況的出現。我們可以把a專案中主要jar包的座標鎖住,那麼其他依賴該專案的專案中,
即便有同名jar包直接依賴,也無法覆蓋。
-->
【<dependencyManagement>】== 鎖定jar包版本
如在pom檔案里加入:
<dependencyManagement>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
--是賦值一份jar包座標到該標籤裡,不是剪下,如果pom檔案外沒有jar包座標,即便鎖住也沒用,因為根本就沒有匯入該jar包
【<properties>】 定義屬性,便於統一管理。標籤內標籤名稱可隨意定義。
如在pom檔案里加入:
<!-- 定義屬性 -->
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
<mysql.version>5.1.6</mysql.version>
</properties>
<!-- 引用定義的屬性 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version><!-- 引用定義的屬性 -->
</dependency>
----xml檔案能寫啥標籤,全看檔案上面的約束
----maven工程拆分與聚合
---拆分思想:maven把一個完整的專案,分成不同獨立模組,這些模組都有各自獨立的座標。那個地方需要其中某個模組,就直接引用該模組座標即可。
今後公司開發一個新專案,先考慮的不是dao、service、utils、domain等如何編寫,而是考慮這些模組是否已經存在。如果存在,直接引用。
---聚合思想:可以把拆分零散的模組聚合到一起編寫一個完整的專案。
---工程和模組的區別:
工程不等於完整的專案,模組也不等於完整的專案,一個完整的專案看的是程式碼,
程式碼完整,就可以說這是一個完整的專案。此專案是工程和模組沒有關係。
工程只能使用自己內部的資源,工程天生是獨立的。後天可以和其他工程或模組建立關聯關係。
模組天生不是獨立的,模組天生是屬於父工程的,模組一旦建立,所有父工程的資源都可以使用。
---工程和模組關係:
1-父子工程直接,子模組天生整合父工程,可以使用父工程所有資源。
2-子模組天生之間天生沒有關係。
3-父子工程之間,不用建立關係。繼承關係是先天的,不需要手動建立。
4-平級之間的引用叫依賴,依賴不是先天的,需要後天建立。
---傳遞依賴下來的包是否能用?
--傳遞下來的包是否能用,參考如下:
-----------------------------------------------------------
直接\傳遞 compile privider runtime test
-----------------------------------------------------------
compile compile - runtime -
-----------------------------------------------------------
privider privider privider privider -
-----------------------------------------------------------
runtime runtime - runtime -
-----------------------------------------------------------
test test - test -
-----------------------------------------------------------
直接依賴:作用域==compile
傳遞依賴:作用域==test
--如果對應 - ,表示傳遞丟失。
實際開發中,如果傳遞依賴丟失,表現形式就是jar座標導不進去,做法就是直接再匯入一次。一般不會來查詢是否真的導不進去。
----私服的應用
--安裝與啟動
解壓安裝包,執行bin下nexus.bat檔案安裝服務
conf目錄下nexus.properties為主配置檔案
預設埠:8081
可以訪問圖形化介面,登入:預設賬號==admin 密碼==admin123
releases==正式版(發行版)
snapshot==測試版
hosted==第三方
proxy==代理 contral==中央倉庫
--配置group後:自動先從releases下載沒有到snapshot沒有到第三方下載沒有到中央倉庫下
--私服操作:
--程式碼傳到私服:
1-先可以登入,配置maven配置檔案server標籤下新增登入配置
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
2-待上傳程式碼模組pom.xml檔案上配置上傳配置
<distributionManagement>
<repository>
<id>releases</id> <?--注意:pom.xml 這裡<id> 和 settings.xml中配置的登入的id要一致 -->
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
3-執行maven中deploy命令
4-上傳後還是無法使用?因為能上傳不一定能下載,所以需要愛maven的配置檔案中配置下載
<!-- 下載jar包配置 -->
<profile>
<!--profile的id -->
<id>dev</id>
<repositories>
<repository> <!--倉庫id,repositories可以配置多個倉庫,保證id不重複 -->
<id>nexus</id> <!--倉庫地址,即nexus倉庫組的地址 -->
<url>http://localhost:8081/nexus/content/groups/public/</url> <!--是否下載releases構件 -->
<releases>
<enabled>true</enabled>
</releases> <!--是否下載snapshots構件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories> <!-- 外掛倉庫,maven的執行依賴外掛,也需要從私服下載外掛 -->
<pluginRepository> <!-- 外掛倉庫的id不允許重複,如果重複後邊配置會覆蓋前邊 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
<!-- 啟用下載中配置 -->
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
----安裝第三方jar包到本地倉庫
1-cmd進入jar包所在目錄執行
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
2-開啟cmd直接執行
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\jar包\fastjson-1.1.37.jar(jar包所在目錄)
----安裝第三方jar包到私服
1-在maven的settings配置檔案中新增登入私服第三方登入資訊
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
2-cmd進入jar包所在目錄執行
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
或2-開啟cmd直接執行
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\jar包\fastjson-1.1.37.jar(jar包所在目錄)-Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty