maven学习之路---入门

1. 什么是maven?
它是一个软件开发的管理工具,主要管理的工作是:依赖管理,项目构建
2. 使用maven的好处?
能够集中管理jar包
提供一键构建
3. maven的安装及配置
配置环境变量:MAVEN_HOME,PATH路径配置
本地仓库配置:
Settings.xml文件中
d:/repository</…>
运行:mvn -v
4. 常用的maven命令
compile,test,package,install,deploy
clean
site
5.什么是项目构建?
项目构建是一个项目从编写源代码到编译、测试、执行、运行、打包、部署、运行的过程
5.1 传统项目构建过程
传统的eclipse构建项目的过程如下:
在这里插入图片描述
构建过程如下:
1)在eclipse中创建-一个javaweb工程
2)在工程中编写源代码及配置文件等
3)对源代码进行编译,java 文件编译成class文件
4)执行Junit单元测试
5)将工程打成war包部署至tomcat运行
5.2 maven项目构建过程
maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一-些阶段,后面章节详细介绍每个阶段,这里先大概了解下:
在这里插入图片描述
上图中部分阶段对应命令如下:
清理阶段对应maven的命令是clean,清理输出的class文件
编译阶段对应maven的命令是compile,将java代码编译成class文件。
打包阶段对应maven的命令是package,java工程可以打成jar包,web包可以打成war包
运行一个运行一个
maven工程(web工程)需要-一个命令: tomat:run
(*)maven工程构建的优点:
1、一个命令完成构建、运行,方便快捷。
2、maven对每个构建阶段进行规范,非常有利于大型团队协作开发。
6、什么是依赖管理
什么是依赖? - - 个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。
举个例子:一个crm系统,它的架构是SSH框架,该crm项目依赖SSH框架,具体它依赖的Hibernate、Spring、Struts2。
什么是依赖管理?就是对项目所有依赖的jar包进行规范化管理。
6.1 maven项目的依赖管理
maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xm(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图:

在这里插入图片描述
使用maven依赖管理添加jar的好处:
1、通过pom.xml文件对jar包的版本进行统一管理, 可避免版本冲突。
2、maven 团队维护了一个非常全的maven仓库,里边包括了当前使用的jar包,maven 工程可以自动从maven仓库下载jar包,非常方便。
7、使用maven的好处
通过上边介绍传统项目和maven项目在项目构建及依赖管理方面的区域,maven有如下的好处:
1、一步构建maven对项目构建的过程进行标准化,通过-一个命令即可完成构建过程。
2、依赖管理.
maven工程不用手动导jar包,通过在pom.xml中定义坐标从maven仓库自动下载,方便且不易出错。
3、maven 的跨平台,可在window、linux. 上使用。
4、maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven来构建项目。
8、maven 安装
下载安装
●下载
从该网站http://maven.apache.org/download.cgi下载maven3.3.9版本
●解压
将maven解压到一个不含有中文和空格的目录中。
bin目录mvn.bat (以run方式运行项目)、mvnDebug.bat (以debug方式运行项目)
boot目录maven运行需要类加载器
conf目录settings.xml 整个maven工具核心配置文件
lib目录maven 运行依赖jar包
●环境变量配置
在这里插入图片描述
通过mvn-v命令检查maven是否安装成功,看到maven的版本为3.3.9及java版本为1.7,安装成功。

在这里插入图片描述
9、maven仓库
9.1 maven仓库的作用
maven的工作需要从仓库下载- -些 jar包,如下图所示,本地的项目A、项目B等都会通过maven软件从远程仓库(可以理解为互联网.上的仓库)下载jar包并存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库
已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。下图描述了maven中仓库的类型:
在这里插入图片描述
本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找默认本地仓库位置在${user.dir)/.m2/repository, ${user.dir]表 示windows用户目录。
远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。.远程仓库可以在互联网内也可以在局域网内。
中央仓库:在maven软件中内置- - 个远程仓库地址http:/repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。
9.2、配置本地仓库
在这里插入图片描述
10、maven项目
10.1 Maven项目工程目录约定,
使用maven创建的工程我们称它为maven工程,maven 工程具有- -定的目录规范,如下:
src/main/java一存 放项目的java文件
src/main/resources - -一存 放项目资源文件,如spring, hibernate配置文件
src/testjava - -存 放所有单元测试.java文件,如JUnit测试类
src/test/resources
–测试资源文件
target --项 目输出位置,编译后的class文件会输出到此目录
pom.xml-- maven 项目核心配置文件
在这里插入图片描述

10.2、常用的maven命令
在cmd的状态下测试
compile
compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class 文件输出到target目录下。
cmd进入命令状态,执行mvn compile,如下图提示成功:
在这里插入图片描述
在这里插入图片描述
test
test是maven工程的测试命令,会执行src/test/java 下的单元测试类。cmd执行mvn test 执行src/test/java下单元测试类,下图为测试结果,运行1个测试用例,全部成功。
在这里插入图片描述
clean
clean是maven工程的清理命令,执行clean 会删除target目录的内容。
package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。
install
install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库。

11、maven的概念模型
Maven包含了-一个项目对象模型(Project Object Model),- 组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
下图是maven的概念模型图:

在这里插入图片描述
●项目对象模型(Project Object Model)
一个maven工程都有-一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等。
●依赖管 理系统(Dependency Management System)
通过maven的依赖管理对项目所依赖的jar包进行统一管理。
比如:项目依赖junit4.9,通过在pom.xml中定义junit4.9的依赖即使用junit4.9,如下所是junit4.9的依赖定义:

<dependencies>
<!--此项目运行使用junit,所以此项目依赖junit ->
	<dependency>
		<!- junit的项目名称->
		<groupld>junit</groupld>
		<!-junit的模块名称->
		<artifactld>junit</artifactld>
		<!- junit版本-->
		<version>4.9</version>
		<!--依赖范围:单元测试时使用junit ->
		<scope>test</scope>
	</dependency>
</dependecies>

●一个项 目生命周期(Project Lifecycle)
使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为-一个生命周期,如下所示是生命周期的各各阶段:
在这里插入图片描述
maven通过执行–些简单命令即可实现.上边生命周期的各各过程,比如执行mvncompile执行编译、执行mvn clean执行清理。
●一组标准集合
maven将整个项目管理过程定义–组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
●插件(plugin)目标(goal)
maven管理项目生命周期过程都是基于插件完成的。

12、项目构建
12.1 eclipse与maven
通过入门程序中命令行的方式使用maven工作效率不高,可以在eclipse开发工具中集成maven软件,eclipse 是一个开发工具,maven 是一个项目管理工具,maven有一套项目构建的规范。在eclipse集成maven软件,最终通过eclipse创建maven工程。
12.2 插件安装
在这里插入图片描述
12.3 指定maven安装目录
一些高版本的eclipse已经内置了maven的安装,下图是eclipsemars2版本中已经内置了maven3.3.3版本,项目为了统一maven的版本不会使用eclipse 内置的maven版本,这里我们maven3.3.9。
在这里插入图片描述
12.4 User Setting配置
在eclipse中配置使用的maven的setting.xml文件,使用maven安装目录下的setting.xml文件。
在这里插入图片描述
注意:如果修改了setting.xml文件需要点击上图的“updatesettings”按钮对本地仓库重邦建索引,点击“Reindex’。
12.5 eclipse浏览仓库
maven配置完成需要测试在eclipse中是否可以浏览maven的本地仓库,如果可以正常浏览maven本地仓库则说明eclipse集成maven已经完成。
打开eclipse仓库视图,对插件和jar包建立索引
在这里插入图片描述
找到Local respository本地仓库项,点击Rebuild index重建索引

在这里插入图片描述
12.6 定义maven坐标
每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义,比如:
入门程序的坐标定义如下:

<1--项目名称,定义为组织名+项目名,类似包名-->
<groupld>cn.itcast.maven</groupld>
<!-- 模块名称-->
<artifactld>maven-first</artifactld>
<!-当前项目版本号,snapshot 为快照版本即非正式版本,release 为正式发布版本-->
<version>0.0.1-SNAPSHOT</version>
<packaging> :打包类型
jar:执行package会打成jar包
war:执行package会打成war包
pom:用于maven工程的继承,通常父工程设置为pom

12.7 构建web工程
需求
创建-一个 web工程,实现入门程序的功能。
1)添加index.jsp,输出hello world
2)添加一个servlet转发到jsp页面。
第一步创建maven工程
选择Maven Project
在这里插入图片描述
在这里插入图片描述
了解一下骨架界面:
当我们不跳过骨架点击“next” 会进入骨架选择页面,如果eclipse 中配置本地仓库正确则显示出骨架:
在这里插入图片描述
选择webapp会创建-一个maven工程(javaweb工程)
选择quickstart会创建一- 个maven工程(java 工程)
注意:使用骨架的问题是创建的maven工程目录不完整,所以不推荐使用,本教程创建maven工程统-跳过骨架。
第二步定义坐标
在这里插入图片描述
在这里插入图片描述
查看上边工程的编译版本为1.5, 本教程使用jdk1.7, 需要设置编译版本为1.7,这里需要使用maven的插件来设置:
在pom.xml中加入:

