課程安排
1. maven基礎(chǔ)&環(huán)境搭建
2. 用戶注冊&阿里云短信服務(wù)
3. 用戶模塊&SVN
4. 個人信息&收貨地址&面向接口編程&導(dǎo)航條
5. redis&優(yōu)化導(dǎo)航和短信服務(wù)
6. 線路模塊&百度分頁欄(前五后四)
7. 購物車&訂單
8. 微信支付&日志記錄(動態(tài)代理...)
9. linux基礎(chǔ)
10. nginx&項(xiàng)目部署
Maven基礎(chǔ)&環(huán)境搭建
今日目標(biāo)
1. 項(xiàng)目管理工具:Maven
依賴管理
項(xiàng)目構(gòu)建
2. 搭建黑馬旅游網(wǎng)項(xiàng)目環(huán)境
一 Maven簡介
1.1 Maven是什么爵憎?
? Maven 翻譯為"專家"支竹、"內(nèi)行",是 Apache 下的一個純 Java 開發(fā)的開源項(xiàng)目赛糟。
一個對 Maven 比較正式的定義是這么說的:
? Maven 是一個項(xiàng)目管理工具,它包含了一個項(xiàng)目對象模型晒他,一組標(biāo)準(zhǔn)集合,一個項(xiàng)目生命周期逸贾,一個依賴管理系統(tǒng)陨仅,和用來運(yùn)行定義在生命周期階段中插件目標(biāo)的工具。
1.2 Maven能解決什么問題
? 可以用更通俗的方式來說明耕陷。我們知道掂名,項(xiàng)目開發(fā)不僅僅是寫寫代碼而已,期間會伴隨著各種必不可少的事情要做哟沫,下面列舉幾個感受一下:
- 我們需要引用各種jar包饺蔑,尤其是比較大的工程,引用的jar包往往有幾十個乃至上百個嗜诀,每用到一種jar包猾警,都需要手動引入工程目錄,而且經(jīng)常遇到各種讓人抓狂的jar包沖突隆敢,版本沖突发皿。
- 我們寫好的java文件,需要通過javac編譯成class文件才能交給JVM運(yùn)行拂蝎。這項(xiàng)工作可以由各種集成開發(fā)工具幫我們完成 Eclipse穴墅、IDEA 等都可以將代碼即時編譯。
- 世界上沒有不存在 bug 的代碼,因此寫完了代碼玄货,我們還要寫一些單元測試皇钞,然后一個個的運(yùn)行來檢驗(yàn)代碼質(zhì)量。
- 再優(yōu)雅的代碼也是要出來賣的松捉。我們后面還需要把代碼與各種配置文件夹界、資源整合到一起,進(jìn)行打包隘世。如果是 web 項(xiàng)目可柿,還需要將之發(fā)布到服務(wù)器 。
? 試想丙者,如果現(xiàn)在有一種工具复斥,可以把你從上面的繁瑣工作中解放出來,能幫你構(gòu)建工程蔓钟,管理 jar包永票,編譯代碼,還能幫你自動運(yùn)行單元測試滥沫,打包,生成報表键俱,甚至能幫你部署項(xiàng)目兰绣,生成 Web 站點(diǎn),你會心動嗎编振? Maven 就可以解決上面所提到的這些問題缀辩。
1.3 Maven的兩個核心功能【重點(diǎn)】
1.3.1 依賴管理
* 傳統(tǒng)的 WEB 工程中,我們必須將工程所依賴的 jar 包復(fù)制到工程中踪央,導(dǎo)致了工程的變得很大臀玄。
* maven的 WEB 工程中不直接將jar包導(dǎo)入到工程中,而是通過在 pom.xml 文件中添加所需jar包的坐標(biāo)畅蹂。項(xiàng)目運(yùn)行時健无,通過讀取坐標(biāo)到一個專門用于“存放jar包倉庫"(Maven倉庫)找到相應(yīng)的jar包。
倉庫如何存放jar包液斜?
1.3.2 項(xiàng)目構(gòu)建
* 我們開發(fā)的項(xiàng)目累贤,往往都要經(jīng)歷編譯、測試少漆、打包臼膏、安裝,部署等一系列過程示损。
* 什么是構(gòu)建項(xiàng)目
指的是項(xiàng)目從編譯渗磅、測試、打包、安裝始鱼,部署整個過程都交給maven進(jìn)行管理仔掸,這個過程稱為構(gòu)建。
* 一鍵構(gòu)建
指的是整個構(gòu)建過程风响,使用 maven 一個命令可以輕松完成整個工作嘉汰。
二 Maven安裝和使用
2.1 Maven下載和安裝
* 下載
Maven官網(wǎng)下載地址 :http://maven.apache.org/download.cgi
* 安裝
Maven使用java語言開發(fā)的,解壓即可運(yùn)行
注意:maven依賴 JAVA_HOME
* 目錄
bin:存放了 maven 的命令状勤,比如我們前面用到的 mvn tomcat7:run
boot:存放了一些 maven 本身的引導(dǎo)程序鞋怀,如類加載器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身運(yùn)行所需的一些 jar 包
* 環(huán)境變量
MAVEN_HOME: maven安裝目錄
path: %MAVEN_HOME%\bin
* 配置完畢了
mvn --version
2.3 Maven倉庫【重點(diǎn)】
2.3.1 Maven倉庫的分類
1. 本地倉庫
項(xiàng)目通過jar坐標(biāo)持搜,先從本地倉庫找對應(yīng)jar包密似,如果找不到會從遠(yuǎn)程倉庫(互聯(lián)網(wǎng))去下載 jar 包,保存在本地倉庫(在程序員的電腦 上)葫盼,第二次不需要從遠(yuǎn)程倉庫去下載残腌。
2. 遠(yuǎn)程倉庫
2.1 中央倉庫
由專業(yè)團(tuán)隊(duì)(maven團(tuán)隊(duì))統(tǒng)一維護(hù)。
中央倉庫的地址:http://repo1.maven.org/maven2/
2.2 私服
架設(shè)在公司局域網(wǎng)內(nèi)贫导,提供給內(nèi)部的人員使用抛猫。
2.3 第三方倉庫
中央倉庫只有一個國內(nèi)使用非常慢,我們可以更換為:阿里云鏡像
2.3.2 Maven本地倉庫的配置
1. 將今天資料中的 repository.zip 解壓到非中文及特殊符號目錄下
2. 修改 maven的安裝目錄/conf/settings.xml 文件的標(biāo)簽
<localRepository>本地倉庫地址</localRepository>
指定自定義本地倉庫
2.3.4 Maven倉庫國內(nèi)鏡像配置
修改 maven 根目錄下的 conf 文件夾中的 setting.xml 文件孩灯,在 mirrors 節(jié)點(diǎn)上闺金,添加內(nèi)容如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
2.3 Maven坐標(biāo)和依賴
- 想要只用哪個jar包,通過坐標(biāo)方式進(jìn)行依賴引入...
2.4 Maven工程的結(jié)構(gòu)【重點(diǎn)】
傳統(tǒng)的java工程遇到的問題
* java項(xiàng)目
java工程名(項(xiàng)目名)
|-- src目錄
|-- main目錄(主干代碼)
|-- java目錄(java代碼)
|-- resources目錄(配置文件)
|-- test目錄(測試代碼)
|-- java目錄(java代碼)
|-- resources目錄(配置文件)
|-- pom.xml(maven工程核心配置文件)
|-- target目錄(存放編譯后的class文件.....)
* web項(xiàng)目【重點(diǎn)】
web工程名(項(xiàng)目名)
|-- 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 命令,來對我們的工程進(jìn)行編譯讥巡、測試掀亩、打包、安裝欢顷、部署槽棍。
1)clean
? maven工程的清理命令,執(zhí)行clean會刪除target目錄及內(nèi)容吱涉。
2)compile
? maven工程的編譯命令刹泄,作用是將 src/main/java 下的文件編譯為class文件輸出到target目錄下。
3)test
? maven工程的測試命令怎爵,作用是執(zhí)行 src/test/java 下單元測試類特石,并編譯為class文件。
4)package
? maven工程的打包命令鳖链,對于java工程執(zhí)行package打成jar包姆蘸,對于web工程打成war包墩莫。
注意:為什么maven_hello是war包而不是jar包呢非驮?
5)install
? maven工程的安裝命令伺通,執(zhí)行install將mave工程打成jar包或war包,并發(fā)布到本地倉庫治专。
6)deploy
? maven工程部署命令推捐,將jar或war包部署(上傳)到私服中裂问。
mavne的高級課程介紹這個命令....
3.2 生命周期
maven 對項(xiàng)目構(gòu)建過程分為“三套相互獨(dú)立的”生命周期,這三套生命周期分別是:
1. Clean Lifecycle(清理生命周期)
在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作牛柒。
命令:clean
2. Default Lifecycle(默認(rèn)生命周期)
構(gòu)建的核心部分堪簿,編譯,測試皮壁,打包椭更,部署等等。
命令: compile test package install deploy
3. Site Lifecycle(站點(diǎn)生命周期)
生成項(xiàng)目報告蛾魄,站點(diǎn)虑瀑,發(fā)布站點(diǎn)。
命令: site
* 在同一個生命周期中的命令,執(zhí)行后面的命令,前面的命令自動執(zhí)行
3.3 Maven概念模型【了解】
四 IDEA創(chuàng)建Maven工程【重點(diǎn)】
4.1 IDEA配置本地Maven環(huán)境(全局...)
? 我們在IDEA創(chuàng)建maven工程默認(rèn)從互聯(lián)網(wǎng)在下載一個骨架(但是我們電腦沒有聯(lián)網(wǎng)滴须,就會卡頓一段時間舌狗,再使用本地骨架),我們可以直接指定IDEA查找本地骨架扔水,效率提升
-DarchetypeCatalog=internal -Dfile.encoding=GB2312
兄弟們把夸,我們只有所有的工作空間(project),可以刪掉了铭污。。
我們需要創(chuàng)建一個全新的工作空間(基于maven結(jié)構(gòu))
4.2 IDEA創(chuàng)建工程
① java工程
手動創(chuàng)建test測試配置文件目錄
指定maven環(huán)境的jdk版本和字符集
<build>
<plugins>
<!-- 設(shè)置編譯版本為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>
maven工程命令操作
如何導(dǎo)入依賴
maven的搜索倉庫:https://mvnrepository.com/
② web工程【重點(diǎn)】
idea創(chuàng)建web工程膀篮,需要我們安裝一個插件
安裝成功后嘹狞,重啟idea工具
③ 注意
? 個別同學(xué)電腦,創(chuàng)建完maven之后誓竿,文件夾不會變顏色
4.3 發(fā)布web工程
① idea使用外置tomcat運(yùn)行【重點(diǎn)】
(跟之前的方式一樣)
② idea使用maven內(nèi)置tomcat插件【了解】
<build>
<plugins>
<!-- 設(shè)置編譯版本為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>
雙擊啟動
命令啟動
4.4 依賴管理
我們不考慮依賴范圍引起的問題
依賴范圍 | 對于編譯classpath有效 | 對于測試classpath有效 | 對于運(yùn)行時classpath有效 | 例子 |
---|---|---|---|---|
compile(默認(rèn)) | Y | Y | Y | mybatis |
test | - | Y | - | junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驅(qū)動 |
system | Y | Y | - | 本地磅网,maven倉庫之外的庫 |
* compile
默認(rèn)依賴范圍,作用域在編譯筷屡、測試涧偷、運(yùn)行時都有效。
* test
作用域在測試時有效毙死。編譯和運(yùn)行時不需要燎潮,比如:Junit。
** provided
作用域在編譯扼倘、測試時有效确封。運(yùn)行時不需要,比如: servlet api 被 tomcat 容器提供。
* runtime
作用域在測試爪喘、運(yùn)行時有效颜曾。編譯時不需要,比如:jdbc的驅(qū)動包秉剑。
* system
system范圍依賴與provided類似泛豪,jar包在本地磁盤而不是maven倉庫
五 黑馬旅游網(wǎng)【大作業(yè)....】
5.1 項(xiàng)目介紹
為了鞏固web基礎(chǔ)知識,提升綜合運(yùn)用能力侦鹏,故而講解此案例诡曙。要求,每位同學(xué)能夠獨(dú)立完成此案例种柑。
不能復(fù)制老師的代碼岗仑,根據(jù)畫圖和分析,去寫
5.2 技術(shù)選型
5.3 數(shù)據(jù)庫設(shè)計(jì)【課下作業(yè)聚请,設(shè)置為桌面背景....】
5.4 工程搭建
項(xiàng)目所需要的素材荠雕,帥哥已經(jīng)提供了好了
通過maven構(gòu)建web工程,初始化黑馬旅游網(wǎng)環(huán)境
構(gòu)建步驟驶赏,參考 PDF文檔...
建議大家跟老師構(gòu)建命名一樣
強(qiáng)調(diào) pom.xml 企業(yè)開發(fā)沒人手敲炸卑,都是復(fù)制...
pdf文檔少了一步過濾器
完整工程結(jié)構(gòu)
5.5 lombok
我們開發(fā)時如果使用lombok簡化實(shí)體類創(chuàng)建
① 引入坐標(biāo)
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
② 下lombok插件 【要求大家都用....】
重啟idea工具,生效
5.6 部署測試
老師晚上總結(jié)
今日重點(diǎn)
導(dǎo)入普通javaweb模塊
把需要導(dǎo)入的模塊拷貝工程中煤傍。
導(dǎo)入模塊
- 導(dǎo)入普通的web項(xiàng)目需要添加tomcat的依賴盖文,tomcat里面有servlet的jar.
- 需要把該目標(biāo)修復(fù)為發(fā)行版
maven的倉庫配置(setttings.xml文件中配置的)
- 配置本地倉庫
- 配置阿里的遠(yuǎn)程倉庫(如果本地倉庫找不到,就會去找阿里)
idea的maven的配置是否配置好了
maven的目錄結(jié)構(gòu)清晰
創(chuàng)建Maven的web項(xiàng)目
導(dǎo)入maven模塊
- 把maven模塊拷貝當(dāng)前的工程中
-
導(dǎo)入模塊
1589458456523.png
==無腦下一步一下步即可==
學(xué)習(xí)反饋
反饋 | 回復(fù) |
---|---|
拓展可以給一些嗎 | |
忘了怎么從外部把項(xiàng)目導(dǎo)入到idea中 | 講解 |
疑惑點(diǎn)
反饋 | 回復(fù) |
---|---|
maven是不是分為本地倉庫和遠(yuǎn)程倉庫,是不是一次下載終身使用蚯姆? | 是的五续,等會會介紹 |
老師我有個題外話,想問下有什么網(wǎng)站可以刷SQL語句的題龄恋,感覺自己這方面還是不太行 | 百度上直接搜索mysql練習(xí)題疙驾,很多 |
可以指定兩個倉庫么? 我的maven指定老師的倉庫和我的倉庫 | 不行 |
那我是不可以在idea在配置一個版本的maven 然后指定老師的倉庫 | 老師的倉庫不是下發(fā)給大家了嗎。你安裝在你的本地就是你的倉庫了 |
那我以前的倉庫直接替換就好了? | 可以,把帥哥的倉庫內(nèi)容覆蓋你原來的倉庫. |
在src目錄下郭毕,存放的java代碼和配置文件它碎,配置文件一改變?yōu)槭裁磿匦戮幾g?為什么創(chuàng)建一個resources目錄放配置文件就解耦显押,不重新編譯了扳肛? | 只有java類會重新編譯。 分成java包和resources包是為了方便管理乘碑。 |
打包 什么時候大jar包 什么時候打web包 | 如果是java項(xiàng)目會打成jar 挖息, web項(xiàng)目打成war包。 |
maven坐標(biāo)依賴需要手動設(shè)置嗎 | 后期都是復(fù)制粘貼,今天可以寫寫.熟悉結(jié)構(gòu). |
maven工程創(chuàng)建之后右下角提示Maven project need to be imported,兩個選項(xiàng): 1.import Changes 2. Enable Auto-Import, 這兩個選項(xiàng)點(diǎn)了有啥后果... | 第一個需要每次改變后都點(diǎn)擊蝉仇,導(dǎo)入改變后的內(nèi)容旋讹。 第二個是自動加載殖蚕。 |
老師創(chuàng)建Java工程(非web工程)一直都在下載,Archetype repository not defined. 出現(xiàn)這種題是信息 | 這是因?yàn)槭褂霉羌?模板)創(chuàng)建項(xiàng)目.但是骨架沒有下載到.因此一直在下載. |
我要等等還是? | 網(wǎng)路可以的話,等等是能夠下載成功的.或者你停掉下載.創(chuàng)建maven項(xiàng)目的時候不適用骨架. |
Maven projects那里的Plugins報紅怎么回事 項(xiàng)目那里還多了一個.idea文件夾 | 報紅是因?yàn)樽鴺?biāo)對應(yīng)的jar包下載失敗.項(xiàng)目那里還多了一個.idea文件夾跟maven沒關(guān)系..idea是項(xiàng)目的記錄文件.是唯一的.建議重新建立maven項(xiàng)目. |
以前用servlet的時候沒有導(dǎo)jar包吧?老師,這里為啥還要用坐標(biāo)才能用servlet呢? | 以前我們用的tomcat中的servlet.jar包現(xiàn)在項(xiàng)目沒有tomcat環(huán)境依賴了.只能自己導(dǎo)入. |
以后都需要自己添加依賴嗎? | 是的沉迹,只不過后期我們添加依賴都是CV比較多睦疫,不需要自己手寫。 |
測試期的意思就是運(yùn)行test里面的代碼嗎 | 是的 |
咱們用maven鞭呕,添加了3.1版本jar包蛤育,使用的還是內(nèi)置的tomcat運(yùn)行,為什么用到了外置的tomcat8內(nèi)置的jar包葫松。還沖突了 | 寫代碼的時候不會沖突.web項(xiàng)目比較特殊.將來是要在web容器中運(yùn)行的.tomcat就是web容器.容器中也有一樣的jar包就會沖突.因此我們有些jar包范圍在編譯階段有就可以了.運(yùn)行時期無效.比如:servlet.jar |
剛才講的范圍瓦糕,導(dǎo)入servletjar包時如果用默認(rèn)范圍,使用外置或者內(nèi)置tomcat都會出現(xiàn)問題嗎腋么? | tomcat8已經(jīng)解決了這個版本沖突的問題了咕娄,所以使用內(nèi)置的tomcat不會報錯的,但是我們規(guī)范還是寫上這個依賴范圍 |
使用外置tomcat版本號用3.1珊擂,就算指定范圍也不會出錯吧圣勒! | tomcat8已經(jīng)解決了這個版本沖突的問題了,所以使用內(nèi)置的tomcat不會報錯的摧扇,但是我們規(guī)范還是寫上這個依賴范圍 |
全局配置那里 設(shè)置完 保存應(yīng)用 關(guān)閉在打開 就又恢復(fù)了怎么回事 | 全局的配置對新建的項(xiàng)目才起作用圣贸,你可以新建一個項(xiàng)目試試 |
如果外置或者內(nèi)置的的tomcat 的servlet包和maven導(dǎo)入的servlet包的版本一樣,就不會報錯了吧扛稽? | 版本不一樣也不行.Servlet接口名稱是一樣的.jar包沖突其實(shí)是jar包中有相同的類. |
什么叫做技術(shù)棧呢 | 技術(shù)棧一般來說是指將N種技術(shù)互相組合在一起 |