最近小娇娇同学有点烦恼,她明明执行了install,相关项目的依赖却没有变化,于是她不停地clean、install,项目有时候能行,有时候不行,所以她一脸懵B的找到小七帮忙看看原因,当然像小七这么乐于助人的绅士肯定是义不容辞呀,于是手把手带她入门。
1.前往http://maven.apache.org/download.cgi下载最新版的Maven程序
解压压缩包即可
右键“此电脑->属性->高级系统设置->环境变量”
在Path中添加maven路径
按下windows键 + R键
,输入cmd
,在弹出的命令行窗口中,输入mvn -v
能够正确输出版本信息,则证明mvn安装成功。
Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以管理一个项目的构建,发布和文档。(摘于官方网站)
maven-demo(项目名称)
|---------pom.xml(项目配置文件)
|---------src
|---------main(主程序目录)
|---------java(主程序的Java源文件目录)
|---------resources(主程序的资源文件目录)
|---------test(测试程序目录)
|---------java(测试程序的Java源文件目录)
|---------resources(测试程序的资源文件目录)
所有 POM 文件一般都需要 project 根元素和三个必需字段:groupId,artifactId,version。
例子:
sheep-web-demo
sheep-web-demo
1.0-SNAPSHOT
创建一个空项目
4.0.0
maven-text
maven-text
1.0-SNAPSHOT
mvn compile
mvn package
/**
* 测试类
*
* @author 第七人格
* @date 2021/3/25 21:00
*/
public class TestMaven {
public void testMaven(){
System.out.println("============This is test===========");
}
}
mvn test
注意:必须是Test开头的类名与test 开头的方法才会执行(约定)。
<localRepository>....localRepository>
<server>
<id>releasesid>
<username>adminusername>
<password>123456password>
server>
<mirror>
<id>planetmirror.comid>
<name>aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
通过3要素(groupId,artifactId,version)定位,写在标签
......
内,如下所示
...
...
...
...
...
...
可添加多个依赖
...
...
...
我们的项目通常需要依赖第三方组件,而第三方组件又会依赖其它组件遇到这种情况Maven会将依赖网络中的所有节点都会加入ClassPath当中,这就是Maven的依赖传播特性。
基于依赖传播特性,导致整个依赖网络会很复杂,难免会出现相同组件不同版本的情况。Maven此时会基于依赖优先原则选择其中一个版本。
在
标签内新增
true
表示,默认是不可选的。可选依赖不会被传递。
....
....
类型 | 范围 | 例子 |
---|---|---|
compile(默认) | 编译打包都会依赖 | |
provided | 编译依赖,打包不依赖 | servlet-api.jar |
runtime | 打包依赖,编译不依赖 | mysql-connector-java.jar |
test | 编译允许测试用例依赖 | junit.jar |
system | 表示由系统中CLASSPATH指定。编译时依赖,打包不依赖 |
语法如下:
...
...
...
compile
聚合需要个父工程,然后使用
进行配置。
pom文件如下:
项目工程结构如下
该示例是小七的一个记录demo,项目地址:
https://gitee.com/diqirenge/sheep-web-demo
继承是指子工程直接继承父工程当中的属性、依赖、插件等配置,避免重复配置。
三个配置子工程都可以进行重写,重写之后以子工程的为准。在父工程中使用
管理依赖
....
....
....
子工程中,可以不再写
,只需要写坐标即可
....
....
maven 总共包含三大生生命周期
clean Lifecycle :清理生命周期,用于于清理项目。
default Lifecycle:默认生命周期,用于编译、打包、测试、部署等。
site Lifecycle 站点文档生成,用于构建站点文档。
注意点:default Lifecycle的生命周期,位于后面的节点执行时,总会先执行前面的节点。
1、统一步骤,规范化
2、解耦,便于拓展
生命周期(lifecycle) | 阶段(phase) | 描述(describe) |
---|---|---|
clean Lifecycle | pre-clean | 预清理 |
clean | 清理 | |
post-clean | 清理之后 | |
default Lifecycle | validate | 验证 |
initialize | 初始化 | |
generate-sources | ||
process-sources | ||
generate-resources | ||
process-resources | ||
compile | 编译 | |
process-classes | ||
generate-test-sources | ||
process-test-sources | ||
generate-test-resources | ||
process-test-resources | ||
test-compile | 编译测试类 | |
process-test-classes | ||
test | 执行测试 | |
prepare-package | 构建前准备 | |
package | 打包构建 | |
pre-integration-test | ||
integration-test | ||
post-integration-test | ||
verify | 验证 | |
install | 上传到本地仓库 | |
deploy | 上传到远程仓库 | |
site Lifecycle | pre-site | 准备构建站点 |
site | 构建站点 | |
post-site | 构建站点之后 | |
site-deploy | 站点部署 |
语法如下
....
....
...
执行器命名
执行的阶段
执行一组目标或功能
执行目标所需的配置文件
自动拷贝jar包到target目录
org.apache.maven.plugins
maven-dependency-plugin
2.6
copy-dependencies
compile
copy-dependencies
${project.build.directory}/lib
false
true
更多插件:https://maven.apache.org/plugins/index.html
maven-plugin
org.apache.maven
maven-plugin-api
3.0.3
org.apache.maven.plugin-tools
maven-plugin-annotations
3.1
/**
* 自定义插件
*
* @author 第七人格
* @date 2021/03/25
*/
@Mojo(name = "sevenPlugin")
public class SevenPlugin extends AbstractMojo {
@Parameter
String sex;
@Parameter
int age;
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info(String.format("seven sex=%s,age=%s" ,sex, age));
}
}
mvn package
发布到本地仓库,本地其他项目可以调用
mvn install
发布到仓库,其他项目可以调用
mvn deploy
下载地址:https://www.sonatype.com/nexus/repository-oss/download
解压后,进入bin目录下
运行命令:nexus.exe /run
出现以下文字,则启动成功
初始密码位于“\sonatype-work\nexus3”下的“admin.password”里
这里填阿里云地址
http://maven.aliyun.com/nexus/content/groups/public/
在我们的pom文件中加入以下代码
releases
maven-releases
http://127.0.0.1:8081/repository/maven-releases/
true
snapshots
maven-snapshots
http://127.0.0.1:8081/repository/maven-snapshots/
true
如果你的版本带着releases,也就是 0.0.1-releases,就会发布到 maven-releases。
如果你的版本带着snapshots,也就是 0.0.1-snapshots,就会发布到 maven-snapshots。
Maven Helper可视化maven操作(更多插件请移步
https://blog.csdn.net/a18602320276/article/details/114637244?spm=1001.2014.3001.5501)
pom文件添加以下代码,他们依赖的spring-beans 的版本都是5.2.8,所以会造成依赖冲突。
org.springframework
spring-webmvc
5.2.8.RELEASE
org.springframework
spring-jdbc
5.2.6.RELEASE
解决依赖冲突
红色就是有依赖冲突的地方,选中右键“exclude”即可,快速排除依赖
clean错项目了,项目A依赖于项目B,如果项目B变化了,应该install的是项目B,而不是项目A,项目A只需要重新导入相关依赖即可。参考第三章、项目依赖管理。
最常见的就是 log4j与slf4j的依赖冲突,这个时候排除相关依赖即可。参考3.1.5和7.1.1。
(1)idea的问题,重启后生效
(2)jar包下载不完成,仓库删除后重新下载,建议配置国内镜像,参考2.6.2。
小七以前写博客,基本都是出于自己记录的目的。同事和朋友,都吐槽过看不懂,写得太糙了,自己懂得和分享出来,让大家懂得是完全不同的,从以后每篇文章,小七都慢慢写,争取和这篇文章一样,写7、8个小时(忘了吃晚饭了o(╥﹏╥)o)。
https://Maven.apache.org/
https://mvnrepository.com/
https://gitee.com/diqirenge/maven