一. Maven下载
maven官网
maven仓库
1.打开maven官网,点击"download"
2.下载最新版本(如果下载其他版本可以跳过第2步,看第3步)
3.点击"Maven 3 achieves"
4.点击对应的版本,然后点击"binaries"
二.配置Maven
1.将maven的bin目录配置在path下
2.打开cmd,输入命令mvn -v 如果可以看到maven版本证明安装成功
三.Maven仓库分类
1.本地仓库:开发者本地已经下载下来的或者自己打包所有jar包的依赖仓库,可以在maven的setting.xml中修改
2.中央仓库:maven默认下载的仓库地址,是maven维护的
2.1配置中央仓库镜像
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
因为中央仓库地址在国外,每次下载对应的jar包会比较慢,所以这里配置一个aliyun的镜像.这里的注意的是mirrorOf标签里面的值,要么就是"*",要么就是超级pom的id值
超级pom位置:
2.1.1 解压那个maven-model-buidler-3.6.1.jar(不同的maven的版本可能不同)
2.1.2 org/maven/model/pom-4.0.0.xml文件
3.私有仓库(Nexus):可以理解为自己公司的仓库,也叫Nexus私服
四.Idea和Maven绑定
1.点击"setting"
2.依次点击
3.配置好各个路径
五.Maven依赖管理
1.maven依赖传递
我们项目通常需要依赖第三方组件,而第三方组件又会依赖其他组件,这种情况下maven会把依赖网络中的所有节点都依赖进来.比如:
2.maven依赖优先原则
因为整个maven网络比较复杂,所以可能会存在版本问题,这时就会有优先原则
原则一: 路径最短优先(图中的core是通过spring-webmvc依赖而依赖进来的,我们可以直接在pom.xml中通过dependency标签依赖,这样路径就会在前面)
原则二: 在路径相同的情况下,配置在前的优先
3.maven可选依赖
如果可选依赖设置为true,那么不会被依赖传递.举个例子
如果project-A依赖了project-B,并且在依赖project-B的同时设置了optional为true,那么这时如果project-X来依赖project-A的话,optional就会生效,project-B就不会发生依赖传递,这时project-X就依赖不到project-B了.
user模块
login模块
order模块
可以看出,图中login模块依赖了user模块,同时在依赖user模块的时候设置了optional为true,那么order模块依赖login模块的时候就依赖不到user模块了.
可以看到user模块有fastjson,login模块里面有fastjson,而因为order模块依赖不到user模块,所以没有fastjson.
4.排除依赖
可以排除部分依赖,以免发生版本冲突问题
login模块
order模块
对比显然可以看到因为用了排除依赖,order比login模块少了spring-core和spring-context
5.依赖范围
部分依赖在打包的时候没有必要打包,所以可以选择依赖的一个范围,依赖范围用scope标签,值在下图.
六. 项目聚合
可以看到一个shopDemo项目分了好几个模块,有user模块,有login模块,有order模块,我们只需要在每一个模块里面把不同的功能做好即可,如果对应功能的修改,只需进入到对应模块去修改即可,这样便于我们分工和管理.
6.1 继承
login模块,user模块,order模块都是shopDemo的子模块,那么他们都可以继承父亲(shopDemo)的属性,依赖,插件.
6.2 子工程与父工程依赖
因为父工程的pom文件中只要有一个依赖,子文件就会自动依赖过去.有的时候并不需要这个依赖,那么我们可以设置一下,只有子工程需要的时候引用.
父工程
login模块
父工程引入了一个mybatis依赖,所以所有的子模块(login,user,order)都会引入mybatis依赖,但是父工程中的mysql-connector-java的依赖在dependencyManagement标签里面,子模块不会自动引入了,只有像login模块一样手动引入才会引入依赖.
6.3 引用属性
七 maven常用命令
clean : 删除target目录
compile: 编译项目
package: 打包项目
install: 生成安装包放到本地仓库,同时会打包项目放到target下
八 maven和Nexus
1.下载并解压Nexus包
2. 启动Nexus服务器
必须以管理员身份运行cmd:(win+r,然后ctrl+shift+Enter进入管理员)
nexus.exe /install 安装nexus服务
nexus.exe /start 启动nexus服务
nexus.exe /stop 停止nexus服务
3. 进入Nexus
3.1 查看Nexus对应端口
3.2 根据Nexus端口拼接Nexus的url
3.3 找到对应的账号密码
账号: admin
密码: nexus-3.38.1-01-win64\sonatype-work\nexus3\admin.password文件里面就是的
4. Nexus仓库分类
hosted(宿主仓库): 存放公司开发的jar包(正式版本,测试版本)
proxy(代理仓库): 代理中央仓库,Apache下测试版本的Jar包
group(组仓库): 包含hosted和proxy
5. 将自己项目上传到Nexus
5.1 在maven的setting.xml文件中配置账号密码
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
5.2 在对应project或者对应模块的pom.xml里面添加
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>User Project Release</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
5.3 点击deploy
代码上传会根据自己pom.xml里面的id去maven中setting.xml中找对应的id,拿到对应的账号密码,然后上传到对应的仓库里面
6. 从Nexus下载jar包
在对应模块里面添加配置
<repositories>
<!-- 配置nexus远程仓库 -->
<repository>
<id>nexus</id>
<name>Nexus Snapshot Repository</name>
<url>http://localhost:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
如果想要整个项目所有都去Nexus下载jar包,可以在maven中的setting.xml配置
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://127.0.0.1:8181/repository/maven-public/</url>
</mirror>
7. Nexus中hosted中releases和snapshots区别
releases(正式版): 当我们的project经历了各种开发,测试,确认万无一失,可以准备上线了,可以把代码上传到releases这里
snapshots(测试版 or 快照版): 我们的代码遇到各种bug可能会随时修改,那么我们需要上传到snapshots这里,方便修改.
还有一个小细节: 如果我们修改了代码上传到snapshots里面,这里就会有不同的版本,我们如果要从Nexus里面去拉代码或者jar包会拉取最新的.但是如果是上传到releases中,我们必须手动修改version标签,才可以把最新的版本上传到releases里面去.