Maven入门教程
1.1.介绍、环境配置
1.1.1.Maven介绍
Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理.而Maven本身还支持多种插件,可以方便更灵活的控制项目,开发人员的主要任务应该是关注商业逻辑并去实现它,而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。Maven正是为了将开发人员从这些任务中解脱出来而诞生的
1.1.2.Maven能够做什么
lJar的声明式依赖性管理
l项目自动构建
1.1.3.环境配置
lhttp://maven.apache.org/download.html下载最新版本Maven3.0.2(Binaryzip)
l解压到D(本身就是绿色版不需要安装):
l配置环境变量(配置之前,必须确定配置了JDK环境变量)
MAVEN_HOME : D:\apache-maven-3.0.2
把此命令添加到Path中:%MAVEN_HOME%\bin\
l配置用户范围的settings.xml
MAVEN_HOME/conf/settings.xml全局的
~/.m2/settings.xml单个用户的
l验证安装是否成功
在命令行上输入: mvn
-version;回车,如看到下面信息表示安装成功
1.1.4.Maven目录分析
lbin:含有mvn运行的脚本
lboot:含有plexus-classworlds类加载器框架
lconf:含有settings.xml配置文件
llib:含有Maven运行时所需要的java类库
lSettings.xml中默认的用户库:
${user.home}/.m2/repository[A1]
lMaven默认仓库下载地址在: maven的lib目录下maven-model-builder-3.0.4.jar的pom.xml中
1.2.第一个Maven演示
1.2.1.创建目录结构
Convention Over
Configuration (约定优于配置)。在现实生活中,有很多常识性的东西,地球人都知道。比如说:如何过马路(红灯停绿灯行),如何开门,关门等。对于这些事情,人们已经有了默认的约定,在软件开发过程中,道理也是类似的,如果我们事先约定好所有项目的目录结构,标准开发过程(编译,测试) ,所有人都遵循这个约定。软件项目的管理就会变得简单很多。在现在流行的很多框架中,都使用了这个概念
Hello
--src
-----main
----------java--用来存放Java文件
----------resources--用来存放资源文件
-----test
---------java--用来存放测试的Java文件
---------resources
--target--项目输出位置,编译完毕后自动生成
--pom.xml--项目对象模型的描述,它是maven配置的核心
1.2.2.建立pom.xml
"http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
cn.itcast.maven
Hello
0.0.1-SNAPSHOT
junit
junit
4.9
test
pom.xml文件是maven对一个项目的核心配置,这个文件将包含你希望如何构建项目的大多数配置信息。POM大而复杂,但你不用全部去了解,只要使用一些常用的配置就可以了
1.2.3.创建Java类与测试类
l在src/main/java/cn/itcast/maven目录下新建文件Hello.java
packagecn.itcast.maven;
publicclassHello {
publicString sayHello(String
name){
return"Hello "+name+"!";
}
}
l在/src/test/java/cn/itcast/maven目录下新建测试文件HelloTest.java
package cn.itcast.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
@Test
public void testHello(){
Hello hello = new Hello();
String results = hello.sayHello("litingwei");
assertEquals("Hello litingwei!",results);
}
}
1.2.4.命令测试
打开cmd命令行,进入Hello项目根目录执行mvn compile命令,查看根目录变化
cmd中继续录入mvn clean命令,然后再次查看根目录变化
cmd中录入mvn clean compile命令,查看根目录变化
cmd中录入mvn clean test命令,查看根目录变化
cmd中录入mvn clean package命令,查看根目录变化
1.3.Maven核心概念
1.3.1.Maven插件
Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的每个插件都能实现多个功能,每个功能就是一个插件目标
Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务, Maven的插件在:.m2\repository\org\apache\maven\plugins
1.3.2.Maven坐标
类似在平面几何中坐标(x,y)可以标识平面中唯一的一点,
Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
拥有了统一规范,就可以把查找工作交给机器
lgroupId:定义当前Maven项目隶属项目(实际对应JAVA的包的结构,是main目录里java的目录结构)
lartifactId:定义实际项目中的一个模块(项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称)
lversion:定义当前项目的当前版本
1.3.3.Maven仓库
l何为Maven仓库:用来统一存储所有Maven共享构建的位置就是仓库
lMaven配置jar包的路径为:groupId/artifactId/version/artifactId-version
l本地仓库(~/.m2/repository/):每个用户只有一个本地仓库
l中央仓库(Maven默认的远程仓库):Maven默认的远程仓库下载地址为:http://repo1.maven.org/maven2
l私服:是一种特殊的远程仓库,它是架设在局域网内的仓库,主要是为了团队协作开发
l镜像:用来替代中央仓库,速度一般比中央仓库快
1.3.4.生命周期
1.4.第二个Maven演示
1.4.1.HelloFriend目录结构
HelloFriend
--src
-----main
----------java
----------resources
-----test
---------java
---------resources
--pom.xml
1.4.2.建立Pom.xml
xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
cn.itcast.maven
HelloFriend
1.0.0
jar
junit
junit
4.9
test
cn.itcast.maven
Hello
1.0.0
compile
1.4.3.创建Java类与测试类
l在src/main/java/cn/itcast/maven目录下新建文件HelloFriend.java
packagecn.itcast.maven;
publicclassHelloFriend{
publicString sayHello(String
name){
return"Hello "+name+"!";
}
}
l在/src/test/java/cn/itcast/maven目录下新建测试文件HelloFriendTest.java
packagecn.itcast.maven;
importorg.junit.Test;
importcn.itcast.maven.Hello;
publicclassHelloFriendTest{
@Test
publicvoidtesHelloFriend(){
HelloFriendhelloFriend =newHelloFriend();
String results = helloFriend.sayHelloToFriend("litingwei");
System.out.println(results);
}
}
1.4.4.命令测试
l在HelloFriend目录下执行mvn clean mvn compile mvn test都正常
l在HelloFriend目录下执行命令mvn
package系统报错说没有找到依赖,因为HelloFriend依赖Hello模块,但是此模块在个人仓库和中央仓库中并不存在
l需要重新构建Hello第一个项目并安装到数据仓库,在Hello根目录下执行mvn clean install,就会部署的中央仓库中
1.5.Maven与Eclipse整合
1.5.1.配置maven插件
1.5.2.user settings
1.6.Maven部署到Tomcat中
1.6.1.创建Java项目
l在MyEclipse创建项目的时候选择Maven Project
l在构件向导的时候选择quickstart注意,此向导也是插件,第一次使用的时候.也要从远程仓库中下载相应的jar包,因此需要网络环境
l设置当前模块的坐标,和相应的版本号
l创建完毕后默认生成的项目包目录如下
l通过在pom.xml中配置相应Hello.jar即可
"http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
Hello3
Hello3
0.0.1-SNAPSHOT
jar
Hello3
http://maven.apache.org
UTF-8
junit
junit
4.9
test
cn.itcast.maven
Hello
0.0.1-SNAPSHOT
compile
l通过在pom.xml中单击右键选择相应的命令即可
1.6.2.创建Web项目
l选择创建一个普通的web工程
l设置相应的坐标
l如果采用src缺省的包结构,则pom.xm中需要指定编译和调试的目录.
xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
web
web
0.0.1-SNAPSHOT
war
UTF-8
1.2
1.6
javax.servlet
jstl
${jstl.version}
provided
javax.servlet.jsp
jsp-api
2.1
provided
cn.itcast.maven
Hello
0.0.1-SNAPSHOT
compile
${basedir}/src
${basedir}/WebRoot/WEB-INF/classes
${basedir}/src
**/*.java
maven-war-plugin
${basedir}/WebRoot
${basedir}/WebRoot
maven-compiler-plugin
${compiler.version}
${compiler.version}
l在index.jsp页面中添加如下代码
<%//要导入相应: cn.itcast.maven.*
Hello hello=newHello();
out.println(hello.sayHello("admin"));
%>
通过maven下载的jar包都会存储到指定的个人仓库中