Maven是目前用的最多的一个项目管理工具,它是Apache的一个开源工具。
下载最新的Maven组件可以到Apache的Maven官网下载:maven.apache.org。左侧找到Download选项下载最新的Maven包。
第一步,我们先下载Maven和配置环境变量
我们下载apache-maven-3.3.1-bin.zip这个版本,下载之后发现只有7.79M
如何安装呢?很简单,我们将安装目录设在D盘下,先把apache-maven-3.3.1-bin.zip压缩包拷贝到D盘下,然后解压(压缩包可删除可不删除)。
之后将我们的maven的安装路径拷贝到环境变量中:
新建一个M2_HOME,将Maven安装路径拷贝到下面
D:\apache-maven-3.3.1-bin\apache-maven-3.3.1
然后把maven文件夹的bin路径放置在path的变量值下:
我们现在就把Maven安装好了。我们启动控制台,使用命令提示符来操作Maven:
我们使用mvn -v指令就可以观察我们安装的maven的版本信息:
可以看到我们的maven版本信息,jdk版本,windows版本。
第二步,我们创建maven工程文件夹和pom配置文件:
我们现在自己平常使用的工作盘创建一个Maven工程文件夹(名为maven-mm01),然后创建一个名为pom.xml的XML文件:
我们写一下XML的标准头:
<?xml version="1.0" encoding="UTF-8"?>
然后加入Maven的文件头:
<?xml version="1.0" encoding="UTF-8"?> <project 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> </project>
xmlns与xsi什么的都是Schema文件,是用来约束XML的写法的(这点在XML中有详细阐述)
接下来我们在<project></project>标签对中写maven配置的常用标签:
1.<groupId>…</groupId>
一般写组织名称,团体名称,项目名称
2.<artifactId>…</artifactId>
表示这一个项目的某一个具体模块
3.<version>…</version>
项目的版本
所以我们首先创建了这样一个pom文件:
<?xml encoding="utf-8"?> <project 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu.hpu.maven</groupId> <artifactId>maven-mm01</artifactId> <version>0.0.1-SNAPSHOP</version> </project>
第三步,我们按照Maven的格式将maven文件夹完善:
在我们之前pom.xml所在的maven-mm01文件夹下创建一个src目录,用于存放源代码,然后我们创建两个文件夹main和test,然后我们在main文件夹中创建java文件夹,之后在其中创建一个HelloMaven.java文件,内容如下:
package cn.edu.hpu.maven; public class HelloMaven { public String sayHello(String name){ return "hello:"+name; } }
然后创建cn/edu/hpu/maven文件夹,将HeloMaven.java文件放进去(要符合package的路径)
接下来我们在控制台中进入这个路径:
然后我们输入maven compile指令去编译Maven工程:
可以看到屏幕在不停的滚动,这是因为maven仅仅只是一个很小的工具,但是我们在操作的时候,它会根据我们的需求,从网络中下载它所需要的一些依赖、插件。下载完之后它会存在开发者电脑的某一个位置中。
看到这里我们就编译成功了maven
我们回到我们的maven-mm01文件夹中,发现我们多了一个target文件夹,里面有一个编译好的classes文件夹,里面有编译好的我们的HelloMaven.class。
按照这样的结构我们将类写完,它就会自动将这个类通过pom.xml配置文件的规范将其编译。
接下来我们继续在test中写,我们在test中创建一个java文件夹,里面创建cn/edu/hpu/maven文件夹,其中写一个TestHelloMaven.java文件:
package cn.edu.hpu.maven; import org.junit.*; import static org.junit.Assert.*; public class TestHelloMaven { public void testSayHello(){ HelloMaven hm=new HelloMaven(); String str=hm.sayHello("maven"); assertEquals(str,"hello:maven"); } }
其中assertEquals(str,"hello:maven");方法是junit4的断言方法,测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法),assertEquals断言两个对象相等,若不满足,方法抛出带有相应信息的错误。
我们可以看到,我们使用了junit的包,如果直接编译TestHelloMaven.java的话会报错:
说明我们导入的junit根本不知道这个包在哪(原来我们的jdk是有环境变量的,所以能够找到)
所以就要用到我们maven的特性了,我们在pom加入以下配置(junit的):
<?xml version="1.0" encoding="UTF-8"?> <project 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu.hpu.maven</groupId> <artifactId>maven-mm01</artifactId> <version>0.0.1-SNAPSHOP</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies> </project>
我们再次进行编译:
发现不再报错!我们运行的测试结果也没有错误。
我们没有引入任何的jar包,没有将jar包导入classpath中,但是我们用maven的pom.xml中加入以上配置,就神奇的将我们的jar包放入到了classpath中。也利用这个jar包有效的将我们的代码编译。
这就是maven给我们的最直观的好处。我们只要把我们的项目放到maven要求的目录中,它就会自动根据pom文件来对我们的项目进行编译、测试、发布等操作。
有了maven,我们的一些繁琐的工作可以用maven全部自动完成。假设我们项目组使用了svn、github等版本控制工具,新来的员工从版本控制器上下载完工程之后,想让项目在自己的机器上跑起来,还需要配置tomcat服务器等乱七八糟的东西,但是有了maven,我们将项目从版本控制器上下载下来之后,它就会将项目自动打包发布到tomcat上,一切过程全部省去,这就是自动化的构建工具。
刚才我们使用了两个命令:
mvn compile自动编译指令,编译成功之后,会将我们的编译文件放在target/classes中。
mvn test自动测试指令,会生成3个测试报告,放在surefire-reports文件夹下,通过测试报告可以看到我们的测试结果。
我们还有一个命令,mvn clean,会将我们之前的编译状态清空,删除target文件夹。
另外一个命令,mvn package,它会将我们的工程编译、测试,然后运行package,最后它会将我们的项目打包成jar包:
我们创建第二个测试项目,将原来的项目直接拷过来,改一下名字为maven-mm02,然后修改一下pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <project 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu.hpu.maven</groupId> <artifactId>maven-mm02</artifactId> <version>0.0.1-SNAPSHOP</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> </project>
我们的源代码在src中,我们的测试代码在test中,java文件在java文件夹中(这里是规范,不然maven无法自动编译)。
我们在main中创建一个java文件夹,里面创建cn/edu/hpu/maven/mm02文件夹,其中写一个Hello.java文件:
package cn.edu.hpu.maven.mm02; import cn.edu.hpu.maven.HelloMaven; public class Hello { public String say(String name){ HelloMaven hm = new HelloMaven(); return hm.sayHello(name); } }
我们用指令mvn compile来编译这个java文件,发现找不到HelloMaven这个类:
我们就又要发挥我们的pom.xml的作用了,我们在dependencies中加入<groupId>cn.edu.hpu.maven</groupId>:
<?xml version="1.0" encoding="UTF-8"?> <project 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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu.hpu.maven</groupId> <artifactId>maven-mm02</artifactId> <version>0.0.1-SNAPSHOP</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>cn.edu.hpu.maven</groupId> <artifactId>maven-mm01</artifactId> <version>0.0.1-SNAPSHOP</version> </dependency> </dependencies> </project>
我们执行mvn compile,发现它报找不到jar包的错误:
原因是缺少maven-mm01工程的jar包,那么我们就把这个jar包引入。这时,我们回到maven-mm01项目,在其上运行mvn install指令:
安装完成之后,我们回到maven-mm02,这个时候其实jar包已经安装进来了(原因和仓库有关,这个jar包是mm01工程上传至仓库,然后mm02从仓库中取得mm01的jar包。关于仓库后面会有解释):
就是maven-mm01-0.0.1-SNAPSHOP.jar
运行mvn compile指令:
发现通过了!
而且已经编译成功:
我们同样只是在pom中写了上述的配置,就有效的完成了Hello的编译。这就是maven给我们的最大的帮助,我们可以把项目分成各个模块,我们把上个模块做好,将来各个项目需要这个模块的时候,在pom.xml中将这个模块引进进来,就可以直接用了。这是一个很好的醒目管理理念。
可以看到我们的大部分项目的模块都是重复的,我们使用maven就不用引入jar包,编译测试发布都不用我们操心。
对于maven,我们的这些操作都放在什么地方呢?我们的maven的这些jar包都是从哪里引进过来的呢?下面就引入了一个核心的概念,就是“仓库”。
我们下载下来的maven只是一个几M的工具,当我们用的时候,它就会去“仓库”中去寻找我们所需要的jar文件和仓库文件。当我们安装好maven后,“仓库”就会默认安装在windows系统(我用的是Win7)的C:/Users/${user.home}/.m2/repository路径中:
我们打开repository文件夹,发现我们之前在pom中配置的依赖jar包和插件全部都在这里:
其实我们可以通过maven安装文件中conf文件夹下的settings.xml来配置本地仓库:
<localRepository>/path/to/local/repo</localRepository>
当我们执行mvn compile指令的时候,它就会根据pom文件的dependencies来找到我们可能依赖的jar包,它发现如果这个jar包存在,它就会在仓库中将这个jar包引入至我们的工程,如果没有该jar包,maven就直接从网络中下载下来(下载都是在mvnrespitory.com这个网络中央仓库中取得)。
我们刚刚的mvn install指令,就会将我们的工程打包成jar包放入我们的“仓库”中。
我们下次来说一下安装maven的一些注意事项。
转载请注明出处:http://blog.csdn.net/acmman/article/details/50612410