【JAVA】MavenPlus

本文详细介绍了Maven在模块化开发中的应用,包括分模块的意义、使用方法,以及依赖管理的各个方面,如依赖传递、可选依赖、排除依赖。此外,还阐述了聚合与继承的概念,解释了它们的区别,并展示了如何配置属性、进行版本管理和多环境配置。最后,讨论了Maven私服的使用,包括Nexus的安装与配置,以及资源上传与下载的步骤。

目录

【Maven】

【分模块开发与设计】

【意义】

【使用】

【依赖管理】

【依赖传递】

【可选依赖】

【排除依赖】

【聚合与继承】

【聚合】

【聚合工程使用】

【继承】

【继承关系使用】

【聚合与继承的区别】

【属性】

【属性配置的使用】

【资源文件引用属性】

【其他属性】

【版本管理】

【多环境配置与应用】

【多环境开发】

【使用】

【跳过测试】

【私服】

【Nexus】

【安装与启动】

【私服仓库分类】

【资源上传与下载】

【本地仓库访问私服权限设置】

【本地仓库访问私服地址设置】 

【工程上传到私服服务器设置】

【私服访问中央服务器设置】


【Maven】

【分模块开发与设计】

【意义】

将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享

【使用】

1、创建Maven模块

2、书写模块代码

3、通过maven指令安装模块到本地仓库(install指令)

【依赖管理】

【概述】

依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

【依赖传递】

【概述】

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

【依赖冲突】

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

 

【可选依赖】

可选依赖指对外隐藏当前所依赖的资源,隐藏后对应资源将不具有依赖传递

<dependency>
    <groupId>com.itheima</groupId>
    <artifactId>maven_03_pojo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--可选依赖是隐藏当前工程所依赖的资源,隐藏后对应资源将不具有依赖传递性-->
    <optional>false</optional>
</dependency>

【排除依赖】

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本————不需要

<dependency>
  <groupId>com.itheima</groupId>
  <artifactId>maven_04_dao</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--排除依赖是隐藏当前资源对应的依赖关系-->
  <exclusions>
    <exclusion>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </exclusion>
    <exclusion>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
    </exclusion>
  </exclusions>
</dependency>

【注意】

排除依赖资源仅指定GA即可,无需指定V

【聚合与继承】

【聚合】

【概述】

将多个模块组织成一个整体,同时进行项目构建的过程称为聚合

【聚合工程】

通常是一个不具有业务功能的“空”工程(有且仅有一个pom文件)

【作用】

  • 使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
  • 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题

【聚合工程使用】

1、创建Maven模块,设置打包类型为pom

<packaging>pom</packaging>

【注意】

每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war

2、设置当前聚合工程所包含的子模块名称

<modules>
    <module>../maven_ssm</module>
    <module>../maven_pojo</module>
    <module>../maven_dao</module>
</modules>

【注意】

  • 聚合工程中所包含的模块在进行构建时会根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关
  • 参与聚合的工程无法向上感知是否参与聚合,只能向下配置哪些模块参与本工程的聚合

【继承】

【概述】

继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承

【作用】

  • 简化配置
  • 减少版本冲突

【继承关系使用】

1、创建Maven模块,设置打包类型为pom

<packaging>pom</packaging>

【注意】

建议父工程打包方式设置为pom

2、在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.10.RELEASE</version>
  </dependency>
  ……
</dependencies>

3、配置子工程中可选的依赖关系

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
        ……
    </dependencies>
</dependencyManagement>

4、在子工程中配置当前工程所继承的父工程

    <!--配置当前工程继承自parent工程-->
    <parent>
        <groupId>org.example</groupId>
        <artifactId>maven_00_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../maven_00_parent/pom.xml</relativePath>
    </parent>

5、在子工程中配置使用父工程中可选依赖的坐标

 <dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>
</dependencies>

【注意】

  • 子工程中使用父工程中的可选依赖时,仅需要提供群组id和项目id,无需提供版本,版本由父工程统一提供,避免版本冲突
  • 子工程中还可以定义父工程中没有定义的依赖关系

【聚合与继承的区别】

【作用】

  • 聚合用于快速构建项目
  • 继承用于快速配置

【相同点】

  • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
  • 聚合与继承均属于设计型模块,并无实际的模块内容

【不同点】

  • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
  • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

【属性】

【属性配置的使用】

1、定义属性

