项目管理工具

项目代码: https://gitee.com/xuhx615/ssm.git

🍓maven

maven的本质是一个项目管理工具,将项目开发和管理过程抽像成一个项目对象模型(pom
pom结构:
在这里插入图片描述

🍓maven的作用

  • 项目构建:提供标准的、跨平台的自动化项目构建方式
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源之间的版本冲突问题
  • 统一开发结构:提供标准的、统一的项目结构

🍓maven的基础概念

🍒仓库

用于存储资源,包含各种jar

  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
  • 远程仓库
    • 中央仓库:maven团队维护,存储所有开发的资源的仓库
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
      • 私服的作用:
        • 保护具有版权的资源,包含购买或自主研发的jar
        • 一定范围内共享资源,仅对内部开放,不对外共享
🍒坐标

maven中的坐标是用于描述仓库中资源的位置,由机器去识别这个坐标,然后找到加载相应的资源,不需要人去识别
maven坐标的组成:

  • groupId:项目隶属组织的名称(必须)
  • artifactId:项目的名称(必须)
  • version:项目的版本号(必须)
  • packaging:项目的打包方式

🍓本地仓库配置

修改maven根目录下conf/settings.xml

<!--本地仓库路径-->
<localRepository>E:\maven\dsgMaven\repository</localRepository>

<!--获取资源的远程仓库地址(这里配置的阿里云的镜像地址,国内一般都使用这个作为中央仓库)-->
<mirror>
	<!--镜像ID-->
	<id>nexus-aliyun</id>
	<!--对哪种仓库进行镜像,central表示中央仓库-->
	<mirrorOf>central</mirrorOf>
	<!--镜像名称-->  
	<name>Nexus aliyun</name>
	<!--镜像地址-->
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror>

🍓maven命令

#编译项目(在项目根目录下执行,编译完后会生成一个target目录)
mvn compile

#清除编译(在项目根目录下执行,编译完后会删除编译生成的target目录)
mvn clean

#打包项目源程序(在项目根目录下执行,编译完后会生成一个target目录,并在target目录里产生一个打包完成的jar包文件,注意:这个jar包只包含源程序)
mvn package

#将打包完成的项目jar包添加到本地仓库中去
mvn install

🍓依赖传递

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源A如果依赖于资源B,当前项目间接依赖于资源B
🍒依赖传递的冲突问题
  • 路径优先:当依赖中出现了相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当冲突的资源在相同层级时,且版本相同,配置顺序靠前的覆盖靠后的
  • 特殊优先:当冲突的资源在相同层级时,且版本不同,配置顺序靠后的优先

🍓隐藏依赖

隐藏依赖指项目A被项目B所引用时,不想让项目B知道项目A引用了依赖C,可以在项目A的pom.xml文件对应的依赖C中设置<optional>true</optional>隐藏这个依赖C,项目A看不到这个间接依赖C,但它是真实存在的。

<dependency>
    <groupId>cn.com.xxx</groupId>
    <artifactId>C</artifactId>
    <version>1.0.1</version>
    <optional>true</optional>	<!--true隐藏,默认值false-->
</dependency>

🍓排除依赖

排除依赖指项目A被项目B所引用时,项目A引用了依赖C,但是项目B不想引用间接依赖C,则可以在项目B的pom.xml文件下设置排除这个间接依赖C

<dependency>
    <groupId>cn.com.xuhx</groupId>
    <artifactId>A</artifactId>
    <version>1.0-SNAPSHOT</version>
    <exclusions>		<!--排除项目A中的依赖C,注意这里不需要依赖C的版本-->
    	<exclusion>
			<groupId>cn.com.xxx</groupId>
    		<artifactId>C</artifactId>
		</exclusion>
    </exclusions>
</dependency>

🍓依赖范围

依赖的jar包默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围:

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)
scope主代码测试代码打包
compile(默认)YYY
testY
providedYY
runtimeY
🍒依赖范围的传递性
间接依赖\直接依赖compiletestprovidedruntime
compilecompiletestprovidedruntime
test
provided
runtimeruntimetestprovidedruntime

🍓maven的生命周期

  1. validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
  2. initialize(初始化) 初始化构建状态,比如设置属性值。
  3. generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
  4. process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
  5. generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
  6. process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
  7. compile(编译) 编译项目的源代码。
  8. process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
  9. generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
  10. process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
  11. generate-test-resources(生成测试资源文件) 为测试创建资源文件。
  12. process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
  13. test-compile(编译测试源码) 编译测试源代码到测试目标目录.
  14. process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
  15. test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
  16. prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
  17. package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
  18. pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
  19. integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
  20. post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
  21. verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
  22. install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
  23. deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。

🍓maven插件

<build>
	<!--打包的包名的名称-->
	<finalName>webDemo</finalName>
	<plugins>
		<plugin>
			<!--源码打包的插件-->
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-source-plugin</artifactId>
			<version>2.2.1</version>
			<executions>
				<execution>
					<goals>
						<!--打什么包:jar:源码jar包;test-jar:测试代码jar包-->
						<goal>jar</goal>
					</goals>
					<!--在什么生命周期阶段打包,generate-test-resources指在test阶段打包-->
					<phase>generate-test-resources</phase>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

🍓分模块开发

在这里插入图片描述

🍓聚合

ssm_pom.xml文件中加入如下配置

	<!--构建聚合的项目打包方式都是打成pom--->
	<packaging>pom</packaging>
	
	<modules>
        <module>ssm_controller</module>
        <module>ssm_service</module>
        <module>ssm_dao</module>
        <module>ssm_pojo</module>
    </modules>

🍓继承

