Maven的高级使用

文章目录

    • 私服仓库概述
      • 中央仓库
      • 仓库的索引
      • 黑名单
      • 私服
    • 搭建私服仓库
      • 安装:
      • 启动:
      • 访问:
    • 私服类别
    • Nexus配置
      • 配置中央仓库:
    • 上传至私服
    • 私服拉取依赖
    • 依赖关系
      • 依赖传递:
      • 依赖可选
      • 依赖排除
      • 依赖冲突
    • 多环境配置
      • 配置多环境流程
      • 三种开发模式
      • 继承与聚合

私服仓库概述

Maven的高级使用_第1张图片

中央仓库

目前来说: https://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中,其他的都是镜像。

什么是仓库镜像

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像,使用镜像可以提高项目构建效率。

仓库的索引

中央仓库带有索引文件以方便用户对其进行搜索,索引每周更新一次,中央仓库的索引有几十M。

黑名单

如果某个IP地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用Nexus架设私服。

私服

有些公司不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。

搭建私服仓库

  • Nexus的官网: https://www.sonatype.com/

  • 默认是使用jetty做为web容器

Maven的高级使用_第2张图片

Maven的高级使用_第3张图片

安装:

  1. 在任意位置创建目录:nexus

  2. 解压到nexus目录下会出现两个目录,两个目录都有用

  3. 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口,nexus默认的端口号是8081

  4. 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间

启动:

  1. 进入以下nexus安装文件夹的bin目录
  2. 输入cmd进入命令行
  3. 可以输入nexus /?查看所有的参数
  4. 输入nexus /run nexus在窗口下运行服务器
  5. 允许Window Defender防火墙的访问警报
  6. 启动成功,默认是8081,cmd窗口不可关闭,否则视为退出

访问:

  1. 当Nexus启动后,可以在浏览器中输入:http://localhost:8081/进入私服页面
  2. 点击右上角登录,输入默认的帐号:admin
  3. 密码:在nexus/sonatype-work/nexus3/admin.password文件中找
  4. 登录成功以后出现配置向导,修改密码,输入两次
  5. 允许匿名的账户登录->配置完成

私服类别

Maven的高级使用_第4张图片

proxy:是远程仓库的代理。比如说在nexus中配置了一个central仓库的proxy,当用户向这个proxy请求一个组件,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。

Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,在central repository是获取不到的,就需要手动上传到hosted里。

Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了。

注:公司内部通常只需关注hosted宿主仓库就可以了

Nexus配置

配置中央仓库:

Nexus的中央仓库,默认配置的是maven的中央仓库:https://repo1.maven.org/maven2/,为了提高速度可以配置成阿里云的中央仓库https://maven.aliyun.com/repository/central

Maven的高级使用_第5张图片

Maven的高级使用_第6张图片

​ !!!!注意:切记保存!!!!

修改RELEASES为可以重复部署:

Maven的高级使用_第7张图片

Maven的高级使用_第8张图片

​ !!!!注意:切记保存!!!!

上传至私服

  1. 配置本地仓库访问私服的权限,修改maven的conf/settings.xml配置文件,用户名和密码,复制如下片段到相应的位置,大约在111行。注意:密码要与你设置的密码相同
<server>
	<id>releasesid>
	<username>adminusername>
	<password>adminpassword>
server>
<server>
	<id>snapshotsid>
	<username>adminusername>
	<password>adminpassword>
server>
  1. 重新创建一个新的模块,配置要上传项目中的发布管理,坐标如下:
<groupId>com.lxlgroupId>
<artifactId>demo-maven-aartifactId>
<version>1.0-SNAPSHOTversion>

  1. 在pom.xml文件中添加以下代码段
<distributionManagement>
  	<repository>
  		<id>releasesid>
	    <url>http://localhost:8081/repository/maven-releases/url>
  	repository> 
  	<snapshotRepository>
  		<id>snapshotsid>
	    <url>http://localhost:8081/repository/maven-snapshots/url>
  	snapshotRepository> 
distributionManagement>

  1. 执行deploy命令,上传项目到私服

  2. 查看上传日志结果

  3. 修改当前模块的坐标为RELEASE

  4. 再次执行deploy命令,上传到私服

  5. 去私服查看上传的结果

私服拉取依赖

  1. 假设上面的模块是A,创建另一个模块B,依赖于上面的模块A
<groupId>com.lxlgroupId>
<artifactId>demo-maven-bartifactId>
<version>1.0-RELEASEversion>

<dependencies>
    
    <dependency>
        <groupId>com.itheimagroupId>
        <artifactId>day38-01-maven-aartifactId>
        <version>1.0-RELEASEversion>
    dependency>
