Maven的基本使用

参考自黑马程序员在b站发布的视频教程

一.Maven的安装和基本配置

1.下载地址

https://maven.apache.org/download.cgi
Maven的基本使用_第1张图片

2.复制下载的压缩包到安装目录,解压

Maven的基本使用_第2张图片

Maven目录结构:

  • \bin:
    • 该目录包含了 mvn 运行的脚本,这些脚本用来配置Java命令,准备好 classpath 和相关的Java系统属性,然后执行Java命令。
    • 其中 mvn 是基于 UNIX 平台的 shell 脚本,mvn.bat 是基于 Windows 平台的 bat 脚本。在命令行输入任何一条 mvn 命令时,实际上就是在调用这些脚本。
    • 该目录还包含了 mvnDebug 和 mvnDebug.bat 两个文件,同样,前者是 UNIX 平台的 shell 脚本,后者是 Windows 平台的 bat 脚本。打开文件可以看到,两者基本是一样的,只是 mvnDebug 多了一条 MAVEN_DEBUG_OPTS 配置,其作用就是在运行 Maven 时开启debug,以便调试 Maven 本身。
    • 该目录还包含 m2.conf 文件,这是 classworlds 的配置文件。
  • \boot:
    • 该目录存放着Maven的类加载器 plexus-classworlds框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置,Maven 使用该框架加载自己的类库。
  • \conf:
    • 这个目录存放着Maven的配置文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven 的行为。
  • \lib:
    • 该目录包含了所有 Maven 运行时需要的jar包,Maven 本身是分模块开发的,因此该目录下可以看到诸如 maven-core-3.0.jar、maven-model-3.0.jar 之类的文件。
    • 此外,这里还包含一些 Maven 用到的第三方依赖,如 common-cli-1.2.jar、commons-lang-2.6.jar 等。
  • LICENSE.txt
    • 记录了 Maven 使用的软件许可证Apache License Version 2.0。
  • NOTICE.txt
    • 记录了 Maven 包含的第三方软件。
  • README.txt
    • 包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。

3.配置环境变量(JAVA_HOME 和 MAVEN_HONE):

Maven的基本使用_第3张图片
Maven的基本使用_第4张图片

4.本地仓库配置

  1. 在安装目录下新建本地仓库文件夹
    Maven的基本使用_第5张图片

  2. 打开 \conf\settings.xml文件,配置本地仓库。
    – 在第50行左右位置

  
  
<localRepository>D:\Emvironment\apache-maven-3.8.5\maven-repolocalRepository>

5.配置国内镜像仓库

– 在150行左右位置

  <mirrors>
    
     
    <mirror>
      
      <id>nexus-aliyunid>
      
      <mirrorOf>centralmirrorOf>
      
      <name>Nexus aliyunname>
      
      <url>http://maven.aliyun.com/nexus/content/groups/public/url>
    mirror>

  mirrors>

二.Maven基础概念

1.什么是Maven

Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

  • POM (Project Object Model) :项目对象模型

    Maven的基本使用_第6张图片

2.Maven的作用

  1. 项目构建:提供标准的、跨平台的自动化项目构建方式
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包) ,避免资源间的版本冲突问题
  3. 统一开发结构:提供标准的、统一的项目结构

3.仓库

用于存储资源,包含各种jar包

  • 仓库的分类:
    • 本地仓库:本地计算机存储资源的仓库,连接远程仓库获取资源;
    • 远程仓库:非本机的仓库,为本机仓库提供资源。
      • 中央仓库:Maven团队维护,存储所有资源的仓库
      • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
  • 私服的作用:
    • 保存具有版权的资源,包含购买或自主研发的jar
      • 中央仓库的jar都是开源的,不能存储具有版权的jar
    • 一定范围内共享,仅对内开放,不对外共享。

4.坐标

Maven中坐标用于描述仓库中资源的位置。

Central Repository: (maven.org)

  • Maven坐标的组成:
    • groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)
    • artifactld:定义当前Maven项目名称(通常 是模块名称,例如CRM、SMS)
    • version:定义当前项目版本号.
    • packaging:定义该项目的打包方式
  • Maven坐标的作用
    • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

