1.JavaEE開發構建工具歷史走向
自動化構建工具
Make> Ant> Maven >Gradle
2.構建的概念和環節
Java必須經過編譯得到.class檔案
清理:洗掉以前編譯結果,為重新編譯做好準備
編譯:JAVA編譯為位元組碼檔案
測驗:關鍵點測驗
報告:,展示測驗結果
打包:java含諸多檔案的工程封裝為一個壓縮檔案,對應jar包 Web對應War包
安裝:將Maven環境下打包的jar包或War包安裝到本地倉庫中
部署:打包結果部署到遠程倉庫或服務器上運行
編譯打包部署測驗自動化完成,程式化解決重復作業,只需要編碼
3.Jar包之間的沖突處理
jar包不足專案無法正常作業,但其實有的時候jar包多了專案仍然無法正常作業,這就是jar包之間的沖突,
使用Maven就可以自動的處理jar包之間的沖突問題,因為Maven中內置了兩條依賴原則:
最短路徑者優先和先宣告者優先.
4.安裝與配置設定
檢查JAVA_HOME環境變數,Maven是使用Java開發的,所以必須知道當前系統環境中JDK的安裝目錄,
解壓Maven的核心程式,將apache-maven-3.5.4-bin.zip解壓到一個非中文無空格的目錄下,
在系統變數里面創建M2_HOME變數,并賦值
在Path變數中,添加maven環境變數
查看Maven版本資訊驗證安裝是否正確,打開cmd輸入:mvn -v
本地倉庫地址更改
Maven的核心組態檔位置:
apache-maven-3.5.4\conf\settings.xml
修改組態檔
<localRepository>自設本地倉庫路勁</localRepository>
配置阿里云鏡像(下載速度快)
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
Maven編譯版本
settings.xml中的<profiles></profiles>標簽中加入如下內容
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
Maven打包插件
Maven本身的打包插件不負責將依賴的jar包一并打入到jar包中,
所以在pom.xml中加入如下內容:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 指定主類 -->
<mainClass>xxx.xxx.XXX</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
第4章 Maven核心概念
Maven的核心概念包括:POM、約定的目錄結構、坐標、依賴、倉庫、生命周期、插件和目標、繼承、聚合,
Project Object Model:專案物件模型,
開發領域普遍認同一個觀點:約定>配置>編碼,意思就是能用配置解決的問題就不編碼,能基于約定的就不進行配置,
Maven的坐標
使用如下三個向量在Maven的倉庫中唯一的確定一個Maven工程,
(1)groupId:公司或組織的域名倒序+當前專案名稱
(2)artifactId:當前專案的模塊名稱
(3)version:當前模塊的版本
本地倉庫:
任何一個Maven工程會根據坐標到本地倉庫中去查找它所依賴的jar包,如果能夠找到則可以正常作業,否則就不行,
4.5 依賴管理
基本概念
當A jar包需要用到B jar包中的類時,我們就說A對B有依賴,
直接依賴和間接依賴
如果A依賴B,B依賴C,那么A→B和B→C都是直接依賴,而A→C是間接依賴,
4.5.1 依賴的范圍
1)compile(默認就是這個范圍)
(1)main目錄下的Java代碼可以訪問這個范圍的依賴
(2)test目錄下的Java代碼可以訪問這個范圍的依賴
(3)部署到Tomcat服務器上運行時要放在WEB-INF的lib目錄下
例如:對Hello的依賴,主程式、測驗程式和服務器運行時都需要用到,
2)test
(1)main目錄下的Java代碼不能訪問這個范圍的依賴
(2)test目錄下的Java代碼可以訪問這個范圍的依賴
(3)部署到Tomcat服務器上運行時不會放在WEB-INF的lib目錄下
例如:對junit的依賴,僅僅是測驗程式部分需要,
3)provided
(1)main目錄下的Java代碼可以訪問這個范圍的依賴
(2)test目錄下的Java代碼可以訪問這個范圍的依賴
(3)部署到Tomcat服務器上運行時不會放在WEB-INF的lib目錄下
例如:servlet-api在服務器上運行時,Servlet容器會提供相關API,所以部署的時候不需要,
4)其他:runtime、import、system等,
4.5.2 依賴的傳遞性
當存在間接依賴的情況時,主工程對間接依賴的jar可以訪問嗎?這要看間接依賴的jar包引入時的依賴范圍——只有依賴范圍為compile時可以訪問,例如:
|
Maven工程 |
依賴范圍 |
對A的可見性 |
||
|
A |
B |
C |
compile |
√ |
|
D |
test |
× |
||
|
E |
provided |
× |
||
4.5.4 依賴的排除
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>OurFriends</artifactId>
<version>1.0-SNAPSHOT</version>
<!--依賴排除-->
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.2</version>
</dependency>
4.5.5 統一管理目標Jar包的版本
統一配置的方式:
|
<!--統一管理當前模塊的jar包的版本-->
|
|
…… |
|
<dependency> |
這樣一來,進行版本調整的時候只改一改地方就行了,
5.1 為什么需要繼承機制
由于非compile范圍的依賴資訊是不能在“依賴鏈”中傳遞的,所以有需要的工程只能單獨配置,
使用繼承機制就可以將這樣的依賴資訊統一提取到父工程模塊中進行統一管理,
父工程的打包方式為pom(只用于配置的管理,不寫任何代碼)
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
父工程只需要保留pom.xml檔案即可
5.3 在子工程中參考父工程
<parent>
<!-- 父工程坐標 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<!--指定從當前pom.xml檔案出發尋找父工程的pom.xml檔案的相對路徑-->
<relativePath>..</relativePath>
</parent>
|
<!--繼承--> <!--指定從當前pom.xml檔案出發尋找父工程的pom.xml檔案的相對路徑--> </parent> |
此時如果子工程的groupId和version如果和父工程重復則可以洗掉,
5.4 在父工程中管理依賴
將Parent專案中的dependencies標簽,用dependencyManagement標簽括起來
|
<!--依賴管理--> |
在子專案中重新指定需要的依賴,洗掉范圍和版本號
|
<dependency> |
第6章 聚合
6.1 為什么要使用聚合?
將多個工程拆分為模塊后,需要手動逐個安裝到倉庫后依賴才能夠生效,修改原始碼后也需要逐個手動進行clean操作,而使用了聚合之后就可以批量進行Maven工程的安裝、清理作業,
6.2 如何配置聚合?
在總的聚合工程中使用modules/module標簽組合,指定模塊工程的相對路徑即可
|
<!--聚合--> |
Maven可以根據各個模塊的繼承和依賴關系自動選擇安裝的順序
第7章 通過Maven創建Web工程
創建簡單的Maven工程,打包方式為war包
點擊Project Structure,
選擇對應的Module,添加web目錄,
在web目錄下創建index.jsp頁面
部署到Tomcat上運行
第8章 Maven酷站
我們可以到http://mvnrepository.com/搜索需要的jar包的依賴資訊,
http://search.maven.org/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/162097.html
標籤:大數據
下一篇:Maven白話講解