<build>
	<plugins>
		<plugin>
		<groupld>org.apache.maven.plugins</groupld>
		<artifactld>maven-compiler-plugin</artifactld>
			<configuration>
				<source> 1.7</source>
				<target>1.7</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
	</ plugins>
</build>

执行update project,查看编译版本为1.7:
在这里插入图片描述
第四步定义web.xml
在src/webapp中添加WEB-INF/web.xml文件,内容为:
在这里插入图片描述
第五步编写servlet
在src/main/java中创建ServletTest
在这里插入图片描述
第六步编写jsp

在这里插入图片描述
在这里插入图片描述
第七步添加servlet/jsp的jar包
在这里插入图片描述
在maven工程中添加jar的方式是需要在pom.xml中添加servlet/jsp的坐标,maven自动从创建下载servlet/jsp的jar包
编辑pom.xml,如下:
在这里插入图片描述
第八步配置servlet

在这里插入图片描述
运行
cmd命令行进入工程目录,运行tomcat:run命令
eclipse~下 使用maven命令
在eclipse下测试命令
clean
compile
test
package
install
在这里插入图片描述
Run as采用mvn命令运行,Debug as采用mvn Debug命令调试方式运行(可打断点)
Maven clean清理target目录
Maven test执行单元测试
Maven install将工程打包后发布到本地仓库
Maven build使用之前操作过的命令
Maven build …手动输入命令内容,如下图:
在这里插入图片描述
■编译命令 mvn compile .
编译后.class 文件在target/classes 下(这个命 令只会对java源程序编译,不 会编译测试代码,编译测试类 mvn test-compile ,编译后.class文件在target\test-classes )
■测试命令mvn test执行所有测试用例方法,重新编译
■清除命令mvn clean清除target目录(清除所有编译结 果或者打包结果),清理后编译。
■打包命名mvn package :
java项目生成jar 包,
web项目生成war包,默认生成jar包名称: artifactld-version.jar
■安装命令.
安装命令mvn install将工 程打包后发布到本地仓库
—安装到仓库/groupld/artifactld/version目录
13、依赖管理-添加依赖
需求:实现web工程整合struts2框架。
添加依赖
dependency
在pom.xml中添加dependency标签,如下:

