Maven

Maven概念

  • Maven 是专门用于管理java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构

  1. 提供了一套标准化的构建流程(编译,测试,打包,发布)

  2. 提供了一套依赖管理机制

  • 依赖管理

    1. 其实就是你项目所依赖的第三方资源(jar 包,插件..)

    2. Maven 使用标准的坐标配置来管理各种依赖

    3. 只需要简单的配置就可以完成依赖管理。

maven 命令的编译

在mom.xml 文件打开cmd,执行命令行 mvn ...

  • Maven 常用命令

    • compile : 编译

    • clean :清理

    • test :测试

    • package:打包

    • install: 安装

  • IDEA 配置maven

    1. 在seting中搜索maven ,设置本地使用安装的Maven,并修改配置文件的路径。

    2. Maven home path:D:\develop\maven\apache-maven-3.8.4

    3. user stting file: D:\develop\maven\apache-maven-3.8.4\conf

  • 依赖范围

    通过设置坐标范围(scope)。可以设置对应的jar包范围作用:编译环境,测试环境,运行环境。

依赖范围编译测试运行类子
compile Y Y Y loback
test -- Y -- junit
provided Y Y -- servlet-api
rutime -- Y Y jdbc 驱动
system Y Y -- 存储在本地的仓库
import        
  • <scope> 默认值:compile

  • Build Tools ——>any changes :将自动更新

  • maven的生命周期

Maven 对项目构建的生命周期划分为三套

  • clean:清理工作

  • default:核心工作,类如编译,测试,打包,安装

  • site:产生报告,发布站点等

    *同一生命周期内,执行后面的命令,前面的所有命令会自动执行

2.Maven 坐标

  • maven中的坐标是资源的唯一标识

  • 使用坐标来定义项目或者引入项目中需要的依赖

  • groupld: 公司的组织名称,域名反写,类如com.ithima

  • artifactld:定义当前Maven项目名称(通常是模块名称)

  • version:定义当前的版本

3.idea 导入Maven项目

1. 将maven放入workspace中
  2. 选择maven,点击+
  3. 选中对应的项目的pom.xml文件,双击即可

Maven 配置

  • maven 配置本地仓库

    *默认是在C盘,在D盘maven中创建一个仓库目录,然后在maven中conf文件夹--settings.xml配置本地仓库。

    *<localRepository>表签中,将D盘中中的新建的目录替换,就ok

  • 配置镜像仓库,

  • 在setting.xml中配置阿里云的镜像仓库,

Maven 高级

分模块开发

依赖管理

  • 依赖具有传递性

    1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系

    2. 间接依赖:被资源的资源如果依赖其它资源,当前项目间接依赖其它资源

  • 依赖传递冲突问题

    1. 路径优先:当依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高。

    2. 声明优先:当资源在相同层级被依赖时,配置顺序靠前覆盖配置顺序靠后的。

    3. 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。

可选依赖 & 排除依赖

  • 可选依赖:对外隐藏当前所依赖的资源--不透明(别人用我的)

    <dependency>
               <groupId>org.example</groupId>
               <artifactId>maven-03-ssm</artifactId>
               <version>1.0-SNAPSHOT</version>
               <!--可选依赖是:隐藏当前所以依赖的资源,隐藏后对应资源将不具有依赖传递性-->
    <!--            <optional>true</optional>-->
           </dependency>
  • 排除依赖:主动断开依赖资源,被排除的资源无需指定版本--不需要,(我用别人的东西)

    <dependency>
               <groupId>org.example</groupId>
               <artifactId>maven-04-ssm</artifactId>
               <version>1.0-SNAPSHOT</version>
               <!--排除依赖是隐藏当前资源的依赖关系-->
               <exclusions>
                   <exclusion>
                       <groupId>junit</groupId>
                       <artifactId>junit</artifactId>
                   </exclusion>
                   <exclusion>
                       <groupId>org.mybatis</groupId>
                       <artifactId>mybatis</artifactId>
                   </exclusion>
               </exclusions>
           </dependency>

     

