目录
1.Mavne是什么
2.构建
3.构建过程中的各个环节
部署流程
4.Maven命令
pom
maven坐标
maven工程的坐标与仓库中路径的对应关系
5.仓库
仓库的分类
本地仓库
远程仓库
仓库中保存的内容
6.依赖范围
compile范围依赖
test范围依赖
provided范围依赖
maven有三套相互独立的生命周期
7.生命周期所需插件
1.Mavne是什么
Maven是一款服务于Java平台的自动化构建工具
make -> Ant -> Maven -> Gradle
2.构建
概念:以“Java源件”,“框架配置文件”,“JSP”,”HTML“,”图片“等资源为”源材料“,去”生产“一个可以运行的项目过程。
编译
部署
搭建
编译:JAVA源文件(.java)->编译 -> class字节码文件(.class) -> 交给JVM执行
部署:一个BS项目最终运行的并不是动态的web工程本身,而是这个动态web工程编译的结果,把编译结果部署到服务器上。
动态web工程 ->编译-> 编译结果 ->部署
tips:运行时环境
Jre System Library
Apache Tomcat
其实是一组jar包的引用,并没有把jar包本身复制到工程中,所以并不是目录。
开发过程中,所有的路径或配置文件中配置的类路径等都是以编译结果的目录结果为标准的。
3.构建过程中的各个环节
清理:将以前编译得到的旧的class字节文件删除,为下一次编译做准备。
编译: 将java源文件编译成可以被jvm执行的class字节码文件。
测试:自动测试,自动调用Junit程序。
报告:测试程序执行的结果生成报告。
打包:将编译结果打包(动态web工程打war包,java工程打jar包)。
安装:Maven特定的概念,将打包得到的文件复制到”本地仓库“中的指定位置(settings.xml喷子hi的路径)。
部署:将动态web工程生成的war包复制到servlet容器自定目录下,使其可以运行。
部署流程
1,首先,配置tomcat的manager
编辑远程tomcat服务器下的conf/tomcat-users.xml,在末尾增加(其实只要拉到文件末尾,去掉注释改一下就可以了)
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="password" roles="manager-script"/>
<user username="root" password="password" roles="manager-gui"/>
将上面的password改为自己的密码,注意对于tomcat9来说,不能同时赋予用户manager-script和manager-gui角色。 保存tomcat-users.xml。 在tomcat服务器的conf/Catalina/localhost/目录下创建一个manager.xml文件,写入如下值:
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
保存退出。 然后在浏览器中输入http://serverip:port/manager/html,此时会弹出要求输入用户名和密码对话框,输入manager-gui对应的用户和密码登录管理控制台(其中serverip为服务器ip,如果服务器在本地就是localhost或者127.0.0.1,端口为tomcat端口,默认8080)。以此确认manager是否配置正确。正确结果示例如下:
2,在maven项目中添加配置
在pom.xml文件中,在plugins节点下添加如下plugin节点
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://serverip:port/manager/text</url>
<username>admin</username>
<password>password</password>
<update>true</update>
<path>/webapp</path>
</configuration>
</plugin>
将上面的serverip和port换成自己tomcat服务器的ip和端口。密码换成上面配置的manager-script角色的密码。path改为项目在tomcat服务器中的部署路径。
然后进行部署,如果是第一次部署,运行mvn tomcat7:deploy进行自动部署(对于tomcat8,9,也是使用tomcat7命令),如果是更新了代码后重新部署更新,运行mvn tomcat7:redeploy,如果第一次部署使用mvn tomcat7:redeploy,则只会执行上传war文件,服务器不会自动解压部署。如果路径在tomcat服务器中已存在并且使用mvn tomcat7:deploy命令的话,上面的配置中一定要配置true,不然会报错。 如果IDE是eclipse,就在runas->run configurations中配置一个maven build,intellij类似。
4.Maven命令
maven -v 查看maven版本
约定 > 配置 > 编码
注意: 执行与构建过程相关的maven命令,必须进入pom.xml所在目录,与构建过程相关:编译、测试、打包。
mvn clean 清理
mvn compile编译主程序
mvn test-compile 编译测试程序
mvn test 执行测试
mvn package 打包
①maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在maven核心程序中。
②当我们执行maven命令需要用到某个插件时,maven核心程序会首先到本地仓库中查找。
③本地仓库的迷人位置:[系统中当前用户的家目录]\.m2\repository。
④maven核心程序如果在本地仓库中找不到需要的插件,那么他会自动给链接外网到中央仓库下载。
⑤如果此时无法链接外网,则构建失败。
pom
①含义: Project Object Model 项目对象模型 。
如 DOM: Document Object Model 文档对象模型。
②pom.xml对于mavne工程是核心配置文件与构建过程相关的一切设置都在这个文件中进行配置,重要程度相当于web.xml将对于动态web工程mavne坐标。
maven坐标
使用下面三个向量在仓库中唯一定位一个maven工程
①groupId
公司或者组织倒叙+项目名称
如: <groupId>com.china.yinhe</groupId>
②artifactId
模块名称
如:<artifactId>yinhe</artifactId>
③version
版本
如: <version>版本号</version>
maven工程的坐标与仓库中路径的对应关系
${groupId}/${artifactId}/${version}/${artifact}-${version}.jar
5.仓库
仓库的分类
本地仓库
当前电脑上部署的仓库目录,为当前电脑上所有工程服务。
远程仓库
①私服:搭建在局域网环境中,为局域网范围内的所有maven共工程服务。
②中央仓库:架设在Internet上,为全世界所有maven工程服务。
③中央仓库镜像: 为分担中央仓库的流量,提升用户访问速度在某个国家或者区域搭建的仓库,为该国家或者区域内的mavan工程服务。
仓库中保存的内容
mavane工程
①mavan自身所需的插件
②第三方框架或者工具的jar包
③我们自己开发的maven工程(mvn install)
版本的含义
SNAPSHOT:不稳定版本
RELEASE:稳定版本(推荐)
6.依赖范围
这也是为什么主程序中绝对不能出现使用test范围的依赖工具
compile范围依赖
对主程序是否有效: 有效
对测试程序是否有效: 有效
是否参与打包: 参与
是否参与部署: 参与
典型例子:spring-core.jar
test范围依赖
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例子: junit.jar
provided范围依赖
对主程序是否有效:有效
对测试程序是否有效: 有效
是否参与打包: 不参与
是否参与部署: 不参与
典型例子: servlet-api.jar
因为servlet容器提供了,但是开发阶段由于需要该jar包的支持添加了,防止和servlet容器中的jar包冲突使用provided范围
maven有三套相互独立的生命周期
CleanLifeCycle:在进行真正的构建前进行一些清除工作。
DefaultLifeCycle:构建的核心部分,编译、测试、打包、安装、部署等。
SiteLifeCycle:生成项目报告,站点,发布站点。
7.生命周期所需插件
生命周期 | 插件目标 | 插件 |
compile | compile | maven-compile-plugin |
testCompile | testCompile | maven-compile-plugin |
可以将目标看作”调用插件功能命令“
生命周期 -> 执行对应的maven命令 -> 调用对应的插件
知识的价值不在于占有,而在于使用