<!--定义自定义属性-->
<properties>
  <spring.version>5.2.10.RELEASE</spring.version>
  <junit.version>4.12</junit.version>
</properties>

2、引用属性

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

【资源文件引用属性】

1、定义属性

<!--定义自定义属性-->
<properties>
  <spring.version>5.2.10.RELEASE</spring.version>
  <junit.version>4.12</junit.version>
  <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
</properties>

2、配置文件中引用属性

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=root

3、开启资源文件目录加载属性的过滤器

<build>
  <resources>
    <resource>
      <directory>${project.basedir}/src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

4、配置maven打war包时,忽略web.xml检查

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.2.3</version>
  <configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</plugin>

【其他属性】

属性分类引用格式示例
自定义属性${自定义属性}${spring.version}
内置属性${内置属性名}${basedir}   ${version}
Setting${setting.属性名}${settings.localRepository}
Java系统属性${系统属性分类.系统属性名}${user.home}
环境变量属性${env.环境变量属性名}${env.JAVA_HOME}

【版本管理】

工程版本:

  • SNAPSHOT(快照版本)
    • 项目开发过程中临时输出的版本,称为快照版本
    • 快照版本会随着开发的进展不断更新
  • RELEASE(发布版本)
    • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

发布版本

  • alpha版
  • beta版
  • 纯数字版

【多环境配置与应用】

【多环境开发】

maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境

【使用】

1、定义多环境

<!--定义多环境-->
<profiles>
  <!--定义具体的环境:生产环境-->
  <profile>
    <!--定义环境对应的唯一名称-->
    <id>env_dep</id>
    <!--定义环境中专用的属性值-->
    <properties>
      <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
    </properties>
    <!--设置默认启动-->
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
  </profile>
  <!--定义具体的环境:开发环境-->
  <profile>
    <id>env_pro</id>
    ……
  </profile>
</profiles>

2、使用多环境(构建过程)

mvn 指令 –P 环境定义id

例:mvn install –P pro_env

【跳过测试】

mvn 指令 –D skipTests

例:mvn install –D skipTests

【注意】

执行的项目构建指令必须包含测试生命周期,否则无效果。例如执行compile生命周期,不经过test生命周期

【细粒度控制跳过测试】

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.1</version>
  <configuration>
    <skipTests>true</skipTests><!--设置跳过测试-->
    <includes> <!--包含指定的测试用例-->
      <include>**/User*Test.java</include>
    </includes>
    <excludes><!--排除指定的测试用例-->
      <exclude>**/User*TestCase.java</exclude>
    </excludes>
  </configuration>
</plugin>

【私服】

【概述】

私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题

【Nexus】

Sonatype公司的一款maven私服产品

下载地址:Download

【安装与启动】

  • 启动服务器(命令行启动)

nexus.exe /run nexus

  • 访问服务器(默认端口:8081)

http://localhost:8081

  • 修改基础配置信息
    • 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口
  • 修改服务器运行配置信息
    • 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间

【私服仓库分类】

仓库类别英文名称功能关联操作
宿主仓库hosted保存自主研发+第三方资源上传
代理仓库proxy代理连接中央仓库下载
仓库组group为仓库编组简化下载操作下载

【资源上传与下载】

【本地仓库访问私服权限设置】

配置位置(setting.xml文件中)

<servers>
  <server>
    <id>heima-release</id>
    <username>admin</username>
    <password>admin</password>
  </server>
  <server>
    <id>heima-snapshots</id>
    <username>admin</username>
    <password>admin</password>
  </server>
</servers>

【本地仓库访问私服地址设置】 

配置位置(setting.xml文件)

<mirrors>
  <mirror>
    <id>nexus-heima</id>
    <mirrorOf>*</mirrorOf>
    <url>http://localhost:8081/repository/maven-public/</url>
  </mirror>
</mirrors>

【工程上传到私服服务器设置】

配置位置(工程pom文件中)

<distributionManagement>
  <repository>
    <id>heima-release</id>
    <url>http://localhost:8081/repository/heima-release/</url>
  </repository>
  <snapshotRepository>
    <id>heima-snapshots</id>
    <url>http://localhost:8081/repository/heima-snapshots/</url>
  </snapshotRepository>
</distributionManagement>

发布命令

mvn deploy

【私服访问中央服务器设置】

配置位置(nexus服务器页面设置)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lx_Hy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值