Maven进阶篇超详细笔记

Maven进阶篇详细笔记,源码可见下载链接
大家阅读时可善用目录功能,可以提高大家的阅读效率
下载地址:Maven笔记+项目源码


分模块开发

分模块开发的意义

  • 将原始模块查分成若干个子模块,方便模块间的相互调用,接口共享

分模块开发的步骤

  1. 创建Maven工程
    • 将要拆分的功能放入另一个模块中(这里将原来的domain中的Book拆出去了)
  2. 书写代码模块
  • 目标模块pom文件


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>org.examplegroupId>
  <artifactId>SSMartifactId>  
  <packaging>pompackaging>
  <version>1.0-SNAPSHOTversion>
    <dependencies>

      <dependency>
        <groupId>org.examplegroupId>
        <artifactId>Maven_1artifactId>
        <version>1.0-SNAPSHOTversion>
      dependency>
        ...
    dependencies>
project>
  • 拆分出的pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <groupId>org.examplegroupId>
    <artifactId>Maven_1artifactId>
    <version>1.0-SNAPSHOTversion>
project>
  1. 通过maven指令安装模块到本地仓库
    • 运行拆分出模块的install指令,将其安装到本地
    • 再去运行原项目的compile指令,就可以运行了

注:如果不执行install之指令,在运行原项目的时候就会报错


依赖管理

依赖传递

  • 依赖具有传递性

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

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

如何直观的显示直接/间接依赖

Maven进阶篇超详细笔记_第1张图片
Maven进阶篇超详细笔记_第2张图片

可选依赖

  • 可选依赖是指对外隐藏所依赖的资源——不透明,我的依赖不给别人用

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>Maven_1artifactId>
    <version>1.0-SNAPSHOTversion>

    <dependencies>
        <dependency>
            <groupId>org.examplegroupId>
            <artifactId>Maven_2artifactId>
            <version>1.0-SNAPSHOTversion>

            <optional>falseoptional>
        dependency>
    dependencies>
project>

排除依赖

  • 排除依赖是指主动断开依赖,被排除的资源无需指定版本——别人的依赖我不想用


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>org.examplegroupId>
  <artifactId>SSMartifactId>  
  <packaging>pompackaging>
  <version>1.0-SNAPSHOTversion>
    <dependencies>

      <dependency>
        <groupId>org.examplegroupId>
        <artifactId>Maven_1artifactId>
        <version>1.0-SNAPSHOTversion>

          <exclusions> 
              <exclusion> 
                  <groupId>org.examplegroupId>
                  <artifactId>Maven_2artifactId>
              exclusion>
          exclusions>
      dependency>
        ...
  dependencies>
project>

继承和聚合

聚合

  • 聚合: 将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
  • 聚合工程 :通常是一个不具有业务功能的“空”工程(有且仅有一个pom)文件
  • 作用: 使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
    • 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块的关联模块同步更新,
      此时可以使用聚合工程来解决批量模块同步构建的问题

聚合开发步骤

  1. 创建maven模块,设置打包类型为pom
  2. 设置当前聚合工程所包含的子模块名称

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>MavenartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>


    <modules>
        <module>../SSMmodule>
        <module>../Maven_1module>
        <module>../Maven_2module>
    modules>
project>

继承

  • 概念: 继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
  • 作用:
    • 简化配置
    • 减少版本冲突

继承步骤

  1. 创建maven模块,打包方式设为pom(跟聚合相同)
  2. 在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)
  3. 在父工程中配置可选的依赖
  • 父工程

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>MavenartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>
    

<dependencies>
   <dependency>
       <groupId>org.springframeworkgroupId>
       <artifactId>spring-webmvcartifactId>
       <version>5.2.10.RELEASEversion>
   dependency>
dependencies>



    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.12version>
                <scope>testscope>
            dependency>
        dependencies>
    dependencyManagement>
project>
  • 子工程


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>org.examplegroupId>
  <artifactId>SSMartifactId>  
  <packaging>warpackaging>
  <version>1.0-SNAPSHOTversion>
    

    <parent>
        <groupId>org.examplegroupId>
        <artifactId>MavenartifactId>
        <version>1.0-SNAPSHOTversion>

        <relativePath>../Maven/pom.xmlrelativePath>
    parent>

    <dependencies>
      <dependency>
        <groupId>org.examplegroupId>
        <artifactId>Maven_1artifactId>
        <version>1.0-SNAPSHOTversion>
      dependency>

        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <scope>testscope>
        dependency>
  dependencies>
project>

继承和聚合的区别

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

属性

pom文件中使用属性

  • 定义属性-properties
  • 使用属性-${}

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>MavenartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>
    <dependencies>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>${spring.version}version>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
            <version>${spring.version}version>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-testartifactId>
            <version>${spring.version}version>
        dependency>
    dependencies>


    <properties>
        <spring.version>5.2.9.RELEASEspring.version>
    properties>
