Maven-day01

第一章 为什么要学习Maven?

  1. 添加第三方jar包

  JavaEE开发中需要使用大量的jar包,使用这些jar包需将jar包添加到WEB-INF/lib目录下,造成每次新建一项工程需要将有大量的jar包复制到工程下,让我们的工程很臃肿。而使用 Maven 后每个 jar 包本身只在本地仓库中保存一份,需要 jar 包的工程只需要以坐标的方式简单的引用一下就可以了。不仅极大的节约了存储空间,让项目更轻巧,更避免了重复文件太多而造成的混乱。


  2. jar包之间的依赖关系
  jar 包往往不是孤立存在的,很多 jar 包都需要在其他 jar 包的支持下才能够正常工作,我们称之为jar 包之间的依赖关系。当你的项目中需要用到上百个 jar 包时,你还会人为的,手工的逐一确认它们依赖的其他 jar 包吗?而引入 Maven 后, Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来,无需人工参与,节约了我们大量的时间和精力。

 

  3. 获取第三方jar包

  使用 Maven 我们可以享受到一个完全统一规范的 jar 包管理体系。 你只需要在你的项目中以坐标的方式依赖一个 jar 包, Maven 就会自动从中央仓库进行下载,并同时下载这个 jar 包所依赖的其他 jar 包。

  4. 将项目拆分成多个工程模块

  将项目拆分成多个工程协同开发。多个模块工程中有的是 Java 工程,有的是 Web 工程。那么工程拆分后又如何进行互相调用和访问呢?这就需要用到 Maven 的依赖管理机制。

 

第二章 什么是Maven

  1. Maven的概述:Maven是Apache软件基金会组织维护的一款专门为Java项目提供构建依赖管理支持的工具。

  2. Maven的作用

  (1)maven对项目的第三方构件(jar包)进行统一管理。向工程中加入jar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中。

  (2) maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署 、运行。

  (3) maven对工程分模块构建,提高开发效率。


  3. Maven仓库

  (1) 本地仓库:相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。

  (2) 中央仓库:就是远程仓库,仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:http://repo1.maven.org/maven2/

  (3) 远程仓库:在公司内部架设一台私服,其它公司架设一台仓库,对外公开。比如阿里云远程仓库地址:http://maven.aliyun.com/nexus/content/repositories/central/

 

 

 

 

 

第三章 Maven的下载和安装

  1. 下载Apache Maven(***)

    下载地址:https://archive.apache.org/dist/maven/maven-3/

    下载后直接解压即可。

  2. 配置本地仓库

  将文件夹Repository复制到Maven的解压缩路径下(建议,本地仓库可以放在任意路径下),在conf目录中对象settings.xml文件进行配置。(注意:路径不能有中文、空格、特殊字符)

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
   <!--配置本地仓库的路径,千万不要配置错误 -->
   <localRepository>D:\software\Develop\Java\apache-maven-3.5.3\repository</localRepository>

  3. 配置阿里云远程仓库

 1   <mirrors>
 2           <!--
 3             配置的是远程仓库的地址,配置的阿里云,国内的服务器
 4             没有的jar包,从远程仓库中下载
 5             没有这个配置,自动从中央仓库下载jar (国外)
 6        -->
 7         <mirror>
 8             <id>alimaven</id>
 9             <name>aliyun maven</name>
10             <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
11             <mirrorOf>central</mirrorOf>
12         </mirror>

15 <!-- mirror20 <mirror> 21 <id>mirrorId</id> 22 <mirrorOf>repositoryId</mirrorOf> 23 <name>Human Readable Name for this Mirror.</name> 24 <url>http://my.repository.com/repo/path</url> 25 </mirror> 26 --> 27 </mirrors>

第四章 IDEA创建Maven工程

1. IDEA绑定Maven软件

  注意:在idea软件外面的Configure —> setting(里面的setting配置只对当前项目有效)

 

