Maven

157 阅读7分钟

Maven项目管理工具

1Maven简介

    1、什么是Maven Maven是跨平台的项目管理工具。主要服务鱼基于Java平台的项目构建,依赖管理和项目信息管理。 
    
    2、什么是理想的项目构建 清理--->编译--->测试--->报告--->打包--->部署 高度自动化,跨平台,可重用的组件,标准化的 
    
    3、什么是依赖?为什么要进行依赖管理? 自动下载,统一依赖管理 
    
    4、有哪些项目信息 项目名称描述等,开发人员信息,开发者信息 
    
    5、项目构建过程 

2为什么使用Maven

不使用Maven:
    1、手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成 
    2、每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错
使用Maven: 
    1、拥有约定,知道你的代码在哪里,放到哪里去 
    2、拥有一个生命周期,例如执行 mvn install就可以自动执行编译,测试,打包等构建过程 
    3、只需要定义一个pom.xml,然后把源代码放到默认目录,Maven帮你处理其他事情 
    4、拥有依赖管理,仓库管理

Maven相关概念介绍

    1、项目对象模型(POM) 
    2、坐标 什么是坐标 
        在平面几何中坐标(x,y)可以标识平面中唯一的一点 
        Maven坐标主要组成 
        groupId:定义当前Maven项目隶属项目 
        artifactId:定义实际项目中的一个模块 
        version:定义当前项目的当前版本 
        packaging:定义该项目的打包方式 
        Maven为什么使用坐标 
        Maven世界拥有大量构建,我们需要找一个用来标识 

3依赖管理

3.1依赖声明

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  1. 2依赖范围

    依赖范围scope用来控制依赖和编译、测试、运行的classpath的关系 compile:默认编译依赖范围。对于编译、测试、运行三种classpath都有效。 test:测试依赖范围。只对于测试classpath有效。 provided:已提供依赖访问。对于编译、测试的classpath有效,但对于运行无效,因为容器已经提供,例如servlet-api runtime:运行时提供。例如jdbc驱动。

4仓库管理

何为Maven仓库

用来统一存储所有Maven共享构建的位置就是仓库
Maven仓库布局
根据Maven坐标定义每个构建在仓库中唯一存储路径
大致为:groupId/artifactId/version/artifactId-version.packaging
仓库的分类
    本地仓库
    ~/.m2/repository/
    每个用户只有一个本地仓库
    远程仓库
    中央仓库:Maven默认的远程仓库http://repo1.maven.org/maven2/
    私服:是一种特殊的远程仓库,它是架设在局域
    镜像:用来替代中央仓库,速度一般比中央仓库

5生命周期

何为生命周期

    Maven生命周期就是为了对所有的构建过程进行抽象和统一
    包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤
    Maven三大生命周期
    clean:清理项目的
    default:构建项目的
    site:生成项目站点的

6仓库

1、本地仓库 设置本地仓库:conf/setting.xml

7.Maven插件

        Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的,每个插件都能实现多个功
    能,每个功能就是一个插件目标。Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任
    务。例如:compile就是插件maven-compiler-plugin的一个插件目标。

7.1jdk编译插件

7.2源码打包插件

        1.解决idea中,创建web项目慢的方式:
    在Properties中添加Name:archetypeCatalog和Value:internal,如下图那样
    也可以在设置中指定Maven-Runne的VM: -DarchetypeCatalog为internal
    打包插件pom.xml:
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.2.1</version>
          <executions>
            <execution>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            <phase>verify</phase>
            </execution>
          </executions>
        </plugin>
        Tomcat插件:
        <!--Tomcat插件 -->
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.1</version>
          <configuration>
            <port>8081</port>
            <server>tomcat7</server>
          </configuration>
        </plugin>

8.继承与聚合

    继承是为了消除重复,可以把pom中很多相同的配置提取出来,如:groupId,version等。在使用的时候,子工程直接继承,父工程的依赖版本号,子工程中不再需要指定具体版本号,方便统一管控项目的依赖版本问题。
    父工程的设置:父工程的pom.xml中打包的方式必须设置为pom方式。

8.1聚合工程的作用

如果想一次构建多个项目模块,那则需要对多个项目模块进行聚合
<modules>
  <module>子项目名称1</module>
  <module>子项目名称2</module>
  <module>子项目名称3</module>
</modules>

8.2继承与聚合

聚合主要是为了快速构建项目;继承主要是为了消除重复。

9.Maven私服

9.1私服的好处

    缓存Maven中央仓库的jar包,这样不需要每次本地仓库没有jar包而不必到中央仓库下载,而是到私服下载。
解决公司无法上网,而又要连接中央仓库的问题。只要连接私服,确保私服可以连接到中央仓库。
方便公司内部不同团队或者项目共享jar包,需要共享jar包,可以上传到私服,通过私服共享。
9.2Nexus安装与仓库概念

    Nexus下载地址:https://www.sonatype.com/nexus-repository-oss

安装:
解压文件
启动服务 nexus.exe /run (启动成功后不要关闭命令行窗口)
安装服务 nexus.exe /install (重新使用新的命令行安装,可能出现权限不足,请以管理员身份运行命令行)
启动服务 net start nexus
停止服务 net stop nexus
访问页面 http://localhost:8081/
初始登录用户名和密码:admin/admin123

9.3从Nexus私服下载资源

找到maven配置文件settings.xml,添加如下配置

1)添加镜像配置,将所有访问外网仓库的请求指向私服
<mirror>
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <url>http://localhost:8081/repository/maven-public/</url>
</mirror>
2)添加profiles,所有请求均通过镜像
<profile>
  <id>nexus</id>
  <repositories>
    <repository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2</url>
      <releases><enabled>true</enabled></releases>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2</url>
      <releases><enabled>true</enabled></releases>
      <snapshots><enabled>true</enabled></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>
3)生效配置
<activeProfiles>
  <activeProfile>nexus</activeProfile>
</activeProfiles>

9.4上传资源到Nexus私服

1)在pom.xml中配置,上传资源到nexus
<distributionManagement>
  <repository>
    <id>release</id>
    <name>Internal Release</name>
    <url>http://localhost:8081/repository/maven-releases/</url>
  </repository>
  <snapshotRepository>
    <id>snapshots</id>
    <name>Internal Snapshots</name>
    <url>http://localhost:8081/repository/maven-snapshots/</url>
  </snapshotRepository>
</distributionManagement>
2)在maven的配置文件中配置上传权限
<server>
  <id>release</id>
  <username>admin</username>
  <password>admin123</password>
</server>
<server>
  <id>snapshots</id>
  <username>deployment</username>
  <password>deployment123</password>
</server>