一、基础
Maven是Apache公司开源项目,是项目构建工具,用来依赖管理
1、maven的好处
(1)同样的代码实现的功能都一样,maven开发的大小小于没有用maven开发的。可以推断出maven项目中一定没有jar包,没有jar包的maven项目怎么运行?(10个ssh项目,不需要把四十个jar包拷贝10份,只需要把坐标信息拷贝十份,或者把一个jar包信息放到一个工程里面,另外一个工程去继承它),maven找jar包的方式如下:
2、maven的好处如何实现
maven的两大核心:
依赖管理:对jar包管理过程
项目构建:项目编码完成后,对项目进行编译、测试、打包、部署一系列的操作都可以通过命令来实现,每一步操作都对应一个命令
通过maven命令将web项目发布到tomcat
3、maven的安装、配置本地仓库
maven程序安装前提:maven程序java开发,他的运行以来jdk
(1)maven的下载安装
(2)解压到本地磁盘
(3)配置环境变量:
jdk的环境变量:JAVA_HOME
配置到bin目录的上一级
补充:
Java -version 查看java版本
mvn -v 查看本地maven环境的命令
(4)配置本地仓库
a、仓库类型
先去本地仓库找,如果找不到就去私服,前提是连接了私服;还是不行可以去中央仓库,但是中央仓库需要访问外网
b、配置本地仓库
b1、找到jar包仓库压缩包
b2、解压到本地磁盘
b3、配置本地仓库,让maven程序知道仓库在哪
4、maven项目标准目录结构
每一个maven项目都必须有一个pom.xml文件
src下有main(主文件:项目需要的)和test(测试文件:单元测试)两个项目
main 下面包含:java,resource(存储一些配置文件),webapp(存放页面的一些素材jsp,web-inf等)
倒入maven项目:
5、maven的常用命令(应用):基于项目构建
(1)mvn clean:清理:maven也可以clean:把项目根目录下的target目录清除掉,其实就是清除掉.class文件;也是调用jar包
eclipse中自带的clean,会把之前生成的class文件clean掉,再重新编译一份
tomcat的clean,
clean的是tomcat目录下的
(2)mvn compile:编译 将.java文件编译之后会生成.class文件,编译也是调用jar包
(3) mvn test :将项目根目录下src/test/java目录下的单元测试类都会执行.执行单元测试:执行单元测试的时候也进行了编译 ;单元测试的类名有要求:xxxTest.java
(4)mvn package :打包项目根目录下target目录,web项目-war包;java项目-jar包
以前打包的两种当时:
a、wab项目,需要导出war包(放到tomcat下运行):项目-右键-导出-war包
b、导出jar包,右键-export-jar
现在 maven的方式:web项目-war包;java项目-jar包
可以把工具类打出一个本地包,形成一个仓库,其他的需要使用的地方去这个本地仓库拿;修改也只需要修改这个本地仓库的包,再发布即可
(5)mvn install:解决本地多个项目公用一个jar包
打包到本地仓库
(6)、maven项目的生命周期
在maven中存在“三套”生命周期,每一套生命周期都是相互独立、互不影响的;在同一套生命周期内,执行后面的命令,前面的操作都会执行.
CleanLifeCycle:清理生命周期
包含clean命令
defaultLifeCycle:默认生命周期
包含compile、test、install、pachage、deploy
siteLifeCycle:站点生命周期
包含site,描述项目使用了哪些生命周期
6、配置idea中基本环境-包含maven
(1)安装xcode
xcode-select --install
(2)安装homebrew
通常情况下我们选择使用brew
作为macOS上的包依赖管理工具,安装brew
请在shell中执行
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
在安装完成brew
之后,我们可以可以随时通过brew install
命令来安装各式各样的软件包。
TIP
Homebrew的源仓库是托管在Github上的Git仓库,由于网络问题可能安装较慢或者失败,遇到失败请重试多次。目前国内镜像源还存在一些问题,造成找不到依赖,建议尽可能使用官方源。
若homebrew使用过程中出现找不到依赖的情况,请检查Homebrew是否成功安装。特别是检查
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
目录是否存在,内容是否为空或者只有.git
文件夹,如果是的话,把/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
整体删除,并重新运行脚本安装。
(3)安装Ohmyzsh
目前macOS系统中默认使用zsh作为shell,Oh-my-zsh是一个zsh的扩展工具箱,可以让的你的shell功能更加强大,推荐安装。要安装Oh-my-zsh,可以运行下面的命令:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
(4)安装JDK
如果你的系统还没有安装过JDK,请先安装。请使用我们推荐的JDK(openjdk-11)版本,下载地址为:
- Adopt OpenJDK 11.0.3:https://soft.corp.kuaishou.com/ios/OpenJDK11U-jdk_x64_mac_hotspot_11.0.3_7.pkg
Apple M1芯片的macOS可选使用以下aarch64架构的JDK:
- OpenJDK(Zulu build) 11.0.9.1+1 https://cdn.azul.com/zulu/bin/zulu11.43.1021-ca-jdk11.0.9.1-macosx_aarch64.dmg
安装完成后,执行下列命令配置JAVA_HOME
环境变量,并确认输出的JAVA_HOME指向JDK11,以便固定使用此版本的JDK。或者选择手工进行配置
export JAVA_HOME=$(/usr/libexec/java_home)
echo $JAVA_HOME
# 请注意和你shell对应的文件是否存在,不存在是不会写入的。如果不存在,可以先手工创建一个,macOS下默认的shell是zsh,如果你使用的是zsh,可以只配置.zshrc文件
test -r ~/.bash_profile && echo "export JAVA_HOME=$JAVA_HOME" >>~/.bash_profile
test -r ~/.profile && echo "export JAVA_HOME=$JAVA_HOME" >>~/.profile
test -r ~/.zshrc && echo "export JAVA_HOME=$JAVA_HOME" >>~/.zshrc
(5)安装Maven
如果你的系统没有安装Maven,可通过brew
直接完成安装:
brew install maven
由于某些项目体量很大,需要解析大量的依赖,为了防止Maven内存不足问题的出现,可以通过以下命令增加环境变量配置:
# 请注意和你shell对应的文件是否存在,不存在是不会写入的。如果不存在,可以先手工创建一个,macOS下默认的shell是zsh,如果你使用的是zsh,可以只配置.zshrc文件
test -r ~/.bash_profile && echo 'export MAVEN_OPTS="$MAVEN_OPTS -Xmx4g"' >>~/.bash_profile
test -r ~/.profile && echo 'export MAVEN_OPTS="$MAVEN_OPTS -Xmx4g"' >>~/.profile
test -r ~/.zshrc && echo 'export MAVEN_OPTS="$MAVEN_OPTS -Xmx4g"' >>~/.zshrc
安装完成后,需要对Maven进行配置
# 确保.m2文件夹已创建 mkdir -p ~/.m2/ # 检查是否存在之前的 settings.xml 文件,有的话先备份它,好习惯要养成 test -r ~/.m2/settings.xml && cp ~/.m2/settings.xml ~/.m2/settings.xml.$(date '+%Y%m%d').bak # 打开自己存放代码的目录,如 ~/Develop,将 kuaishou-build-tools 工程 clone 到本地,若本地已经存在则省略这步 cd ~/Develop # !!这里替换成你自己的存放代码的目录!! git clone --depth=1 代码目录git地址 # 进入 代码目录,并将其更新到最新版 cd 代码目录 git pull --rebase # 建立软链 # 注意!这里的路径必须要用绝对路径!因为即使路径不存在也可以成功的创建软链!感谢 @孙式松 同学的实践经验! # 一定!一定!一定!要进入 正确的代码目录 目录再执行下面的命令!99.9% 的异常都是软链创建错了!!! ln -fsv $(pwd)/src/main/resources/settings.xml ~/.m2/settings.xml # 确认软链建立是否正确 ll ~/.m2
(6)配置安装idea
a、下载
b、配置
全局配置说明
如果需要配置能在所有项目中生效,则应从 File | Other Settings | Preferences For New Projects(老版本叫 Default Settings) 进入配置
而不是通过 Preferences 菜单进入(Preferences中的配置只对当前项目生效)。
这个问题经常会被忽略,直到建立第二项目的时候发现配置又要重新配置一遍。
大写加粗注意:由于IDEA某些版本似乎有问题,导致该默认设置有时候是不生效的,在我们调查清楚具体原因前,请大家在创建/导入完新项目后也确认下配置是否有错误的、没生效的或者不符合预期的。
必需配置
代码签名配置
Editor | File and Code Templates | Includes | File Header (快捷搜索词:file header),设置默认的 Java 代码签名
/**
* @author yourname <yourname@xx.com>
* Created on ${YEAR}-${MONTH}-${DAY}
*/
Maven配置
Preferences | Build, Execution, Deployment | Build Tools | Maven (快捷搜索词:maven)
勾选 Always update snapshots,避免因为snapshot更新不及时导致编译不过
现在项目引入包太多, 所以要把以下这个参数:VM options for importer:-Xmx2000m,也设置下, 要不会看到import的包会飘红,注意:这里最好一次调成 -Xmx5000m 否则还是会遇到各种导入飘红的情况。
编译堆内存
默认的已经不能满足我们了,需要调大一些
Preferences | Build, Execution, Deployment | Compiler(快捷搜索词:compiler)
Build process heap size (Mbytes): 2000
Java8 parameters设置 (Required)
Preferences | Build, Execution, Deployment | Compiler | Java Compiler | Javac Options | Additional Command line parameters(快捷搜索词:javac)
填上下面这个
-parameters
此项如果不设置,某些依赖参数名的 AOP 在 IDEA 下会不起作用
二、案例
1、maven整合servlet(package选择war)
(1)new-project-maven-
groupId:公司名称(公司域名的倒序)
artifactId:项目名称()
version:版本
package:打包方式
此时会报错,确实web.xml文件,解决方式,手动增加这个文件,在webapp下面增加目录WEB-INF,在该目录下增加文件web.xml,将其他位置web.xml文件中的内容拷贝到该文件即可
pom.xml中添加插件(maven会根据pom.xml中的配置信息来编译,如果创建好的web项目提示pom文件的版本太低,则右键-maven-update即可)
(2)创建servlet,servlet编译报错.原因:确实servlet-api-xx.jar包
解决方式:添加jar包到pom.xml中
查看项目的依赖关系
2、依赖范围(了解)
proviced:编译时有效,运行时(部署到tomcat)时不再需要
添加依赖范围:默认是compile,默认编译运行测试都需要
如果将不需要部署的(servlet-api.jar)设置为compile,在打包后就包含了servlet-api.jar,war部署到tomcat跟tomcat中存在servlet-api.jar冲突,可以将其改为provided的形式就可以解决这个问题
eg:
mvn tomcat: run