(1)配置Maven、setting.xml、repository

  选择Maven、Maven里面的setting.xml的路径,repostory的路径会自己带出来。

  不选择则是idea默认的存放路径(${user.home}/.m2/repository)

(2)为Maven添加启动参数:-DarchetypeCatalog=local ,禁止Maven远程下载骨架

 

 

 

 (3)配置Maven自动加载依赖,idea推出2020 版本以后 ,取消了maven 原本的自动加载依赖的设置

  2020版本之前:勾选Import Maven projects automatically

  2020版本之后:修改pom.xml文件,点击图标,maven会自动加载依赖

 

2. 创建javaSE项目

 

 

 

 

 

3. pom.xml文件

  POM:Project Object Model,项目对象模型,是Maven的核心配置文件。主要配置的是项目中的信息:比如依赖的jar包,项目的编译环境,测试环境,项目的打包部署方式,其它第三方插件等等,非常重要。

 

 

 

4. 创建JavaEE项目(带骨架)

 

 

 5. 发布Web项目到Tomcat服务器

  和普通的JavaWeb项目一至,配置一下配置一下Tomcat就可

 

 

 

 1.6 创建无骨架项目

 

 

 

注意:Maven的编译环境默认的编译环境是jdk1.5,不支持注解写在重写接口的抽象方法上

 1 public class MainTest implements Runnable {
 2     public static void main(String[] args) {
 3         new HashMapDemo().hash();
 4     }
 5     //Maven的编译环境默认的编译环境是jdk1.5,不支持注解写在重写接口的抽象方法上
 6   //@Override
 7     public void run() {
 8 
 9     }
10 }

插入知识点:CurrentHashMap集合

  ConcurrentHahsMap是Map接口的实现类,是HashMap集合的变种

    线程一半安全,一半不安全

    集合操作不改变原有键值对,线程不安全

 1 package com.atguigu.map;
 2 
 3 import java.util.concurrent.ConcurrentHashMap;
 4 
 5 public class HashMapDemo {
 6     public void hash(){
 7         /*
 8             ConcurrentHahsMap是Map接口的实现类,是HashMap集合的变种
 9             线程一半安全,一半不安全
10             集合操作不改变原有键值对,线程不安全
11         * */
12         ConcurrentHashMap<String, String> hashMap = new ConcurrentHashMap<String, String>();
13         hashMap.put("a","a");
14         String a = hashMap.get("a");
15         System.out.println("a = " + a);
16     }
17 }

第五章Maven的依赖错标

1. maven编写jar包依赖

  (1)标签介绍

    dependencies:依赖,所需要用的jar包标签配置多个jar包使用

    dependency:配置单个jar包的标签
    groupId:jar包公司名,或者组织名
    artifactId:jar包的项目名
    version:jar包的版本号
    scope:jar包的作用域
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  (2)定义jar包坐标的简单方式

  记住jar包名就可以 连接池 德鲁伊 druid.jar
<!--
      导入依赖jar servlet.jar
      写该jar包的坐标,本地仓库目录的jar包的文件夹

      定义jar包坐标的简单方式
      记住jar包名就可以 连接池 德鲁伊 druid.jar
    -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.6</version>
    </dependency>

注意:新建servlet需要导入servlet依赖的jar包(javax.servlet-api)

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

2. 从远程仓库下载jar包

  需要导入的jar包,在本地仓库中并不存在,可以到Maven的中央仓库中去查询:https://mvnrepository.com/,直接搜索需要的jar包即可,选择版本好,并复制左边,Maven就会自动从远程仓库中下载jar包本地仓库。

 

3. maven依赖传递

   引入的jar包会有依赖传递问题,Maven具有依赖传递功能,当引入A.jar包,此时Maven自动会引入A.jar包所依赖的B.jar包,这就是依赖传递

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.6.RELEASE</version>
    </dependency>

 

 4. 依赖排除

  当A依赖B,B依赖C而且C可以传递到A的时候,但是A不想要C,需要在A里面把C排除掉。而往往这种情况都是为了避免jar包之间的冲突。

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.6.RELEASE</version>
      <!--配置依赖排除,不要jar包-->
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-expression</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