project>

资源文件中引用属性

  1. 定义属性
  2. 在pom中设属性生效范围
  3. 在资源文件中调用属性
  • pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>MavenartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>
  

    <properties>
        <jdbc.url>jdbc:mysql:///ssm_db?useSSL=falsejdbc.url>
    properties>

    <build>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resourcesdirectory>
                <filtering>truefiltering>
            resource>
        resources>
    build>
project>
  • jdbc.properties
    • 可定义多个,这里只定义一个用于举例说明
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=123456
  1. 配置maven打war包时不检查web.xml是否存在


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>org.examplegroupId>
  <artifactId>SSMartifactId>  
  <packaging>warpackaging>
  <version>1.0-SNAPSHOTversion>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-war-pluginartifactId>
        <version>3.4.0version>
        <configuration>
          <failOnMissingWebXml>falsefailOnMissingWebXml>
        configuration>
      plugin>
    plugins>
  build>
project>

其他属性

Maven进阶篇超详细笔记_第3张图片

版本管理

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

Maven多环境开发配置与应用

多环境开发

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

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>MavenartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>

    <profiles>

        <profile>
            <id>env_depid>
            <properties>
                <jdbc.url>jdbc:mysql:///ssm_db?useSSL=falsejdbc.url>
            properties>
        profile>

        <profile>
            <id>env_proid>
            <properties>
                <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db?useSSL=falsejdbc.url>
            properties>

            <activation>
                <activeByDefault>trueactiveByDefault>
            activation>
        profile>

        <profile>
            <id>env_testid>
            <properties>
                <jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db?useSSL=falsejdbc.url>
            properties>
        profile>
    profiles>


    <build>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resourcesdirectory>
                <filtering>truefiltering>
            resource>
        resources>
    build>
project>
  1. 使用多环境

mvn 指令 -p 环境定义id 范例:

mvn install -p pro_env

跳过测试

  • 应用场景

    • 功能更新中且没有开发完成
    • 快速打包
  • 使用方式

    • idea自带的maven功能
    • maven插件
    • maven语句
  1. idea自带的maven功能

Maven进阶篇超详细笔记_第4张图片

2.maven插件(细粒度控制跳过测试)


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>MavenartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>pompackaging>


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

        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-surefire-pluginartifactId>
                <version>2.22.1version>
                <configuration>
                    <skipTests>falseskipTests>
                    
                    <excludes>
                        <exclude>**/BookServiceTest.javaexclude>
                    excludes>
                configuration>
            plugin>
        plugins>
    build>
project>
  1. maven指令

mvn 指令 -D skipTests

mvn install -D skipTests


私服

私服简介

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

  • Nexus

    • Sonatype公司的一款maven私服产品

Nexus安装与启动

  • 在nexus-3.62.0-01-win64\nexus-3.62.0-01\bin 目录下启用cmd
  • 输入命令行启动服务器
    nexus.exe /run nexus
  • 访问服务器,在浏览器中输入 http://localhost:8081
  • 修改基础配置信息
    • 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口
  • 修改服务器运行配置信息
    • 安装路径下bin目录中,nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用空间

私服资源操作流程分析

Maven进阶篇超详细笔记_第5张图片

私服仓库分类

Maven进阶篇超详细笔记_第6张图片

私服仓库配置

  1. 在私服管理页面>设置界面>Repositories>create repository —— 新建宿主仓库,
    一般新建两个,(snapshot,release)
  2. 将新建的宿主仓库纳入到仓库组中,在maven-public仓库组的group选项中将两个仓库纳入,并save
  3. 在maven配置文件中设置访问私服权限以及私服访问路径
  • setting.xml
<setting>
	
<servers>
    <server>
      <id>lonelysnow-releaseid> 
      <username>adminusername>
      <password>123456password>
    server>
    <server>
      <id>lonelysnow-snapshotid> 
      <username>adminusername>
      <password>123456password>
    server>
servers>

        
<mirrors>
    <mirror>
        <id>maven-publicid> 
        <mirrorOf>*mirrorOf>
        <url>http://localhost:8081/repository/maven-public/url>
    mirror>
mirrors>
  
setting>
  1. 工程上传到私服服务器设置
  • pom.xml

    <distributionManagement>
        <repository>
            <id>lonelysnow-releaseid>
            <url>http://localhost:8081/repository/lonelysnow-release/url>
        repository>

        <snapshotRepository>
            <id>lonelysnow-snapshotid>
            <url>http://localhost:8081/repository/lonelysnow-snapshot/url>
        snapshotRepository>
    distributionManagement>
  1. 发布命令
    mvn deploy

你可能感兴趣的:(学习笔记,maven,笔记,java,后端,开发语言)