5/14day54_maven基础&环境搭建

2020-05-15  本文已影响0人  蹦蹦跶跶的起床啊

课程安排

1. maven基础&环境搭建

2. 用户注册&阿里云短信服务

3. 用户模块&SVN

4. 个人信息&收货地址&面向接口编程&导航条

5. redis&优化导航和短信服务

6. 线路模块&百度分页栏(前五后四)

7. 购物车&订单

8. 微信支付&日志记录(动态代理...)

9. linux基础

10. nginx&项目部署
Maven基础.png

Maven基础&环境搭建

今日目标

1. 项目管理工具:Maven
        依赖管理
        项目构建
        
2. 搭建黑马旅游网项目环境

一 Maven简介

1.1 Maven是什么?

​ Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。

一个对 Maven 比较正式的定义是这么说的:

​ Maven 是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的工具。

1.2 Maven能解决什么问题

​ 可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做,下面列举几个感受一下:

  1. 我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的jar包冲突,版本冲突。
  2. 我们写好的java文件,需要通过javac编译成class文件才能交给JVM运行。这项工作可以由各种集成开发工具帮我们完成 Eclipse、IDEA 等都可以将代码即时编译。
  3. 世界上没有不存在 bug 的代码,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
  4. 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,进行打包。如果是 web 项目,还需要将之发布到服务器 。

​ 试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会心动吗? Maven 就可以解决上面所提到的这些问题。

1.3 Maven的两个核心功能【重点】

1.3.1 依赖管理

* 传统的 WEB 工程中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。 

* maven的 WEB 工程中不直接将jar包导入到工程中,而是通过在 pom.xml 文件中添加所需jar包的坐标。项目运行时,通过读取坐标到一个专门用于“存放jar包仓库"(Maven仓库)找到相应的jar包。
1589419861712.png

仓库如何存放jar包?

1589420038043.png

1.3.2 项目构建

* 我们开发的项目,往往都要经历编译、测试、打包、安装,部署等一系列过程。 

* 什么是构建项目
       指的是项目从编译、测试、打包、安装,部署整个过程都交给maven进行管理,这个过程称为构建。  
       
* 一键构建
       指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。 

二 Maven安装和使用

2.1 Maven下载和安装

* 下载
        Maven官网下载地址 :http://maven.apache.org/download.cgi
* 安装
        Maven使用java语言开发的,解压即可运行
        注意:maven依赖 JAVA_HOME
* 目录
        bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat7:run
        boot:存放了一些 maven 本身的引导程序,如类加载器等
        conf:存放了 maven 的一些配置文件,如 setting.xml 文件
        lib:存放了 maven 本身运行所需的一些 jar 包
        
* 环境变量
        MAVEN_HOME: maven安装目录
        path: %MAVEN_HOME%\bin
        
* 配置完毕了
        mvn --version
1589420861090.png 1589421046212.png

2.3 Maven仓库【重点】

2.3.1 Maven仓库的分类

1. 本地仓库 
        项目通过jar坐标,先从本地仓库找对应jar包,如果找不到会从远程仓库(互联网)去下载 jar 包,保存在本地仓库(在程序员的电脑   上),第二次不需要从远程仓库去下载。
        
2. 远程仓库
    2.1 中央仓库
        由专业团队(maven团队)统一维护。
        中央仓库的地址:http://repo1.maven.org/maven2/
    2.2 私服
        架设在公司局域网内,提供给内部的人员使用。
    2.3 第三方仓库
        中央仓库只有一个国内使用非常慢,我们可以更换为:阿里云镜像
1589421912549.png

2.3.2 Maven本地仓库的配置

1. 将今天资料中的 repository.zip 解压到非中文及特殊符号目录下

2. 修改 maven的安装目录/conf/settings.xml 文件的标签
        <localRepository>本地仓库地址</localRepository>
1589421986401.png

指定自定义本地仓库

1589422129452.png

2.3.4 Maven仓库国内镜像配置

修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>
1589422242672.png

2.3 Maven坐标和依赖

1589423449483.png 1589423407435.png

2.4 Maven工程的结构【重点】

传统的java工程遇到的问题

1589423995726.png
* java项目
    java工程名(项目名)
        |-- src目录
            |-- main目录(主干代码)
                |-- java目录(java代码)
                |-- resources目录(配置文件)
            |-- test目录(测试代码)
                |-- java目录(java代码)
                |-- resources目录(配置文件)
        |-- pom.xml(maven工程核心配置文件)
        |-- target目录(存放编译后的class文件.....)

* web项目【重点】
    web工程名(项目名)
        |-- src目录
            |-- main目录(主干代码)
                |-- java目录(java代码)
                |-- resources目录(配置文件)
                |-- webapp目录(页面资源)
                    |-- WEB-INF
                        |-- web.xml(web工程核心配置文件)
                    |-- index.jsp
                    |-- css、js、img..
            |-- test目录(测试代码)
                |-- java目录(java代码)
                |-- resources目录(配置文件)
        |-- pom.xml(maven工程核心配置文件)
        |-- target目录(存放编译后的class文件.....)

