工程和jar包分离
自动下载依赖包
清理:清除上一次编译得到的class字节码文件
编译:将Java源程序编译成新的字节码文件
测试:自动测试,自动调用junit
报告:测试程序执行的结果
打包:动态Web工程打成war包,Java工程打成jar包
安装:Maven特定的一个概念,将打包的到的文件复制到仓库中的指定位置
部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
注意 如果执行后面的命令,会连同前面的命令一起执行
构建顺序 compile→test-compile→test→package→install
安装jdk,配置java环境变量
下载解压Maven安装包,非中文,无空格路径
配置Maven全局环境变量(如果不想在全局CMD中使用,也可以不配)
MAVEN_HOME: D:\apache-maven-3.6.0 (maven的安装路径)
PATH: MAVEN_HOME\bin
在cmd窗口中运行mvn -v 指令查看Maven是否配置成功
在setting.xml中
标签内添加:
<mirror>
<id>alimavenid>
<mirrorOf>centralmirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/groups/public/url>
mirror>
注意
1. 如果没有配置Maven全局环境,就要在Maven的安装目录下,进入CMD执行,如果配置了Maven全局环境,可以在任意目录的CMD下执行
2. 行与构建过程相关的Maven命令(编译,测试,打包),必须进入pom.xml所在的目录
3. 在工程中,如果test中resources中如果没有配置文件,会自动去main中的resources目录下读取
mvn archetype:generate
-DgroupId=[groupId]
-DartifactId=[artifactId]
-DarchetypeArtifactId=[项目类型,如maven-archetype-quickstart]
-DinteractiveMode=[false/true] (交互模式)
mvn tomcat:run
注意 执行完之后工程的目录多了一个target文件夹
mvn clean
注意 执行之后target目录被删除
mvn compile
注意 生成target目录,只编译main目录下的代码
mvn test-compile
注意 生成target目录,只编译test目录下的代码
mvn test
mvn package
注意 执行完成之后会在target目录下多出一个war包或jar包
注意 如果要打成war包,需要在POM.xml文件中配置打包类型为war
<groupId>com.alasky<groupId>
<artifactId>demoartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
mvn install
mvn deploy (需要在POM.xml文件中指定远程库,否则会发布失败)
mvn site
注意 执行完后在target/site中会有新文件生成
使用下面三个向量在仓库中唯一定位一个Maven工程
<groupId>XXX/groupId>
<artifactId>XXXartifactId>
<version>1.0-SNAPSHOTversion>
groupid: 公司或组织域名倒序+项目名
artifactid: 模块名
version: 版本号
本地→远程(私服)→中央仓库
标签)compile: 对主程序和测试程序都有效,参与打包范围
test: 对测试程序有效
provide: 对主程序和测试程序都有效,但是不参与打包,因为服务器可以提供
注意 比如servlet-api.jar和jsp-api.jar,如果tomcat里面有的jar包,如果在maven里面设置成compile,那么在部署时会出现冲突(工程里面一个,tomcat里面一个)
如果A工程依赖B工程,那么如果B工程导入了一个新的依赖,Maven会自动在A工程中也导入这个依赖,但是需要注意,非compile范围的依赖不能传递
如果某个导入的或者传递过来的依赖出现冲突,或者不想使用,在其父依赖中配置
标签可以将其排除,排除之后也会影响这个依赖的传递性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMGmjiYc-1575542634810)(Maven(一)].assets/1575536685257.png)
如果由于依赖的传递,导致出现不同版本的多个相同的依赖,那么会按照就近原则传递,即只传递上一个工程的依赖版本
例如,下图中,C继承B,B继承A,那么C将会使用B中依赖的版本
如果出现两个路径举例相同的依赖,哪个依赖最先声明就使用哪个
如下图,如果A同时继承B和C,如果B在A的pom文件中先声明,A就继承B中依赖的版本
##### 依赖版本的统一
标签设置一个自定义标签各个构建环节按照顺序来执行,不能打乱顺序
构建顺序 compile→test-compile→test→package→install
Maven的核心程序中定义了抽象的生命周期,生命周期中的各个阶段的具体任务是由插件来完成的
<groupId>com.abcgroupId>
<artifactId>parentartifactId>
<packaging>pompackaging>
<parent>
<groupId>com.abcgroupId>
<artifactId>parentartifactId>
<packaging>pompackaging>
parent>
子工程的依赖坐标中版本标签
就可以不用写了,(即不指定版本号,默认使用父工程中相同依赖的版本号),如果想用与父工程不同的版本,就再把
标签写上去
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bOPDSJL-1575542634810)(Maven(一)].assets/1575541625321.png)
注意 如果使用了继承,在安装子工程之前,需要先安装父工程,可以使用聚合来一键安装所有的工程,在聚合工程中(一般是父工程),配置
签,其中包括所有的模块
如果一个项目中包括很多模块,即一个父工程包括很多子工程(模块),那么可以在父工程中使用
标签将子工程引入,导出时就可以一次将整个项目全部导出
<modules>
<module>../Amodule>
<module>../Bmodule>
<module>../Cmodule>
modules>