项目管理工具-Maven

1 简介

  • Maven本质是一个项目管理工具,将项目开发和管理过程抽象为一个项目对象模型(POM),我们只需要告诉Maven需要哪些jar包,它会帮我们下载所有的jar,提高开发效率。
  • pom
    image
  • 作用
    1. 构建标准的、跨平台的项目
    2. 依赖管理,方便快捷的管理项目所依赖的jar包,避免资源间的版本冲突问题
    3. 提供统一的,标准的项目结构
      image

2 下载安装

下载地址:https://maven.apache.org/download.cgi
下载所需的版本后直接解压缩,目录简介:

  • bin:Maven的运行脚本。
  • boot:Maven的加载器。
  • conf:配置文件夹。
  • lib: Maven依赖的jar包

2.1 配置环境变量:

  • 依赖Java,需要配置JAVA_HOME.
  • 需要配置MAVEN_HOME:Maven解压的目录。
  • 编辑Path环境变量:添加%MAVEN_HOME%\bin

在cmd窗口输入mvn -v查看是否配置成功。

2.2.修改配置文件(conf文件夹下的setting.xml文件):

  • 修改本地仓库位置
    <localRepository>D:\Users\cc\settings\Maven\repository</localRepository>

  • 添加国内镜像源
    添加标签下,添加国内镜像源,这样下载jar包速度很快。默认的中央仓库有时候甚至连接不通。一般使用阿里云镜像库即可。

    点击查看代码
    <mirror>
    	  <id>alimaven</id>
    	  <name>aliyun maven</name>
    	  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    	  <mirrorOf>central</mirrorOf>
    	</mirror>
    

2.3 ideal下配置Maven
image

3 概念

3.1 仓库

  • 仓库:用于存储资源,包含各种jar包
  • 仓库分类:
    -本地仓库:自己电脑上存储资源的仓库,可远程仓库获取资源
    -远程仓库:非本机电脑上的仓库,为本地仓库提供资源
    -中央仓库:Maven团队维护,存储所有资源的仓库
    -私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
  • 私服的作用:
    -保存具有版权的资源,中央仓库的资源都是开源的
    -一定范围内共享资源,仅对内部开放,不对外共享

3.2 坐标

  • 什么是坐标
    用于描述仓库中资源的位置
    https://repo1.maven.org/maven2/
  • Maven坐标主要组成
    groupId:定义当前Maven项目隶属组织名称(通常是域名反写,如:org.mybatis)
    artifactId:定义当前Maven项目的名称(通常是模块名称,如CRM、SMS)
    version:定义当前项目版本号
  • Maven坐标的作用
    使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载交由机器完成

4 依赖管理

4.1 依赖传递

依赖具有传递性:
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其它资源,当前项目间接依赖其它资源

4.2 依赖传递冲突问题

- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的生效

4.3 可选依赖

- 可选依赖指对外隐藏当前所依赖的资源
点击查看代码
<dependency> 
	<groupId>junit</groupId> 
	<artifactId>junit</artifactId> 
	<version>4.12</version> 
	<optional>true</optional>
</dependency>

4.4 排除依赖

-排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
点击查看代码
<dependency>
	<groupId>junit</groupId> 
	<artifactId>junit</artifactId> 
	<version>4.12</version>
	<exclusions>
		<exclusion>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>

4.5 依赖范围

可以通过scope标签设定其作用范围
image

5 项目管理思想

5.1 分模块开发与设计

将项目根据controler,service,dao,pojo单独拆分成独立的模块进行开发,模块打包成jar包或者war包作为依赖。

聚合

分模块后由于模块相互依赖,发布打包时候需要一个个操作,聚合可以快速构建maven工程,一次性构建多个项目/模块。
步骤:

  • 创建一个空模块,打包类型定为pom
    <packing>pom</packing>
  • 定义当前模块进行构建操作时关联的其他模块的名称

<modules>
<module>../controler</module>
<module>../service</module>
<module>../dao</module>
<module>../pojo</module>
</modules>

5.2 继承

可以通过继承实现在子模块中沿用父模块中的配置
步骤

  • 子模块中声明父模块坐标

    点击查看代码
    <parent> 
    <groupId>com.cc</groupId> 
    <artifactId>cc</artifactId> 
    <version>1.0-SNAPSHOT</version>
    <!-- 父模块pom --> 
    <relativePath>../cc/pom.xml</relativePath>
    </parent>
    
  • 父模块中定义依赖管理

    点击查看代码
    <dependencyManagement>
    	<dependencies>
    	<dependencies>
    <dependencyManagement>
    

5.3 继承与聚合

  • 作用
    • 聚合用于快速构建项目
    • 继承用于快速配置
  • 相同点
    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件种
    • 聚合和继承均属于设计性模块,并无实际的模块内容
  • 不同点
    • 聚合是在当前模块种配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块种配置关系,父模块无法感知到哪些子模块继承了自己