<dependency>
	<groupld><groupld>
	<artifactld></artifactld>
	<version></version>
</dependency>

在这里插入图片描述
查找坐标
添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下方式查询:
■方法一:从互联网搜索
http://search.maven.org/
http://mvnrepository.com/
网站搜索示例:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
方法二:使用maven插件的索引功能
如果在本地仓库有我们要的jar包,可以在pom.xml中邮件添加依赖
在这里插入图片描述
构建web工程
添加struts2依赖
编写web工程的pom.xml文件,添加依赖,如下:
在这里插入图片描述
依赖范围
基本概念
A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,
依赖范围包括:
compile: 编译范围,指A在编译时依赖B,此范围为默认依赖范围。编译范围的依赖
会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
provided: provided依赖只有在当JDK或者-一个容器已提供该依赖之后才使用,provided
依赖在编译和测试时需要,在运行时不需要,比如: servlet api被tomcat容器提供。
runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:
jdbc的驱动包。由于运行时需要所以runtime范围的依赖会被打包。
test:test范围依赖在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可
用,比如: junit。 由于运行时不需要所以test范围依赖不会被打包。
system: system 范围依赖与provided 类似,但是你必须显式的提供- -个对 于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system 依赖不推荐使用。
在这里插入图片描述
在maven-web工程中测试各各scop。
测试总结:
默认引入的jar包---- compile 默认范围可以不写
servlet-api、jsp-api ------provided (编译、 测试有效,运行时无效 防止和tomcat下jar冲突)
jdbc 驱动jar包— runtime (测试、 运行有效)
junit —test (测试有效)
依赖范围由强到弱的顺序是: compile>provided>runtime>test
7.4.2测试
1、向web工程添加jsp/servlet依赖
在这里插入图片描述
package打war观察jsp-api 和servlet-api是否在war中存在?
在这里插入图片描述
完整的pom.xml

根据需求web工程要实现整合struts2,完整的pom.xml如下:

<project xmIns= "http://maven. apache . org/POM/4.0.日"
xmIns:xsi= "http://www. w3. org/2001/XML Schema- ins tance”
xsi : schemaLocation= "http: //maven. apache . org/POM/4.0.0
http://maven. apache. org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn. itcast . maven</groupId>
<artifactId>maven-web-0120</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>web工程,包括isp、action等</name>
<description>web工程,包括jsp、 action等 </description>
<dependencies>
<!--添加junit4.9依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId> junit</artifactId>
<version>4.9</vers ion>
</dependency>
<dependency>
<groupId>mysq1</groupId>
<artifactId>mysql-connector- java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</ dependency>
<!-- servlet isp -->
<dependency>
<groupId>javax. . serv1et</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax. servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!--依赖struts2 -->
<dependency>
<groupId>org . apache . struts</ groupId>
<artifactId>struts2- core</artifactId>
<version>2.3.24</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org . apache . maven. plugins</ groupId>
<artifactId>maven- compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF- 8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

