What is Maven
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.更詳細(xì)信息可考參考
Maven基于POM(project object model)進行項目構(gòu)建、項目依賴管理、項目持續(xù)集成矩父、版本管理声邦、項目站點描述信息管理等
Maven使用教程
項目構(gòu)建
構(gòu)建定義:把動態(tài)的Web工程經(jīng)過編譯得到的編譯結(jié)果部署到服務(wù)器上的整個過程。
- 編譯: java源文件[.java]->編譯->Classz字節(jié)碼文件[.class]
- 部署: 最終在sevlet容器中部署的不是動態(tài)web工程司志,而是編譯后的文件
構(gòu)建的各個環(huán)節(jié)
- 清理clean:將以前編譯得到的舊文件class字節(jié)碼文件刪除
- 編譯compile:將java源程序編譯成class字節(jié)碼文件
- 測試test:自動測試,自動調(diào)用junit程序
- 報告report:測試程序執(zhí)行的結(jié)果
- 打包package:動態(tài)Web工程打War包,java工程打jar包
- 安裝install:Maven特定的概念-----將打包得到的文件復(fù)制到“倉庫”中的指定位置
- 部署deploy:將動態(tài)Web工程生成的war包復(fù)制到Servlet容器下份蝴,使其可以運行
倉庫和坐標(biāo)
pom.xml
Project Object Model 項目對象模型。它是maven的核心配置文件氓轰,所有的構(gòu)建的配置都在這里設(shè)置婚夫。
坐標(biāo)
使用下面的三個向量在倉庫中唯一的定位一個maven工程
<dependencies>
<!-- springboot web依賴-->
<dependency>
<!--公司或組織域名倒序+項目名-->
<groupId>org.springframework.boot</groupId>
<!--模塊名-->
<artifactId>spring-boot-starter-web</artifactId>
<!--版本-->
<version>2.1.5.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
倉庫
- 本地倉庫:當(dāng)前電腦上的倉庫
- 遠(yuǎn)程倉庫:
2.1 私服:搭建在局域網(wǎng)中,一般公司都會有私服署鸡,私服一般使用nexus來搭建
2.2 中央倉庫:架設(shè)在公網(wǎng)中
依賴
maven解析依賴信息時會到本地倉庫中取查找被依賴的jar包
- 對于本地倉庫中沒有的會去中央倉庫去查找maven坐標(biāo)來獲取jar包案糙,獲取到j(luò)ar之后會下載到本地倉庫
- 對于中央倉庫也找不到依賴的jar包的時候,就會編譯失敗了
如果依賴的是自己或者團隊開發(fā)的maven工程靴庆,需要先使用install命令把被依賴的maven工程的jar包導(dǎo)入到本地倉庫中
舉例:現(xiàn)在我再創(chuàng)建第二個maven工程HelloFriend时捌,其中用到了第一個Hello工程里類的sayHello(String name)方法。我們在給HelloFriend項目使用 mvn compile命令進行編譯的時候炉抒,會提示缺少依賴Hello的jar包奢讨。怎么辦呢?
到第一個maven工程中執(zhí)行 mvn install后焰薄,你再去看一下本地倉庫拿诸,你會發(fā)現(xiàn)有了Hello項目的jar包。一旦本地倉庫有了依賴的maven工程的jar包后塞茅,你再到HelloFriend項目中使用 mvn compile命令的時候亩码,可以成功編譯
依賴范圍
scope就是依賴的范圍
1、compile野瘦,默認(rèn)值描沟,適用于所有階段(開發(fā)、測試缅刽、部署啊掏、運行),本jar會一直存在所有階段衰猛。
2迟蜜、provided,只在開發(fā)啡省、測試階段使用娜睛,目的是不讓Servlet容器和你本地倉庫的jar包沖突 髓霞。如servlet.jar。
3畦戒、runtime方库,只在運行時使用,如JDBC驅(qū)動障斋,適用運行和測試階段纵潦。
4、test垃环,只在測試時使用邀层,用于編譯和運行測試代碼。不會隨項目發(fā)布遂庄。
5寥院、system,類似provided涛目,需要顯式提供包含依賴的jar秸谢,Maven不會在Repository中查找它。
build配置
<build>
<!-- 項目的名字 -->
<finalName>WebMavenDemo</finalName>
<!-- 描述項目中資源的位置 -->
<resources>
<!-- 自定義資源1 -->
<resource>
<!-- 資源目錄 -->
<directory>src/main/java</directory>
<!-- 包括哪些文件參與打包 -->
<includes>
<include>**/*.xml</include>
</includes>
<!-- 排除哪些文件不參與打包 -->
<excludes>
<exclude>**/*.txt</exclude>
<exclude>**/*.doc</exclude>
</excludes>
</resource>
</resources>
<!-- 設(shè)置構(gòu)建時候的插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- 源代碼編譯版本 -->
<source>1.8</source>
<!-- 目標(biāo)平臺編譯版本 -->
<target>1.8</target>
</configuration>
</plugin>
<!-- 資源插件(資源的插件) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>compile</phase>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- war插件(將項目打成war包) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- war包名字 -->
<warName>WebMavenDemo1</warName>
</configuration>
</plugin>
</plugins>
</build>
配置好build后霹肝,執(zhí)行mvn package估蹄,在maven工程指定的target目錄里war包和文件都按照配置的生成了