Maven的学习
一、maven基础知识
1、maven介绍
-
maven是什么?
maven是apache下的一个纯Java开发的开源项目管理工具,用来对Java项目进行构建、依赖管理。
-
什么是项目构建?
- 项目从编写源代码到编译、测试、运行、打包、部署、运行的过程。
项目构建的过程是什么?传统项目构建和maven项目构建的区别是什么?
-
什么是依赖管理?
- 什么是依赖?Java项目依赖第三方jar包才能运行,即项目依赖了第三方jar包。
- 什么是依赖管理?对Java项目依赖的jar包进行规范化管理。
-
传统的项目依赖管理?
- 方式:手动添加到项目的lib目录中。
- 缺点:
- 没有对jar包的版本进行同意管理,容易产生jar包冲突。
- 从网上找jar包非常不方便。
- jar包添加到工程中导致项目过大。
-
maven的项目依赖管理?
-
方式:在配置文件中添加手动添加jar包。
-
好处:
-
通过pox.xml文件对jar包版本进行统一管理,避免进行jar包冲突。
-
maven团队维护了一个非常全的maven仓库。
-
-
-
maven的好处?
-
一步构建
- maven对项目构建的过程进行标准化,通过一个命令可完成构建过程。
-
依赖管理
- maven不用手动导jar包,通过在配置文件中定义坐标从maven仓库自动下载,方便且不容易出错。
-
maven的跨平台,可以在windows、Linux上使用。
-
maven遵循规范开发利于提高大型项目的团队开发效率,降低项目的维护成本。
-
2、maven的安装
-
下载安装
-
下载:从http://maven.apache.org/download.cgi下载你想要的版本。
-
解压:解压到不含中文和空格的目录下:
-
bin目录:mvn.bat(以run方式运行项目)、mvnDebug.bat(以debug方式运行项目)
-
boot目录:maven运行需要的类加载器。
-
conf目录:settings.xml整个maven工具的核心配置文件
-
lib目录:maven运行的jar包。
-
-
-
环境变量配置
-
配置MAVEN_HOME
-
将%MAVEN_HOME%/bin加到环境变量path.
-
通过mvn -v查看是否安装成功。
-
*注意:%JAVA_HOME%\bin;*一定要放在path的最前面,否则,eclipse等开发工具可能会出错。
-
-
maven仓库
-
maven仓库的作用?
-
本地仓库:用来存储从远程仓库和中央仓库下载的jar包和插件,项目要使用的jar包或者插件优先从本地仓库查找。默认的本地仓库位置是在用户目录下,最好配置一下,放在自己想要的目录中。
-
远程仓库:如果本地仓库没有,默认去远程仓库中下载,远程仓库可以在互联网内也可以在局域网内。
-
中央仓库:maven软件中内置了一个远程仓库https://repo.maven.apache.org/maven2/,他是中央仓库,服务于整个互联网。
-
如何在中央仓库中找jar包?
搜索org ——>进入到 org/ 下 ——>搜索apache ——>进入到apache/ 目录下——>搜索struts——>进入struts2-core目录下——>选择版本
-
-
-
配置本地仓库?
在conf目录中找到settings.xml文件中找到配置位置加入下面一句话:
<localRepository>D:\maven\repository </localRepository>
-
3、maven常用命令?
1、clean
- 项目工程目录> mvn clean
- 清除项目根目录下的target目录,将class文件全部清除
2、Compile
- 项目工程目录> mvn compile
- 编译源文件到到项目根目录,创建target目录,里面存放的是class文件。
3、test
- 写一个测试用例
- 项目根目录 > mvn test
- 运行的插件有:
- 复制资源的插件。
- 编译打包class文件的插件,编译的是源文件,放在target/classes目录下。
- 复制test目录下的resources的插件。
- 编译打包class文件的插件,编译的是测试文件,放在target/test-classes目录下。
- 执行测试单元的测试类,然后显示测试单元的类的结果。
4、package
- 项目根目录 > mvn package
- 运行的插件
- 前五步于test相同
- 打包wa文件的插件,放在target/ *.war。
5、install
- 项目根目录 > mvn install
- 运行的插件
- 前六步与package相同
- 执行将项目的war包转移到本地仓库的插件。在repository/目录下。
3、三套生命周期
maven对项目的构建分为三套 独立的生命周期,注意这里说的是“三套”,而且是“相互独立”,这三套生命周期分别是:
- clean lifecycle : 在进行真正的构建之前进行一些清理工作。
- default lifecycle : 构建的核心部分:编译、测试、打包、部署等等。
- site lifecycle : 生成项目报告,站点、发布站点。
每一个阶段都有一个相应的命令,具有相应的插件来支持命令的运行。
注意:属于同一个指令周期内的指令,当后面的指令执行时,前面的会自动执行。
二、maven创建项目工程
1、创建简单的helloworld项目工程注意的点
-
创建简单的maven工程,选择Maven porject——>跳过骨架的选择
-
packaging选项:web项目选择war,基础Java选择jar,工程聚合时选择pom(下面会讲到)
-
创建好后,发现项目不是标准的web结构,两个方法构建:
- 传统方法:在其他web项目中找到结构复制过来
- 绝招:右键项目 ——> JavaEE Tools ——>选择第二个,专门用来生成web项目的标准结构
-
jdk版本的控制,maven默认是jdk1.5
-
绝招:右键项目——>maven——>Add Plugin——>输入compile——>选择最高版本就行了
-
然后在pom.xml文件中,在plugin标签中加入下面的标签:
<configuration> <!--源码版本--> <source>1.7</source> <!--编译目标版本--> <target>1.7</target> <!--指定编码--> <encodeing>ut-8</encodeing> </configuration>
-
改完以后可能会报错,就右键项目——>maven——>update porject,就是刷新工程,可以没事刷一下
-
还有绝招:调整全局jdk版本,在maven的setting.xml文件下配置jdk版本
-
-
创建servlet文件时,发现报错,是因为没有jar包,下面讲解如何添加依赖:
- 打开pom.xml文件——>点击dependencies——> Add ——>搜索servlet——>选择你想要的servlet版本
-
jsp文件创建时不报错,但是maven原本没有jsp jar包的,不报错是eclipse的问题,所以也要添加依赖。
-
如果你想使用命令行运行,就要添加tomcat插件,方法和jdk版本控制第一种方法一样。然后再pom.xml文件中配置如下:
<configuration> <!--访问端口--> <port>8080</port> <!--项目访问的路径--> <path>/helloworld</path> <!--指定编码--> <uriencodeing>ut-8</uriencodeing> </configuration>
- tomcat插件运行步骤:
- run as ——>maven build(第四个是运行运行过的命令,第五个是自己输命令)——>Goals——>输入tomcat7:run(这是直接运行,编译就直接输入compile,可以不加mvn)
- 运行之后tomcat成功启动,但是在网页无法访问,原因是jar包冲突,因为tomcat中本来就有servlet、jsp的jar包,这也是为什么创建web项目可以不用导入jar包的原因,maven管理依赖时又加了jar包,就导致冲突。
- 解决办法:打开pom.xml文件——>点击dependencies——>properties ——> Scope ——> 选择provided
- compile:默认的,编译
- provided:提供者,就是已经有了,作用范围:编译时用,打包就不用了
- runtime:运行的时候用,有点类似与JDBC的驱动,运行时需要,写代码和编译时不需要
- test:测试和编译时要,运行时就不要了,添加junit 的jar包就选这个
- system:配置时要指定整个项目,太耗时,不建议使用,和provided差不多
- tomcat插件运行步骤:
2、使用maven导入struts2-core jar包
-
一键导入:打开pom.xml文件——>点击dependencies——>add——>搜索struts2-core——>选择你需要的版本
-
在resources文件下创建struts.xml文件——>next——>选择DTD文件——>选择XML文件——>选择DTD的文件
-
上述步骤可能不会成功,没有DTD文件,所以就下载ssh-schemas_…jar包插件,放在eclipse安装目录下的plugin目录下,再次测试就成功创建了。
-
配置package标签:
<package name="default" namespace="/" extends="struts-default"> <action name="helloAction" class="全类名"> <result>/index.jsp</result> </action> </package>
-
在web.xml文件中配置过滤器filter
<filter> <filter-name>struts</filter-name> <filter-class>检索ctrl+shift+T,搜索StrutsPreparAndExecuteFilter类名,复制群路径</filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
补充:在pom.xml文件中配置的tomcat插件是怎么工作的?
- 这里的tomcat插件是是一个虚拟的tomcat,他不会将项目部署到tomcat中,这个插件是用来模拟tomcat的运行环境,并不是正真的tomcat。
三、maven工程的拆分于聚合(重点)
1、工程的拆分
1、为什么要拆分?
- 工程两巨大时,工程的拆分可以实现分模块开发与测试,可实现多线程开发与管理,提高代码的费用度的同时也提高开发效率。可以用一张图解释一下:
2、工程的聚合
1、父工程管理各个子工程就是就是工程的聚合。
2、依赖的传递性
依赖具有传递性,这就是为什么引入struts2-core核心jar包以后,其他所有的jar包就会自动引进来的原因。