Maven依赖范围管理
- 依赖范围即引入jar包的作用域,引入时使用
<scope>
指定
- 依赖的作用域分为以上五种,作用范围如下:
- 具体设置看包的使用情况,例如junit就是test范围
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency>
依赖传递
- 父项目可以通过依赖传递将自身的依赖传给子项目,注意以下三项设置:
- 打包方式:
<packaging>pom</packaging>
- 依赖管理:可以通过变量引入
<!--project下--> <properties> // 自定义变量 <spring.version>5.2.8-RELEASE</spring.version> </properties> <dependency> 坐标 <version>${spring.version}</version> </dependency>
- 依赖容器:使用
<dependencyManagement>
,父项目统一管理,子项目中使用时才会引入
<dependencyManagement> <dependencies> <dependency> ... <dependency> </dependencies> </dependencyManagement>
- 打包方式:
- 子项目继承
- 使用
<parent>
标签
<parent> <!--父项目坐标--> <!--所使用的父项目配置文件位置--> <relativePath>../xxx/pom.xml</relativePath> </parent>
- 子项目会继承父项目的
groupId
,所以子项目无需单独定义 - 子项目会自动继承并使用父项目的普通依赖
<dependencies>
,也可以在引用依赖时不写版本号,使用父项目依赖容器</dependencyManagement>
中管理的依赖(前提是父项目已经下载好依赖)
- 使用
项目聚合
- 借助IDEA工具,可以在项目内部创建module,作为项目的子项目
- 子项目在配置中用上一节所说的
<parent>
继承父项目,同时,在父项目配置文件中也会通过<modules>
聚合各个子项目(默认)<modules> <module>子项目名称1</module> <module>子项目名称2</module> </modules>
- 聚合+继承的方式提高了项目操作的效率,使项目的整体性较高,便于集成和维护,也提高了依赖的复用性
插件管理
- 项目的依赖管理、生命周期等都是通过Maven的插件实现的,引入插件就在入门篇介绍的
<plugin>
中 - 插件可以让我们设置Maven命令,以
dependency
插件为例- 前面说到的依赖传递,用到的
<dependencyManagement>
标签等都需要这个插件analyzes - 插件可以在Maven的官网找到
- 引入:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <plugin>
- 前面说到的依赖传递,用到的
- 接下来,添加Maven命令,可以查看依赖树
- IDEA也集成了查看依赖树的选项,在pom文件中,右键选择
Diagrams
私有服务器
- 在基础篇中提到了使用私有服务器管理内部依赖
- 现在比较流行的是使用
Nexus
构建私有服务器,访问官网下载工具,这里用Windows版 - 搭建私有服务器:
- 个人使用,这里就将私有服务器放在本地,即
localhost
,当然一般是放在线上服务器 - 解压出来连个文件:nexus-3.xxx和sonatype-work
- 启动私有服务器:进入nexus-3.xxx/bin文件夹,cmd启动:
nexus /run
- 启动后在浏览器即可进入:
http://localhost:8081
- 根据提示输入用户名和密码登录,并启用远程访问Enable anonymous access
- 个人使用,这里就将私有服务器放在本地,即
- 创建私有仓库
- 默认有三种类型的仓库
proxy
主要用于代理远程中央仓库group
主要用于仓库的分组管理hosted
主要用于发布本地开发的项目,再做后面的部署工作
- 在Server administration中选择Repository并创建
- 配置一个远程代理仓库试试:
- 点击后面的copy就可以得到URL地址
- 再来一个发布本地项目的仓库
- 在创建一个发布本地快照版本项目的仓库备孕,OK!
- 默认有三种类型的仓库
- 项目中配置使用私有仓库
- 父项目中使用
<repositories>
配置使用私有远程仓库<!--project下--> <repositories> <repository> <!--配置私有仓库--> <id>nexus_proxy</id> <name>my nexus</name> <url>http://localhost:8081/repository/nexus_maven_proxy/</url> <!--支持稳定版和快照版的仓库--> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
- 同级,配置本地快照和稳定版的发布地址:
<distributionManagement> <repository> <id>hosted_release</id> <name>Nexus Release</name> <url>http://localhost:8081/repository/nexus_maven_hosted/</url> </repository> <snapshotRepository> <id>hosted_snapshot</id> <name>Nexus Snapshot</name> <url>http://localhost:8081/repository/maven_hosted_snapshot/</url> </snapshotRepository> </distributionManagement>
- 下载远程jar包测试:还是在父项目,引入依赖
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.32.Final</version> </dependency>
- 我们会发现使用本地仓库下载,在nexus浏览也存在了相关依赖
- 发布项目
<server> <id>hosted_snapshot</id> <username>admin</username> <password>xxx</password> </server>
- 因为要写入到仓库,需要在settings.xml中增加以上仓库的登录信息,这个id就是pom中配置的本地snapshot仓库的id
- 使用Maven命令发布:
depoly
,成功后浏览发现发布在了本地SNAPSHOT仓库,这是由项目pom中的<version>1.0-SNAPSHOT</version>
决定 - 如果我们改为
<version2.0-RELEASE</version>
,就会发布到RELEASE, 当然,要增加<server>
配置
- 父项目中使用
Java Web项目
- 不使用archetype,手动构建一下,了解其过程
- 也定义一下依赖的范围