Maven

 

  • 问题描述

    • 我们项目中用的jar包,需要先下载再导入 再依赖

    • jar包之间的依赖关系 程序员需要明确 否则报错 比如 jar包A 依赖于jar包B 只导入jar包A 程序报错

    • 我们的项目都在一个大的工程中 所有的代码都写在了一个工程中 这样功能做不到抽取 更做不到分模块开发

    • 在实际开发中 手动导入jar包 可能存在jar包之间的版本兼容问题 特别是依赖包

1. 什么是Maven

Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。Maven正是为了将开发人员从这些任务中解脱出来而诞生的。

  总结: Maven是一个采用纯Java编写的开源项目管理工具

2. 为什么使用Maven

  • 解决导入jar包的问题 版本冲突等问题

  • 解决项目构建问题

3. Maven的作用

  • 依赖管理

  • 一键构建

3.1. 依赖管理

依赖管理 分为依赖和管理

依赖: 就是我们导入jar

管理:一般是jar包的版本管理

  • 直接依赖

  • 间接依赖

3.2. 一键构建

一键构建 表示项目从开发到部署 都是通过maven命令完成 依赖声明周期

4. Maven的生命周期

一个项目从编写代码开始->[清理clean]编译->测试->运行->打包->部署的过程

  • 编码时期:程序员写代码

  • 编译: 代码编写完成之后 想变成class文件

    命令是:compile

  • 测试: 上线之前 想进行功能测试

  • 运行: 项目运行 没啥说的

    命令是 run

  • 打包: java项目打成 jar web项目打成war

    命令是:package

  • 安装: 把java的包安装到本地仓库

    命令是 install

  • 部署: 上线到生产环境

    deploy

  • 清理: 清除已经编译好的class文件

    命令:clean

5. Maven的下载

 

 

 

注意点:下载下来之后 是个压缩包 解压时 路径不要有中文

6. maven工程的包的介绍

  • bin : 命令文件夹

  • boot : 启动器 (引导程序)

  • conf : maven配置文件

  • lib: maven需要的jar包

7. 仓库介绍

7.1. 仓库的分类

  • 本地仓库

    本地仓库 表示本地硬盘上的某一个位置 这个位置用来存放 从中央仓库 或者 远程仓库 拉去下来的jar

  • 远程仓库

    是指互联网上的仓库 一般都是局域网(私服)

  • 中央仓库

    中央仓库 就是最核心 最大的 jar包最全的 服务于全球的一个仓库 有专门的团队在维护

7.2 jar的查找过程

1-> jar包 先从本地仓库找 如果本地仓库有 则不再往下找

2-> jar包 如果本地仓库没有 则从远程仓库找 如果有 则不会再往下找

3-> jar包 如果远程仓库没有 则会从中心仓库找 (百分之99的都能找到 )

7.3 本地仓库的配置

8. maven的使用

8.1 指令的使用

需要把 maven包下的bin目录 配置到环境变量中 使用mvc:指令使用

这种方式已经过时 了解即可

8.2 和Idea集成

配置全局Maven设置(不要设置当前工程的Maven)

9. idea创建Maven工程

9.1. 创建普通java工程

目录结构

9.2. 创建web工程

9.2.1. 使用骨架的形式

9.2.2. java工程改造成web工程

 

 

 

 

 

 

9.3. 工程目录介绍

  • 大概介绍

     

     

  • POM文件

    • 大概介绍

    • 坐标信息

    • 环境变量的配置

    • 坐标依赖

       

       

    • 插件信息

       

       

       

10. maven工程的运行方式

10.1. tomcat的方式

和web工程一样

10.2. maven-tomcat插件的方式

  • pom文件添加如下内容

      <!--在pom文件中 添加comcat7插件 --><plugin>
                      <groupId>org.apache.tomcat.maven</groupId>
                      <artifactId>tomcat7-maven-plugin</artifactId>
                      <version>2.2</version><configuration>
                          <!-- 项目访问路径 本例:localhost:9090, 如果配置的aa,则访问路径为localhost:9090/aa -->
                          <path>/</path>
                          <port>9090</port>
                          <uriEncoding>UTF-8</uriEncoding><!-- 非必需项 -->
                      </configuration>
                  </plugin>
  • 插件启动方式一

  • 插件启动方式二

     

     

     

10.3. maven-jetty插件的方式

  • 在pom文件中添加jetty插件

            <plugin>
              <groupId>org.eclipse.jetty</groupId>
              <artifactId>jetty-maven-plugin</artifactId>
              <version>9.3.0.M2</version>
              <configuration>
                <webAppConfig>
                  <!--配置根路径-->
                  <contextPath>/</contextPath>
                </webAppConfig>
                <httpConnector>
                  <!--配置端口-->
                  <port>10000</port>
                </httpConnector>
              </configuration>
            </plugin>
  • 运行方式同上

11. maven的JDK版本问题

  • 问题描述

     

     

11.1. 解决方式一

  • 在pom.xml中配置

        <properties>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
              <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
              <java.version>1.8</java.version>
              <maven.compiler.source>1.8</maven.compiler.source>
              <maven.compiler.target>1.8</maven.compiler.target>
          </properties>

     

  • 刷新

11.2. 解决方式二

  • 在pom.xml添加如下信息

       <build>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-compiler-plugin</artifactId>
                      <configuration>
                          <source>1.8</source>
                          <target>1.8</target>
                          <encoding>UTF-8</encoding>
                      </configuration>
                  </plugin>
              </plugins>
          </build>

     

  • 刷新

11.3. 解决方式三

  • 在maven配置文件setting中profiles标签内添加如下信息

  <profile>
          <id>jdk1.8</id>
          <activation>
              <activeByDefault>true</activeByDefault>
                  <jdk>1.8</jdk>
              </activation>
          <properties>
              <maven.compiler.source>1.8</maven.compiler.source>
              <maven.compiler.target>1.8</maven.compiler.target>
              <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
              <maven.compiler.encoding>utf-8</maven.compiler.encoding>
          </properties>
      </profile>

 

12. 坐标的作用范围

  • compile

    默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去。

  • test

    该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。

  • runtime

    依赖仅参与运行周期中的使用,编译不参与。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。 此类的驱动都是为runtime的类库。

  • provided

    该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。

 

posted @ 2021-06-13 22:26  mini9264  阅读(42)  评论(0编辑  收藏  举报