5. jar包依赖范围

依赖范围 编译有效  测试有效 运行有效  例子
compile   
test     junit.jar
provided   servlet.jar,jsp.jar
runtime    mysql驱动

 

<!--
        jar包的依赖范围作用域
        compile 编译时,在程序编译时有效,测试时有效,运行时有效(默认配置)
        test 测试时,只有在测试时才有效,例子junit.jar
        provoided  提供者,编译程序有效,测试程序有效,运行时期无效 例子 servlet.jar,jsp.jar
                          在运行时期,Tomcat引擎提供
        runtime 运行时,编译期无效,测试程序有效,运行程序有效 mysql驱动.jar
    -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

 

 6. Maven的插件机制

  Maven是一个核心引擎,提供了基本的项目处理能力和建设过程的管理,以及一系列的插件是用来执行实际建设任务。maven插件可以完成一些特定的功能。

  插件的完整写法:build -> plugins -> plugin

<build>
        <plugins>
            <!--tomcat服务插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

 

(1)编译插件

  集成jdk插件可以方便修改项目的编译环境

      <plugin>
               <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <!--编译插件,配置信息-->
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>

(2)tomcat插件

  无需安装tomcat服务器就可以运行tomcat进行项目的发布与测试。

<!--tomcat服务插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>

 

7. properties标签

  pom.xml中的统一版本控制标签。在一个项目中,jar包的数量会非常多,就导致了pom文件的量非常大,如果要修改某一jar包的版本不是很方便,因此可以使用properties标签进行版本的总控

<properties>
  <mysql.version>5.1.46</mysql.version>
</properties>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
</dependency>

 

8. 无骨架项目变web项目

  (1)补充知识:

    javaSE项目,打包方式jar(默认)

    javaEE项目,打包方式war

  (2)分析:

    无骨架项目 ——> javaSE项目 ——> 打包方式:jar

    web项目 ——> javaEE项目 ——> 打包方式:war

    所以只需修改无骨架项目的打包方式为:war

  (3)具体操作:

    第一步:在java文件夹的同级目录下新建一个webapp文件夹

 

 

    第二步:修改项目的打包方式,<packaging>war</packaging>

 

     第三步:选中项目,点击刷新即可

 

 

 

第六章 Maven常用的命令

1.  clean命令

  清除编译产生的target文件夹内容,可以配合相应命令一起使用,如mvn clean package, mvn clean test

2. complie命令

  该命令可以对src/main/java目录的下的代码进行编译

3.  test命令

4.  package命令

  打包后的项目会在target目录下找到,JavaSE项目的打包方式为jar,JavaEE项目的打包方式为war

5.  install命令

  mvn install,打包后将其安装在本地仓库

第七章 Maven的子父工程

  Maven中的子父工程,非常适合于团队开发,子工程的jar包含全部继承自付项目。

  项目地址:

1. 创建父项目

(1)创建父项目无骨架

  1.1 创建一个无骨架项目

  1.2 配置pom.xml文件

    1.2.1 配置父项目的打包方式为:pom

1 <!--修改父项目的打包方式pom打了一个配置文件-->
2     <packaging>pom</packaging>

    1.2.2 引入依赖

<!--引入依赖-->
    <dependencies>
        <!--junit包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--连接数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <!--druid工具包-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
        <!--DBUtils-->
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.6</version>
        </dependency>
        <!--lombook包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!--beanutils-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.2</version>
        </dependency>
    </dependencies>

 

(2)创建子项目

  2.1 创建无骨架项目的dao模块

  2.2 创建无骨架项目的service模块

  2.3 创建javaWeb项目的controller模块