三 Maven生命周期和插件【了解】

3.1 Maven常用命令和插件

我们可以在 cmd 中通过一系列的 maven 命令,来对我们的工程进行编译、测试、打包、安装、部署。

1)clean

​ maven工程的清理命令,执行clean会删除target目录及内容。

1589424568081.png

2)compile

​ maven工程的编译命令,作用是将 src/main/java 下的文件编译为class文件输出到target目录下。

1589424863062.png

3)test

​ maven工程的测试命令,作用是执行 src/test/java 下单元测试类,并编译为class文件。

1589425127476.png 1589425282662.png

4)package

​ maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。

1589425455272.png

注意:为什么maven_hello是war包而不是jar包呢?

1589425545057.png

5)install

​ maven工程的安装命令,执行install将mave工程打成jar包或war包,并发布到本地仓库。

1589425703711.png 1589425755803.png

6)deploy

​ maven工程部署命令,将jar或war包部署(上传)到私服中。

mavne的高级课程介绍这个命令....

3.2 生命周期

maven 对项目构建过程分为“三套相互独立的”生命周期,这三套生命周期分别是:

1. Clean Lifecycle(清理生命周期)
        在进行真正的构建之前进行一些清理工作。
        命令:clean
        
2. Default Lifecycle(默认生命周期)
        构建的核心部分,编译,测试,打包,部署等等。
        命令: compile  test  package  install  deploy
        
3. Site Lifecycle(站点生命周期)
        生成项目报告,站点,发布站点。 
        命令: site
        
* 在同一个生命周期中的命令,执行后面的命令,前面的命令自动执行
1589427011402.png

3.3 Maven概念模型【了解】

1589427711479.png

四 IDEA创建Maven工程【重点】

4.1 IDEA配置本地Maven环境(全局...)

1589428149213.png

​ 我们在IDEA创建maven工程默认从互联网在下载一个骨架(但是我们电脑没有联网,就会卡顿一段时间,再使用本地骨架),我们可以直接指定IDEA查找本地骨架,效率提升

-DarchetypeCatalog=internal -Dfile.encoding=GB2312
1589428265584.png

兄弟们,我们只有所有的工作空间(project),可以删掉了。。

我们需要创建一个全新的工作空间(基于maven结构)

1589428542775.png 1589428609664.png 1589428685717.png

4.2 IDEA创建工程

① java工程

1589436382215.png 1589436438917.png 1589436484920.png

手动创建test测试配置文件目录

1589436714345.png

指定maven环境的jdk版本和字符集

<build>
    <plugins>
        <!-- 设置编译版本为1.8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>
1589436856500.png

maven工程命令操作

1589436984226.png

如何导入依赖

maven的搜索仓库:https://mvnrepository.com/

1589437486925.png

② web工程【重点】

1589437604285.png

idea创建web工程,需要我们安装一个插件

1589437702275.png

安装成功后,重启idea工具

1589437810101.png 1589437862722.png

③ 注意

​ 个别同学电脑,创建完maven之后,文件夹不会变颜色

1589437975234.png

4.3 发布web工程

① idea使用外置tomcat运行【重点】

(跟之前的方式一样)

1589438227175.png

② idea使用maven内置tomcat插件【了解】

<build>
        <plugins>
            <!-- 设置编译版本为1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
1589438440905.png

双击启动

1589438496115.png

命令启动

1589438593281.png

4.4 依赖管理

我们不考虑依赖范围引起的问题

1589439310790.png
依赖范围 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效 例子
compile(默认) Y Y Y mybatis
test - Y - junit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动
system Y Y - 本地,maven仓库之外的库
* compile
        默认依赖范围,作用域在编译、测试、运行时都有效。
        
* test
        作用域在测试时有效。编译和运行时不需要,比如:Junit。
        
** provided
        作用域在编译、测试时有效。运行时不需要,比如: servlet api 被 tomcat 容器提供。 
        
* runtime
        作用域在测试、运行时有效。编译时不需要,比如:jdbc的驱动包。 
        
* system
        system范围依赖与provided类似,jar包在本地磁盘而不是maven仓库
1589441279322.png

五 黑马旅游网【大作业....】

5.1 项目介绍

为了巩固web基础知识,提升综合运用能力,故而讲解此案例。要求,每位同学能够独立完成此案例。

不能复制老师的代码,根据画图和分析,去写

5.2 技术选型

1589441948402.png

5.3 数据库设计【课下作业,设置为桌面背景....】

1589442344693.png 1589442976959.png

5.4 工程搭建

项目所需要的素材,帅哥已经提供了好了

1589442431554.png

通过maven构建web工程,初始化黑马旅游网环境

构建步骤,参考 PDF文档...

建议大家跟老师构建命名一样

1589442704992.png