继承需要父子关系,父工程中不需要标注什么,但是子工程一定要标注父工程是谁

	<parent>
        <artifactId></artifactId>
        <groupId></groupId>
        <version></version>
    </parent>

继承的最大作用可以实现版本控制

<!--依赖继承-->
<dependencyManagement>
	<!---->
	<dependencies>
		<!--spring-->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.1.9.RELEASE</version>
		</dependency>
	<dependencies>
<dependencyManagement>
🍒继承的资源
  • groupId:项目组ID,项目坐标的核心元素
  • version:项目版本,项目坐标的核心因素
  • description:项目的描述信息
  • organization:项目的组织信息
  • inceptionYear:项目的创始年份
  • url:项目的URL地址
  • developers:项目的开发者信息
  • contributors:项目的贡献者信息
  • distributionManagement:项目的部署配置
  • issueManagement:项目的缺陷跟踪系统信息
  • ciManagement:项目的持续集成系统信息
  • scm:项目的版本控制系统信息
  • malilingLists:项目的邮件列表信息
  • properties:自定义的Maven属性
  • dependencies:项目的依赖配置
  • dependencyManagement:项目的依赖管理配置
  • repositories:项目的仓库配置
  • build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
  • reporting:包括项目的报告输出目录配置、报告插件配置等
🍒继承与聚合
  • 作用:
    • 聚合用于快速构建项目
    • 继承用于快速配置
  • 相同点:
    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
    • 聚合与继承均属于设计型模块,并无实际的模块内容
  • 不同点:
    • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
🍒maven属性
	<!--定义属性的值-->
	<properties>
        <spring.version>5.1.9.RELEASE</spring.version>
    </properties>

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

🍓版本管理

  • SNAPSHOT(快照版本)
    • 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本
    • 快照版本会随着开发的进展不断更新
  • RELEASE(发布版本)
    • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本。

🍓Nexus

NexusSonatype公司的一款maven私服产品
Nexus下载地址:https://help.sonatype.com/repomanager3/product-information/download

🍒Nexus私服文件结构:

注意: 目录路径不能有中文,否则启动会报错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#启动nexus程序
PS E:\nexus\nexus-3.20.1-01\bin> .\nexus.exe /run

#浏览器访问,默认端口8081
localhost:8081
🍒仓库分类

在这里插入图片描述

  • 宿主仓库hosted
    • 保存无法从中央仓库获取的资源
      • 自主研发
      • 第三方非开源项目
  • 代理仓库proxy
    • 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
  • 仓库组group
    • 将若干个仓库组成一个群组,简化配置
    • 仓库组不能保存资源,属于设计型仓库
🍒界面使用
  1. 初次登陆要去对应的路径寻找密码,使用admin登陆并修改初始密码,不需要勾选匿名登录
    在这里插入图片描述
  2. 浏览设置
    在这里插入图片描述
  3. 仓库分类
    在这里插入图片描述
🍅创建宿主仓库

在这里插入图片描述
在这里插入图片描述

🍅将创建的宿主仓库放到maven-public组中

在这里插入图片描述

🍅手动上传资源

注意:非RELEASE仓库不能手动上传
在这里插入图片描述

🍒以服务的形式运行
#安装nexus服务,注意:必须以管理员的身份打开PowerShell执行以下命令
.\nexus.exe /install

安装完成后会在服务列表看到nexus服务
在这里插入图片描述

🍒本地仓库连接私服

复制本地仓库地址:
在这里插入图片描述
修改本地仓库配置文件setting.xml

<!--配置连接用户密码,id自定义保持唯一-->
<servers>
    <server>
      <id>xuhx_nexus</id>
      <username>admin</username>
      <password>admin</password>
    </server>
</servers>


<mirrors>
    <mirror>
      <!--上面的用户密码的ID要与这边的id对应-->
      <id>xuhx_nexus</id>
      <mirrorOf>*</mirrorOf>
      <name>xuhx_nexus</name>
      <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
</mirrors>
🍒上传本地仓库的依赖到私服
  1. 前往本地仓库文件夹的根路径下创建一个xxx.sh的脚本写入以下命令
    #!/bin/bash
    # copy and run this script to the root of the repository directory containing files
    # this script attempts to exclude uploading itself explicitly so the script name is important
    # Get command line params
    
    while getopts ":r:u:p:" opt; do
    	case $opt in
    		r) REPO_URL="$OPTARG"
    		;;
    		u) USERNAME="$OPTARG"
    		;;
    		p) PASSWORD="$OPTARG"
    		;;
    	esac
    done
    
    find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
    
  2. 输入以下命令执行脚本,将本地依赖上传到你需要上传的宿主仓库中去,这里我上传的是默认仓库maven-releases
    .\xxx.sh  -u admin -p admin -r http://localhost:8081/repository/maven-releases/
    
  3. 查看下页面有没有导入成功
    在这里插入图片描述
🍒上传本地项目的jar包到服务器
  1. 配置好mavensettings.xml
  2. 在父工程pom.xml里面配置RELEASE和SNAPSHORT版本的jar包上传的仓库
    <distributionManagement>
        <repository>
        	<!--配置RELEASE包上传的仓库地址,注意id需要与settings.xml里面配置的用户密码对应的ID一致-->
            <id>xuhx_nexus</id>
            <url>http://localhost:8081/repository/xuhx_RELEASE/</url>
        </repository>
        <snapshotRepository>
        	<!--配置RELEASE包上传的仓库地址,注意id需要与settings.xml里面配置的用户密码对应的ID一致-->
            <id>xuhx_nexus</id>
            <url>http://localhost:8081/repository/xuhx_SNAPSHOT/</url>
        </snapshotRepository>
    </distributionManagement>
    
  3. 点击下面的按钮发布项目到远程仓库
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值