dependencies>
  1. 删除本地仓库中A模块的jar包
  2. 修改%MAVEN_HOME%\conf\setttings.xml文件,项目B是依赖于私服仓库中模块A
<mirror>
   <id>nexusid>
   <mirrorOf>*mirrorOf>
   <url>http://localhost:8081/repository/maven-public/url>
mirror>
  1. clean清除项目B,再complie编译一次

  2. 查看日志信息是从私服仓库中下载

  3. 修改回原来的阿里云配置,私服mirror地址只是临时配置

依赖关系

依赖传递:

  • compile, runtime 在运行时中起作用中范围会产生依赖传递

依赖可选

  • A项目依赖了junit,B项目依赖了A项目,根据依赖传递特性,默认情况下B项目会依赖junit,可以在A项目通过可选依赖,让B项目不能依赖junit
  • 配置方式:A项目的依赖配置中,通过optional子标签进行配置。它有两个取值:
    • true:是可选依赖,不进行依赖传递

    • false:默认值,进行依赖传递。

<dependency>
	<groupId>junitgroupId>
	<artifactId>junitartifactId>
	<version>4.12version>
	<scope>compilescope>


dependency>

依赖排除

  • A项目依赖了junit,B项目依赖了A项目,根据依赖传递特性,默认情况下B项目会依赖junit,我们可以在B项目通过排除依赖,配置B项目不依赖junit
  • 配置步骤:通过在B项目中配置 exclusions标签进行配置:
    1. 在依赖A项目下的version标签下编写exclusions
    2. exclusions中每个exclusion是一个要排除的jar包
    3. 只需指定groupId和artifactId就可以了,不用指定version版本

<dependency>
	<groupId>com.itheimagroupId>
	<artifactId>day51_02_AartifactId>
	<version>1.0-SNAPSHOTversion>
	
	<exclusions>
	
		<exclusion>
		
			<groupId>junitgroupId>
			<artifactId>junitartifactId>
		exclusion>
	exclusions>
dependency>

依赖冲突

依赖冲突的三种情况 依赖如何处理的
两个直接依赖 以下面配置的为准
一个直接依赖一个间接依赖 以直接为准
两个间接依赖 以上面配置的为准

多环境配置

Maven的高级使用_第9张图片

配置多环境流程

  1. 创建的maven工程,复制jdbc.properties到resources目录下

  2. 修改jdbc.properties中的jdbc.url=${jdbc.url}

  3. 在pom.xml中profiles下配置三个不同的环境:开发,生产,测试

  4. 在profile的properties中分别指定不同的jdbc.url属性值

  5. 分别选择不同的profile


    
    
        
        env_dev
        
        
            jdbc:mysql://127.0.0.1:3306/ssm
        
        
        
            true
        
    
    
    
        
        env_pro
        
        
            jdbc:mysql://127.2.2.2:3306/ssm
        
    
    
    
        
        env_test
        
        
            jdbc:mysql://127.3.3.3:3306/ssm
        
    

  1. 指定resource的目录地址和开启替换的参数

    
        
        
            
            ${basedir}/src/main/resources
            
            true
        
    

  1. 运行package命令,查看target中的jar包中jdbc.properties中的url是否不同
  2. 也可以使用命令行方式执行,mvn 指令 –P 环境定义id

三种开发模式

传统模式开发:传统开发方式是将这些业务集中在1个web项目中, 缺点是代码量大, 业务插拔不方便 。

Maven的高级使用_第10张图片

模块开发:模块化开发业务清晰,维护方便,业务插拔较简单,缺点是各模块间仍然存在依赖 。

Maven的高级使用_第11张图片

微服务开发:将各个业务拆分成多个独立的系统。

Maven的高级使用_第12张图片

继承与聚合

分模块的作用:

  1. 项目架构一目了然,更清晰
  2. 有利于团队合作开发,不同的成员开发一个模块
  3. 代码的可维护性更强
  4. 更方便重用,例如:所有的工具类都写到一个utils工程中,不仅当前项目可以用,其他项目也可以用。

继承作用:

  1. 父项目:

    1. 抽取所有项目公用的配置和插件

    2. 锁定当前项目中各个子项目依赖的版本

  2. 子项目:

    继承父项目,父项目的公用的配置就可以直接使用了

dependencyManagement元素:

  • 作用:一旦在父项目中使用了版本锁定,就是统一控制各个组件的版本。
  • 如果子项目继承父项目,父项目中版本锁定的包子项目是不能直接使用的。
  • 如果要使用,需要在子项目添加依赖,但不需要指定版本号。
  • 注:父项目中版本锁定的jar包,子项目中可以使用,也可以不使用

你可能感兴趣的:(Maven,maven,java,服务器)