1. Maven介绍
maven(专家的意思)是Apache下的一个纯java开发的免费开源项目,它是一个项目管理工具,可以跨平台使用,使用maven可以对java项目进行构建(构建就是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程)和依赖管理。
问:什么是一步构建?
答:maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
传统项目的构建流程 | Maven项目的构建流程 |
---|---|
1. 创建web项目 | 1. 清理clean,清理class文件 |
2. 编写Java源代码和配置文件 | 2. 编译compile,将java文件编译成class文件 |
3. 将源代码编译成字节码 | 3. 测试test,测试代码正确性 |
4. Junit单元测试 | 4. 打包package,java项目打jar包,web项目打war包 |
5. 将web项目打成war包部署到服务器上 | 5. 部署install,项目自动部署到maven仓库中 |
tips:Maven是将项目构建的过程进行标准化,每个阶段使用一个命令完成,而且可以一键构建,更简单,更快捷。
tips:Maven的1-5个命令中,每个命令的运行,都会先去依次运行它之前的所有命令。
问:什么是依赖管理?
答:maven工程不用手动导jar包,通过在pom.xml中定义坐标从maven仓库自动下载,方便且不易出错。
依赖就是web工程对第三方jar包的依赖,依赖管理就是对项目所有依赖的jar包进行规范化管理。maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven来构建项目。
传统项目你需要手动导入第三方jar包到工程中,而手工拷贝jar包的问题是,不仅没有对jar包的版本统一管理,容易导致版本冲突,而且从网上找jar包非常不方便,有些jar找不到,还有就是大量jar包添加到工程中导致工程过大。
使用maven,你可以跳过那个令人头疼的搜寻,下载和搭配jar包的过程,它只需要在pom.xml(maven工程的配置文件)中添加jar包的坐标,就可以自动从maven仓库中下载jar包。
maven团队维护了一个非常全的maven仓库,里边包括了当前使用的jar包,maven工程可以自动从maven仓库下载jar包,非常方便,下载jar包地址:https://mvnrepository.com/
2. 环境搭建
2.1 下载maven
http://maven.apache.org/download.cgi 下载maven3.3.9版本
点击 archives 下载过往版本
点击 binaries 下载
tips:source是源码,也可以一并下载下来。
点击apache-maven-3.3.9-bin.zip下载
目录结构
- bin:mvn.bat(以run方式运行项目)、mvnDebug.bat(以debug方式运行项目)。
- boot:maven运行需要的类加载器。
- conf:settings.xml(maven工具的核心配置文件)。
- lib:maven运行的依赖jar包。
2.2 环境搭建
使用maven,电脑上需安装java环境,安装JDK1.7+版本(需正确配置JAVA_HOME和系统变量下的path),然后再配置MAVEN_HOME。
1. 配置MAVEN_HOME为安装包根路径
2. 配置系统Path为%MAVEN_HOME%/bin;
3. 通过mvn -v命令检查maven是否安装成功
3. Maven仓库
maven的工作需要从仓库下载一些jar包,项目通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库(本地电脑的某个文件夹),当第二次需要此jar包时则不再从远程仓库下载,因此也可以直接将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
如果远程仓库没有你需要的jar包,则会去中央仓库查找,然后返回给远程仓库,远程仓库再返回给本地仓库。
本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,优先从本地仓库查找(默认本地仓库位置在用户目录下的.m2/repository)。
远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。
中央仓库:maven软件中内置的一个远程仓库,地址为http://repo1.maven.org/maven2,它是中央仓库,服务于整个互联网,它由Maven团队自己维护,里而存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。
3.1 配置本地仓库
新建一个repository文件夹,位置和取名随意,然后在MAVEN_HOME/conf/settings.xml文件中配置本地仓库位置。
3.2 下载基本插件
在cmd中,利用mvn help:system命令,来加载基本插件,需要联网状态,如果下载失败,可以在settings.xml文件中更改中央仓库路径,然后再放在仓库文件夹中一份,再执行命令,整个过程会比较慢,耐心等待。
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
4. IDE配置
- Maven配置:将Maven安装根目录配置到IDE中。
- settings.xml配置:将Maven安装目录中的setting.xml文件引入到IDE中,以便IDE知道本地仓库位置和镜像。
- Maven使用的JDK版本确认:Eclipse可以跳过这一步,因为Eclipse没有内置的JDK。
- JDK参数配置:配置JDK运行参数,让JDK关联我们的Maven。
- JDK编译版本确认:查看IDE编译版本是否正确。
- 调出maven仓库视图,重构本地仓库索引。
将Maven安装根目录配置到IDE中:Eclipse中没有Maven4MyEclipse,而是叫做Maven。
指定settings.xml文件的位置
确定Maven使用的JDK版本确实为1.7,如果是Eclipse则可以跳过这一步骤(因为Eclipse没有内置的JDK)
指定JDK的Default VM arguments为:-Dmaven.multiModuleProjectDirectory=MAVEN_HOME
tips:注意这里请指定JDK的文件夹,而不要指定JRE的文件夹。
右键工程属性,查看是编译版本是否是1.7,如果不是,请换成最高编译版本。
Window -> Show View -> Maven Repositories:调出maven仓库视图
在maven仓库视图中找到自己的本地仓库,右键执行索引重构(Rebulid Index)
5. 入门程序
5.1 新建Maven项目
新建Maven项目,如果new列表中没有,选择Other,然后搜索Maven Project,点击Next
勾选Create a simple project,跳过模版。
填写项目信息
tips:GroupId是纵坐标,即项目打成包后的包名,请填写公司倒置域名。
tips:ArtifactId是横坐标,即项目名,请填写项目名。
tips:Version是当前项日版本号,snapshot为快照版本,release为正式发布版本。
tips:Packaging是打包方式,java项目选jar,web项目选war,模块项目选pom。 tips:Compiler
Level选最高,或者不选。 tips:Name和Description是命名和描述,可以不写。
使用maven创建的工程我们称它为maven工程,maven工程具有一定的结构规范,如下:
5.2 项目报错处理
第一步:新生成Maven项目的时候报错,因为webapp下结构补全,我们手动添加一个WEB-INF文件夹和web.xml文件,然后右键项目Maven-update Maven(勾选Force Update of Snapshots/Releases)。
第二步:更改Maven项目默认的JDK:Maven项目默认使用JDK1.5,我们可以右键buildpath来调整jdk版本,但是每次update我们的项目,它都会自动恢复到1.5的状态,所以我们使用一个插件maven-compiler-plugin,来强制要求maven使用的默认jdk版本,即需要在pom.xml中手动设置一下默认JDK版本为1.8,然后刷新项目。
<build><!--负责maven整体的环境配置-->
<plugins><!--所有的maven插件都写在这里-->
<plugin><!--插件标签-->
<groupId>org.apache.maven.plugins</groupId><!--插件所在的包-->
<artifactId>maven-compiler-plugin</artifactId><!--插件名-->
<configuration><!--插件配置-->
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
5.3 servlet测试
5.3.1 添加servlet开发的jar包依赖
使用servlet开发,需要依赖两个jar包,servlet-api.jar和jsp-api.jar,我们可以直接在pom.xml中添加这两个依赖,注意调节provided范围。
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
scope 中除了provided之外,还有其余四个属性
compile | 默认值,编译,测试,运行时,此jar包都生效 |
---|---|
provided | 已提供jar包,编译和测试时生效,运行时失效,防止和tomcat中的jar包冲突,如servlet-api.jar和jsp-api.jar |
runtime | 运行时jar包,测试和运行时有效,一般驱动包要选择此项,如ojdbc14.jar |
test | 只在测试时有效,如junit.jar包 |
system | 效果同于provided,基本不使用 |
如果你需要的依赖包在三大仓库中都没有,则你需要手动添加jar进库
- 先将jar包放在maven的安装目录下(建议和bin文件夹同级)
- 启动CMD,并且CD到我们的maven安装包的bin目录下
- 执行代码如下:
mvn install:install-file -DgroupId=javax.servlet -DartifactId=servlet-api -Dversion=3.0 -Dpackaging=jar -Dfile=../servlet-api.jar
tips:如果不知道jar包版本,可以利用解压缩软件打开这个jar包,然后在META-INF文件夹中,找到MANIFEST.MF,用记事本打开查看Specification-Version的值即可。
5.3.2 编写一个TestServlet.java文件
在src/main/java下编写一个TestServlet.java
@WebServlet("/servlet/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = -3211871061729232793L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("进入了servlet...");
}
}
5.3.3 使用Maven命令对项目一键构建
右键工程Run As -> Maven build… 即可弹出Maven命令框。
Goals中的常用命令列表
clean | 清除target目录(包括编译结果和打包结果) |
---|---|
compile | 编译java源代码,编译后的class文件在target/classes下(IDE中不可见) |
test-compile | 编译测试代码,编译后的class文件在target/test-classes下 |
test | 执行所有测试,重新编译 |
package | 打包命名,java打jar包,web打war包 |
install | 将工程打包后发布到本地仓库下的groupid/artifactid/version中 |
5.3.4 部署访问项目
测试阶段,建议在IDE中按照传统的方式,将项目部署到tomcat,启动tomcat,访问servlet,流程和之前一样。
竣工阶段,需要将项目打成war包,手动扔到tomca/webapps下,启动tomcat后浏览器访问。
至此,我们利用Maven搭建的第一个项目就结束了。