继承与聚合

  • 聚合

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

    • 聚合工程:通常是一个不具有业务功能的 工程(仅有一个pom文件)

    • 作用:

      *使用聚合工程可以将多个工程进行编组,通过聚合工程进行构建,实现对所包含的模块

      进行同步构建。

      * 当工程中的某个模块发生变更时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题。

       

  • 继承

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

    • 作用:简化配置,减少版本冲突

  • 聚合与继承的区别

  • 聚合

    <!--父工程管理模块-->
      <modules>
          <module>../maven-02-config</module>
          <module>../maven-03-domain</module>
          <module>../maven-04-dao</module>
          <module>../maven-05-service</module>
          <module>../maven-06-exception</module>
          <module>../maven-07-controller</module>
      </modules>
       
      <!--可选择的依赖,不一定要继承-->
      <dependencyManagement>
          <dependencies>
              <!--整合测试-->
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>${junit.version}</version>
                  <scope>test</scope>
              </dependency>
              <dependency>
                  <groupId>com.alibaba</groupId>
                  <artifactId>druid</artifactId>
                  <version>${druid.version}</version>
              </dependency>
          </dependencies>
      </dependencyManagement>

     

  • 继承

       <!--继承于父工程-->
      <parent>
          <groupId>org.example</groupId>
          <artifactId>maven-01-parent</artifactId>
          <version>1.0-SNAPSHOT</version>
          <relativePath>../maven-01-parent/pom.xml</relativePath>
      </parent>
       
       
      <!--这是父工程中的可选依赖,不要写版本id-->
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <scope>test</scope>
          </dependency>

     

属性

<!--管理版本-->
  <properties>
      <spring.version>5.2.10.RELEASE</spring.version>
      <mybatis.version>3.5.9</mybatis.version>
      <mysql-connector-java.version>5.1.45</mysql-connector-java.version>
      <mybatis-spring.version>1.3.0</mybatis-spring.version>
      <javax.servlet-api.version>3.0.1</javax.servlet-api.version>
      <jackson-databind.version>2.9.0</jackson-databind.version>
      <druid.version>1.1.12</druid.version>
      <junit.version>4.12</junit.version>
<!--       <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>-->
  </properties>
  • 资源

    <!--配置资源读取-->
      <!--<build>
          <resources>
              <resource>
                  <directory>${project.basedir}/src/main/resources</directory>
                  <filtering>true</filtering>
              </resource>
          </resources>
      </build>-->

     

  • 版本管理

    工程版本:

    • SHAPSHOT (快照版本):

      1. 项目开发过程中临时输出的版本,称为快照版本

      2. 快照版本会随着开发的进展不断更新

    • RELEASE (发布版本)

      1. 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构建文件是稳定的,即便对功能的后续开发,也不会改变当前发布版本的内容,称为发布版

      2. 发布版本

      • alpha版

      • beta版

      • 纯数字版

多环境配置与应用

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

<profiles>
      <!--定义具体的环境,开发环境-->
      <profile>
          <!--定义环境的唯一名称-->
          <id>env_dep</id>
          <!--定义环境中专用的属性值-->
          <properties>
              <jdbc.url>jdbc:mysql://localhost:3306/ssm_db?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</jdbc.url>
          </properties>
          <!--设置默认开启-->
          <activation>
              <activeByDefault>false</activeByDefault>
          </activation>
      </profile>
       
      <!--生产环境-->
      <profile>
          <id>env_pro</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_test</id>
          <properties>
              <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
          </properties>
      </profile>

  </profiles>

 

  • 使用多环境(构建过程)

 

mvn -P 环境定义id :mvn install -P env_test (大写的p)

 

  • 跳过测试

    1. mvn package -D skipTests

    2. 闪电符号:跳过所有的测试

     3.精细化
        <plugins>
             <plugin>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.12.4</version>
                 <configuration>
                     <skipTests>false</skipTests>
                     //选择性的排除
                     <excludes>
                         <exclude>**/BookServiceTest.java</exclude>
                     </excludes>
                 </configuration>
             </plugin>
           </plugins>

 

私服

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

  • Nexus :

    下载地址:https://help.sonatype.com/repomanager3/download

  • 启动服务器:nexus.exe /run nexus

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

分类

分三种:

  1. 宿主仓库(hosted):代码上传的仓库 上传

  2. 代理仓库(proxy):代替中央服务器的 下载

  3. 仓库组(group):管理仓库的 下载

宿主仓库 < 仓库组 < 代理仓库

本地仓库访问私服权限

配置位置(setting.xml)

<servers>
   <server>
       <id>私服仓库名name</id>
       <username>用户名</username>
       <password>密码</password>
   </server>
</servers>    

本地仓库访问私服地址

配置位置(setting.xml)

<mirrors>
   <mirror>
       <id>私服仓库名name</id>
       <mirrorOf>*</mirrorOf>
       <url>私服仓库组的路径</url>
   </mirror>
</mirrors>

发布管理

 <!--发布管理-->
  <!-- <distributionManagement>
       <repository>
           <id>私服名</id>
           <url>私服的仓库路径</url>
       </repository>
       <snapshotRepository>
           <id></id>
           <url></url>
       </snapshotRepository>
   </distributionManagement>-->

发布命令: mvn deploy