5.4 属性

类别
5.4.1 自定义属性
作用:等同于定义变量,方便统一维护
格式:

点击查看代码
<!--定义自定义属性 --> 
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
<junit.version>4.12</junit.version>
</properties>

<!--调用-->
<dependency>
<groupId>org.springframework</groupId> 
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>

5.4.2 内置属性
作用:使用maven内置属性,快速配置
调用格式:${version}
5.4.3 Setting属性
作用:使用maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:${settings.localRepository}
5.4.4 Java系统属性
作用:读取Java系统属性
调用格式:${user.home}
系统属性查询命令:mvn help:system
5.4.5 环境变量属性
作用:读取环境变量的属性
调用格式:${settings.localRepository}
所有环境变量属性查询命令:mvn help:system
5.4.6 pom属性
${project.build.sourceDirectory} :项目的主源码目录,默认为 src/main/java
${project.build.testSourceDirectory} :项目的测试源码目录,默认为 src/test/java
${project.build.directory} :项目构建输出目录,默认为 target/
${project.outputDirectory} :项目主代码编译输出目录,默认为 target/classes
${project.testOutputDirector} :项目测试代码编译输出目录,默认为 target/test-classes/
${project.groupId} :项目的 groupId
${project.artifactId} :项目的artifactId
${project.version} :项目的 version ,与 ${version} 等价
${project.build.finalName} :项目打包输出文件的名称,默认为${project.artifactId}-${project.version}

5.5 版本管理

分类
5.5.1 SNAPSHOT(快照版本)
- 内部版本,方便团队成员合作。
- 会根据开发的进度不断更新
5.5.2 RELEASE(发布版本)
- 项目开发到阶段性时候,向外部提供的稳定版本
- 后续开发,不会改变当前发布的版本

资源配置

资源配置多文件维护
image

配置文件引用pom属性
作用:在任意配置文件中加载pom文件中定义的属性
格式:${jdbc.url}
开启配置文件加载pom属性

```
<build>
	<resources>
		<resource>
			<!-- 设定配置文件对应的位置目录,支持使用属性动态设定路径-->
			<directory>${project.basedir}/src/main/resources</directory>
			<!-- 开启对配置文件的资源加载过滤-->
			<filtering>true</filtering>
		</resource>
	</resources>
</build>
```
</details>

5.6 多环境开发配置

给项目配置多个环境
image
作用:加载指定环境配置
调用格式:mvn 指令 -P 环境定义id

5.7 私服

Nexus:maven私服产品
下载地址:https://help.sonatype.com/repomanager3/download

  • 启动:
    nexus.exe /run nexus
  • 访问服务器:
    http://localhost:8081
  • 修改基础配置信息
    安装目录下etc下的nexus-default.properties文件
  • 修改服务器运行配置信息
    安装目录下bin下的nexus.vmoptions文件

5.8 ideal中资源上传下载

私服仓库分类:

  • 宿主仓库hosted
    • 保存无法从中央仓库获取的资源
      • 自主研发
      • 第三方非开源项目
  • 代理仓库proxy
    • 代理远程仓库,通过nexus访问其他公共仓库,如中央仓库
  • 仓库组group
    • 将若干仓库组成一个群组,简化配置
    • 仓库组不能保存资源,属于设计型仓库

资源上传:

  • 资源上传需提供的信息
    • 保存的位置(宿主仓库)
    • 资源文件
    • 对应的坐标

ideal中资源发布具体配置:

  • 本地仓库访问私服

    • 配置本地仓库访问私服的权限(setting.xml)

      点击查看代码
      <servers>
      		<server>
      			<id>宿主仓库名称(正式版)</id>
      			<username>admin</username>
      			<password>admin</password>
      		</server>
      		<server>
      			<id>宿主仓库名称(测试版)</id>
      			<username>admin</username>
      			<password>admin</password>
      		</server>
      	</servers>
      
    • 配置本地仓库资源来源(setting.xml)

      点击查看代码
      <mirrors>
      		<mirror>
      			<id>仓库名称</id>
      			<mirrorOf>*</mirrorOf>
      			<url>http://localhost:8081/repository/maven-public/</url>
      		</mirror>
      	</mirrors>
      
  • 项目工程访问私服

    • 配置当前项目访问私服上传资源的保存位置(pom.xml)

      点击查看代码
      <distributionManagement>
      		<repository>
      			<id>私服具体的仓库</id>
      			<url>http://localhost:8081/repository/仓库1/</url>
      		</repository>
      		<snapshotRepository>
      			<id>私服具体的仓库</id>
      			<url>http://localhost:8081/repository/仓库2/</url>
      		</snapshotRepository>
      	</distributionManagement>
      

结束,以后再补充

posted @ 2022-02-15 14:08  她与代码皆失  阅读(174)  评论(0)    收藏  举报