(3)补充知识点

  3.1 子项目中的jar依赖近者优先原则

  子项目引入和父项目相同的依赖(版本不同,优先使用子项目优先使用自己引入的依赖版本);如下图所示,子项目中额外引入mysql5.1.46版本,不适用父项目mysql5.1.49的版本。

 

 

 

  3.2 jar包的依赖管理器标签

  依赖管理标签,父项目使用该标签的目的是对子项目中使用的jar进行版本控制;定义在管理器中的jar包标签,子项目不能继承,子项目能引入该标签的依赖无需指定版本号

 

  父项目

<properties>
        <mybatis.version>3.5.3</mybatis.version>
    </properties>

    <!--
        依赖管理器 dependencyManagement
        定义jar的依赖坐标
        定义在管理器中的jar包错标,子项目不能继承
        配合标签properties
        作用:
            对子项目的jar包进行版本控制的
            子项目可以使用maybatis.jar,无需指定版本号

    -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

  子项目

    <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>

 

(4)分模块架构功能

  4.1 编写dao模块

    4.1.1 导入druid.properties、JDBCUtils文件

    4.1.2 编写Soldier实体类

    4.1.3 编写dao层,SoldierDao接口、SoldierDaoImpl实现类

  

 

 

  4.2 编写service模块

    4.2.1 编写SoldierService接口、SoldierServerImpl实现类

    注意:pom.xml文件需要引入dao层依赖

 

 

 

   4.3 编写controller模块

    4.3.1 编写SoldierServlet、

    4.3.2 导入dao层、service层依赖,配置tomcat插件(注意servlet依赖范围以tomcat冲突)

 

@WebServlet(urlPatterns = "/soldier")
public class SoldierServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        Soldier soldier = new Soldier();
        Map<String, String[]> map = request.getParameterMap();
        try {
            BeanUtils.populate(soldier,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        SoldierService service = new SoldierServerImpl();
        service.insertSoldier(soldier);
        response.getWriter().write("添加成功");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

 

(5)项目聚合

  直接对父项目install。

 

 

 

  

 

原文地址:https://www.cnblogs.com/pdjdghrs/p/15468997.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇文章和大家了解一下怎么搭建maven私有仓库。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。在本篇文章中,我们将介绍如何搭建一个Maven...
今天小编给大家分享的是如何解决Maven依赖冲突,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。目...
这篇文章主要介绍了Maven仓库分类的优先级是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Maven仓库分类的优先级是什么文...
本篇内容主要讲解“Maven怎么实现自己的starter依赖”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Maven怎
本篇内容主要讲解“maven不能下载oraclejdbc驱动的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大...
这篇文章主要介绍了怎么使用maven基本命令打包包名的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用maven基本命令打包包...
本篇内容介绍了“maven中profile如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
本文小编为大家详细介绍“Maven打包没有指定主类问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Maven打包没有指定主类问题怎么解决”文章能帮助...
这篇文章主要介绍“maven怎么打包动态环境变量”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“maven怎么打包动态环...
今天小编给大家分享一下Maven离线模式打包的步骤是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
本文小编为大家详细介绍“maven打包时候修改包名称带上git版本号和打包时间的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“maven打包时候修改包...
这篇文章主要讲解了“maven打包怎么指定jdk的版本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“maven打...
这篇“Maven打包时怎么指定启动类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读
这篇文章主要讲解了“怎么使用jenkins配置maven和JDK”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎
这篇文章主要介绍了maven中配置项目的jdk版本无效怎么排查的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇maven中配置项目的jdk...
今天小编给大家分享一下Maven提示jdk版本不正确怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
本篇内容主要讲解“maven优缺点及使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“maven优缺点
这篇文章主要介绍“maven项目引入maven库没有jar怎么处理”,在日常操作中,相信很多人在maven项目引入maven库没有jar怎么处理问题上存在疑惑,小编查阅了各式资...
本篇内容主要讲解“怎么下载远程maven仓库的jar并手动放到本地仓库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学...
这篇文章主要介绍“maven私服搭建与使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“maven私服搭建...