三.创建Maven项目

  • Maven项目目录结构

    ├─ project
    │    └─ module
    │        └─ src
    │            ├─ pom.xml
    │            │
    │            ├─ main
    │            │    ├─ java
    │            │    │    └─ com
    │            │    │        └─ sun
    │            │    │            └─ Demo.java
    │            │    │
    │            │    └─ resources
    │            └─ test
    │                 ├─ java
    │                 │    └─ com
    │                 │        └─ sun
    │                 │            └─ DemoTest.java
    │                 │
    │                 └─ resources
    
  • 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>com.sungroupId>
      <artifactId>project-javaartifactId>
      <version>1.0version>
      <packaging>jarpackaging>
    
      <dependencies>
        <dependency>
          <groupId>junitgroupId>
          <artifactId>junitartifactId>
          <version>4.12version>
          <scope>testscope>
        dependency>
      dependencies>
      
    project>
    

    配置文件详解请移步此处:http://t.csdn.cn/jB5Pz

    感谢原文作者

  • Maven项目构建命令:

    目录创建好后,接下来开始构建项目。

    Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。

    命令 作用
    mvn compile #编译,生成target文件
    mvn clean #清理,删除target文件
    mvn test #测试,执行单元测试,其中包含了compile命令
    mvn package #打包,打包,其中包含了test命令
    mvn install #安装到本地仓库,只能是jar包,其中包含了package命令

1.手动创建Maven工程

  • 创建工程

    mvn archetype:generate
    -DgroupId={project-packaging} 
    -DartifactId={project-name} 
    -DarchetypeArtifactId=maven-archetype-quickstart
    -DinteractiveMode=false
    
  • 创建java工程

    mvn archetype:generate -DgroupId=com.sun -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
    
  • 创建web工程

    mvn archetype:generate -DgroupId=com.sun -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
    

Maven的基本使用_第7张图片

2.IDEA生成Maven工程

步骤:

  1. 新建空工程(maven-project),设置SDK
  2. settings搜索Maven,设置Maven home directory、settings.xml、maven-repo
  3. ProjetStructure ==> 新建Moudles
    • 点击Maven(Create from archetype暂未勾选)==> Next
    • GroupId和artifactId统称“坐标”,GroupId为项目组名称,通常为域名倒写,artifactId为项目唯一标识符,实际项目的名称,Version默认。
    • 项目创建完后,检查项目结构,将其补充完整。Maven项目创建完成!

Maven的基本使用_第8张图片

2.1 IDEA&Maven使用基本介绍
  • 界面右侧的Maven项目管理目录
    Maven的基本使用_第9张图片

  • 使用Maven导包(以junit为例)

    1. 打开pom.xml文件

    2. <dependencies>
              
              <dependency>
                  <groupId>junitgroupId>
                  <artifactId>junitartifactId>
                  <version>4.12version>
                  <scope>testscope>
              dependency>
      dependencies>
      
    3. 点击文件编辑框右上角的刷新按钮

      Maven的基本使用_第10张图片

  • 尝试使用Maven项目构建命令:

    1. 编写Demo和DemoTest,双击执行“Test”,可以看到生成了target

      Maven的基本使用_第11张图片

    2. 双击执行“clean”,可以看到target消失。

      Maven的基本使用_第12张图片

  • 若需要打断点调试?

    Maven的基本使用_第13张图片

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uPXR8nx-1658193459672)(E:\Picture\TyporaPictures\1122.png)]

2.2 IDEA使用骨架创建Maven工程

步骤:

  1. 新建空工程(maven-project),设置SDK
  2. settings搜索Maven,设置Maven home directory、settings.xml、maven-repo
  3. ProjetStructure ==> 新建Moudles
    • 点击Maven,勾选reate from archetype,选择org.apache.maven.archetypes:maven-archetype-quickstart ==> Next
    • GroupId和artifactId统称“坐标”,GroupId为项目组名称,通常为域名倒写,artifactId为项目唯一标识符,实际项目的名称,Version默认。
    • 检查Maven、settings.xml、本地仓库的路径,无误点击Finish。
    • 同上补全目录结构。

3.IDEA使用骨架创建web项目

  1. 新建空工程(maven-project),设置SDK

  2. settings搜索Maven,设置Maven home directory、settings.xml、maven-repo

  3. ProjetStructure ==> 新建Moudles

    • 点击Maven,勾选reate from archetype,选择org.apache.maven.archetypes:maven-archetype-webapp ==> Next

    • GroupId和artifactId统称“坐标”,GroupId为项目组名称,通常为域名倒写,artifactId为项目唯一标识符,实际项目的名称,Version默认。

    • 检查Maven、settings.xml、本地仓库的路径,无误点击Finish。

    • 补全目录结构。(web目录结构如下:)

      Maven的基本使用_第14张图片

3.1 安装tomcat插件启动web项目
  • 在pom.xml中添加:

      
      <build>
        
        <plugins>
          
          <plugin>
            
              <groupId>org.apache.tomcat.mavengroupId>
              <artifactId>tomcat7-maven-pluginartifactId>
              <version>2.2version>
              <configuration>
                
                <port>80port>
                
                <path>/path>
              configuration>
    
          plugin>
        plugins>
      build>
    
  • 刷新,点击右侧maven项目管理目录,可以看到web项目的Plugins目录下出现了tomcat插件,双击tomcat7:tun即可运行项目,进入浏览器访问控制台给出的路径即可访问到webapp目录下的文件。