强调 pom.xml 企业开发没人手敲,都是复制...

1589442924844.png

pdf文档少了一步过滤器

1589443282547.png

完整工程结构

1589443334327.png

5.5 lombok

我们开发时如果使用lombok简化实体类创建

① 引入坐标

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
</dependency>

② 下lombok插件 【要求大家都用....】

1589443623782.png 1589443690403.png

重启idea工具,生效

1589443829242.png

5.6 部署测试

1589444015752.png

老师晚上总结

今日重点

导入普通javaweb模块

1589456152708.png 1589456318799.png 1589456353399.png 1589456476049.png

maven的仓库配置(setttings.xml文件中配置的)

  1. 配置本地仓库
1589457591825.png
  1. 配置阿里的远程仓库(如果本地仓库找不到,就会去找阿里)
1589457654989.png

idea的maven的配置是否配置好了

1589457489362.png

maven的目录结构清晰

1589457836066.png

创建Maven的web项目

导入maven模块

1589458535371.png 1589458600628.png

==无脑下一步一下步即可==

学习反馈

反馈 回复
拓展可以给一些吗
忘了怎么从外部把项目导入到idea中 讲解

疑惑点

反馈 回复
maven是不是分为本地仓库和远程仓库,是不是一次下载终身使用? 是的,等会会介绍
老师我有个题外话,想问下有什么网站可以刷SQL语句的题,感觉自己这方面还是不太行 百度上直接搜索mysql练习题,很多
可以指定两个仓库么? 我的maven指定老师的仓库和我的仓库 不行
那我是不可以在idea在配置一个版本的maven 然后指定老师的仓库 老师的仓库不是下发给大家了吗。你安装在你的本地就是你的仓库了
那我以前的仓库直接替换就好了? 可以,把帅哥的仓库内容覆盖你原来的仓库.
在src目录下,存放的java代码和配置文件,配置文件一改变为什么会重新编译?为什么创建一个resources目录放配置文件就解耦,不重新编译了? 只有java类会重新编译。 分成java包和resources包是为了方便管理。
打包 什么时候大jar包 什么时候打web包 如果是java项目会打成jar , web项目打成war包。
maven坐标依赖需要手动设置吗 后期都是复制粘贴,今天可以写写.熟悉结构.
maven工程创建之后右下角提示Maven project need to be imported,两个选项: 1.import Changes 2. Enable Auto-Import, 这两个选项点了有啥后果... 第一个需要每次改变后都点击,导入改变后的内容。 第二个是自动加载。
老师创建Java工程(非web工程)一直都在下载,Archetype repository not defined. 出现这种题是信息 这是因为使用骨架(模板)创建项目.但是骨架没有下载到.因此一直在下载.
我要等等还是? 网路可以的话,等等是能够下载成功的.或者你停掉下载.创建maven项目的时候不适用骨架.
Maven projects那里的Plugins报红怎么回事 项目那里还多了一个.idea文件夹 报红是因为坐标对应的jar包下载失败.项目那里还多了一个.idea文件夹跟maven没关系..idea是项目的记录文件.是唯一的.建议重新建立maven项目.
以前用servlet的时候没有导jar包吧?老师,这里为啥还要用坐标才能用servlet呢? 以前我们用的tomcat中的servlet.jar包现在项目没有tomcat环境依赖了.只能自己导入.
以后都需要自己添加依赖吗? 是的,只不过后期我们添加依赖都是CV比较多,不需要自己手写。
测试期的意思就是运行test里面的代码吗 是的
咱们用maven,添加了3.1版本jar包,使用的还是内置的tomcat运行,为什么用到了外置的tomcat8内置的jar包。还冲突了 写代码的时候不会冲突.web项目比较特殊.将来是要在web容器中运行的.tomcat就是web容器.容器中也有一样的jar包就会冲突.因此我们有些jar包范围在编译阶段有就可以了.运行时期无效.比如:servlet.jar
刚才讲的范围,导入servletjar包时如果用默认范围,使用外置或者内置tomcat都会出现问题吗? tomcat8已经解决了这个版本冲突的问题了,所以使用内置的tomcat不会报错的,但是我们规范还是写上这个依赖范围
使用外置tomcat版本号用3.1,就算指定范围也不会出错吧! tomcat8已经解决了这个版本冲突的问题了,所以使用内置的tomcat不会报错的,但是我们规范还是写上这个依赖范围
全局配置那里 设置完 保存应用 关闭在打开 就又恢复了怎么回事 全局的配置对新建的项目才起作用,你可以新建一个项目试试
如果外置或者内置的的tomcat 的servlet包和maven导入的servlet包的版本一样,就不会报错了吧? 版本不一样也不行.Servlet接口名称是一样的.jar包冲突其实是jar包中有相同的类.
什么叫做技术栈呢 技术栈一般来说是指将N种技术互相组合在一起
上一篇下一篇

猜你喜欢

热点阅读