action类
编写action,实现查询客户信息:

public class customerAction extends ActionSupport {
private Long custId;
/**
* @return the custId
*/
public Long getCustId() {
return custId; 
/**
* @param custId
the custId to set
*/
public void setCustId(Long custId) {
this.custId = custId;
}
//查询客户信息
public String querycustomer() {
System . out . print1n( "客户请求客户Id: "+custId);
return "success";
}
}

struts.xml
在src/main/resources创建struts .xml

<?xml version= "1.0" encoding= "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts。apache . org/dtds/struts-2.3. dtd">
<struts>
<!--配置常量-->
<!--字符集-->
<constant name= "struts. i18n. encoding" value= "UTF-8*></ constant>
<!-- 开发模式-->
<constant name= "struts . devMode" value= "true "></constant>
<!--主题-->
<constant name= "struts . ui. theme”value= "S imple"></constant>
<!--扩展名-->
<constant name= "struts. action. extension" value= "action "></ constant>
<!-- 通用package -->
<package name= "cus tomer" namespace= "/" extends= "struts -default ">
<action name= "querycustomer" class= "cn. itcast . crm. action. Cus tomerAction"
method= "querycustomer">
<result name= "success">/isp/ querycustomer . jsp</result>
</action>
</package>
</struts>

web.xml
在web.xml中配置struts2的前端控制器

<?xml version="1. 日" encoding= "UTF-8"?>
<web-app xmlns :xsi= "http://www. w3. org/ 2001/XML Schema- ins tance "
xmlns= "http://java. sun. com/ xml/ns/javaee”
xmlns :web= "http://java. sun. com/xmL/ns/javaee/web-app_ 2_ 5. xsd"
xsi:schemaLocation= "http://java. sun. com/xmL/ns/javaee
http://java. sun. com/xml/ns/javaee/web-app_ .2_ .5. xsd"
id= "WebApp_ ID”version="2. 5">
<filter>
<filter-name>struts2</filter- name>
<filter-class>org. apache. struts2. dispatcher . ng. filter . StrutsPrepareAndExecuteFi
lter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter- name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file> index. html</welcome-file>
<welcome -file> index . htm< /welcome-file>
<welcome- file> index. jsp</welcome -file>
<welcome - file>default . html</welcome-file>
<welcome- file>default . htm< /welcome-file>
<welcome- file>default. jsp</welcome-file>
</welcome-file-list>
</web-app>

14 maven工程运行调试
tomcat插件
maven内置tomcat的插件( org.codehaus.mojo. tomcat-maven-plugin), 执行tomcat:run 命令即可启动tomcat
在这里插入图片描述
访问: http://localhost:8080/ 工程名/…
可以通过配置plugin修改tomcat的访问路径及端口:

<build>
<plugins>
<!-- maven内 置的tomcat6插件-->
<p1ugin>
<groupId>org. codehaus . mojo</groupId>
<artifactId>tomcat -maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<!-- 可以灵活配置工程路径-->
<path>/ssh</path>
<!-- 可以灵活配置端口号-->
<port> 8080</port>
</configuration>
</plugin>
</plugins>
</build>

14.1端口占用处理
重新执行tomcat:run命令重启工程,重启之前需手动停止tomcat, 否则报下边的错误:

Caused by: java .net. BindException: Address already in use: JVM_ Bind .

14.2断点调试
maven工程断点调试必须采用“DebugAs”方式启动,并且需要引入源码才可源码跟踪:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
15、坐标定义
在pom.xml中定义坐标,内容包括: groupld、 artifactld、 version, 详细内容如下:
<1–项目名称,定义为组织名+项目名,类似包名–>
cn.itcast.maven

0.0.1-SNAPSHOT
:打包类型
jar:执行package会打成jar包
war:执行package会打成war包
pom :用于maven工程的继承,通常父工程设置为pom
16、pom基本配置
pom.xml是Maven项目的核心配置文件,位于每个工程的根目录,基本配置如下:
:文件的根节点.
: pom.xml 使用的对象模型版本
:项目名称,一般写项目的域名
:模块名称,子项目名或模块名称
:产品的版本号.
:打包类型,一般有jar、 war、 pom等
:项目的显示名,常用于Maven 生成的文档。.
:项目描述,常用于Maven 生成的文档
:项目依赖构件配置,配置项目依赖构件的坐标
:项目构建配置,配置编译、运行插件等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值