4. 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>com.sungroupId>
  
  <artifactId>web01artifactId>
  
  <version>1.0-SNAPSHOTversion>
  
  <packaging>warpackaging>

  
  <dependencies>
    
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.11version>
      <scope>testscope>
    dependency>
  dependencies>

  
  <build>
    
    <plugins>
      
      <plugin>
        
          <groupId>org.apache.tomcat.mavengroupId>
          <artifactId>tomcat7-maven-pluginartifactId>
          <version>2.2version>
          <configuration>
            
            <port>80port>
            
            <path>/path>
          configuration>
      plugin>
    plugins>
  build>

project>

四.依赖管理

1.添加依赖的基本方式

  • 标签中配置,

      
      <dependencies>
        
        <dependency>
          <groupId>junitgroupId>
          <artifactId>junitartifactId>
          <version>4.11version>
          <scope>testscope>
        dependency>
        <dependency>
          <groupId>log4jgroupId>
          <artifactId>log4jartifactId>
          <version>1.2.14version>
        dependency>
      dependencies>
    

2.依赖传递

  • 依赖具有传递性
    • 直接传递:当前项目中通过依赖配置建立的依赖关系
    • 间接传递:被资源的资源如果依赖其他资源,当前项目同样依赖其他资源。
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的会覆盖先配置的。

比如:在java01的配置文件中导入以下命令:

<dependencies
    >
        <groupId>com.sungroupId>
        <artifactId>web01artifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>
dependencies>

Maven的基本使用_第15张图片

可以看到web01的pom文件里的依赖被导入进java01,而此时web01是察觉不到的。

3.可选依赖

当自己的某个依赖不想被下一级项目得到时,可以加入true标签。当后面有项目导入自己时,将不导入添加此标签的依赖。

  • 可选依赖指:主动对外隐藏当前所依赖的资源–不透明

    	<dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.12version>
            
            <optional>trueoptional>
        dependency>
    

4.排除依赖

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

        <dependencies>
            <dependency>
                <groupId>com.sungroupId>
                <artifactId>web01artifactId>
                <version>1.0-SNAPSHOTversion>
                
                <exclusions>
                    
                    <exclusion>
                        <groupId>log4jgroupId>
                        <artifactId>log4jartifactId>
                    exclusion>
                exclusions>
            dependency>
        

5.依赖范围

依赖的jar可以通过scope标签设定其范围默认情况可以在任何地方引用

  • 作用范围:

    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
    scope 主代码 测试代码 打包 范例
    compile (默认) Y Y Y log4j
    test Y junit
    provided Y Y servlet-api
    runtime Y jdbc
  • 依赖范围的传递性:

    带有依赖范围的资源在进行传递时,作用范围将会受到影响。

    Maven的基本使用_第16张图片

五.生命周期与插件

1.Maven的生命周期

Maven构建生命周期描述的是一次构建过程经历了多少个事件。

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

  1. clean:清理工作
    • pre-clean :执行一些需要在clean之前完成的工作
    • clean :移除所有上一次构建生成的文件
    • post-clean :执行一些需要在clean之后立刻完成的工作
  2. default:核心工作,如编译,测试,打包, 部署等
    • validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
    • initialize(初始化) 初始化构建状态,比如设置属性值。
    • generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
    • process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
    • generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
    • process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
    • compile(编译) 编译项目的源代码。
    • process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
    • generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
    • process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
    • generate-test-resources(生成测试资源文件) 为测试创建资源文件。
    • process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
    • test-compile(编译测试源码) 编译测试源代码到测试目标目录.
    • process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
    • test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
    • prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
    • package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
    • pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
    • integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
    • post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
    • verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
    • install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
    • deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
  3. site:产生报告,发布站点等。
    • pre-site 执行一些需要在生成站点文档之前完成的工作
    • site 生成项目的站点文档
    • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    • site-deploy 将生成的站点文档部署到特定的服务器上

2.插件

插件使用说明查看官网:https://maven.apache.org/plugins/index.html

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期是执行对应的插件功能;
  • 默认maven在各个生命周期上绑定有预设的功能;
  • 通过插件可以自定义其他功能。

示例: 使用source插件

<build> 
    <plugins> 
        <plugin> 
            <groupId>org.apache.maven.pluginsgroupId> 
            <artifactId>maven-source-pluginartifactId>
            <version>2.2.1version> 
            <executions> 
                <execution> 
                    <goals> 
                        
                        <goal>jargoal>
                        
                        <goal>test-jargoal>
                    goals>  
                    
                    <phase>generate-test-resourcesphase>
                execution>
            executions>
        plugin>
    plugins>
build>

你可能感兴趣的:(工具,java,maven)