5/14day54_maven基础&环境搭建

课程安排

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坐标和依赖

  • 想要只用哪个jar包,通过坐标方式进行依赖引入...
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
  • 导入普通的web项目需要添加tomcat的依赖,tomcat里面有servlet的jar.
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模块

  • 把maven模块拷贝当前的工程中
  • 导入模块


    1589458456523.png
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种技术互相组合在一起
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269