导言:从helloworld起步,所有关于maven的使用我们先让它在电脑上跑起来,先把理论放一放。不过在本博文中会穿插一些官方的参考文档,官文上会有很详细的说明
1.下载,安装,直接解压
官网地址:http://maven.apache.org/download.cgi
开源软件的目录结构很重要,最好每个打开看一看,这里不做详细介绍
2.配置环境变量
M2_HOME = [maven所在的系统路径] (D:\SoftWare\apache-maven\apache-maven-3.3.9) 本机地址
PATH = %M2_HOME%/bin
3.测试安装和环境变量配置是否成功
在命令提示符窗口下输入
mvn –version
会显示如下信息,表示安装和配置都成功,即可以开始进行下一步操作了
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: D:\SoftWare\apache-maven\apache-maven-3.3.9
Java version: 1.8.0_31, vendor: Oracle Corporation
Java home: C:\Java\jdk1.8.0_31\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "dos"
4. maven使用前必须保证本机有java的运行环境
如以上信息 Java home: C:\Java\jdk1.8.0_31\jre
5.手动构建maven项目
1.在本机的D:\Test\MavenTest目录下新建一个文件夹maven-ch01 ,这个maven-ch01表示我们的项目文件夹。
2.在maven-ch01文件夹下新建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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.model.maven</groupId>
<artifactId>maven-ch01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>
什么是POM?—–POM的官方参考
POM Reference
3.新建HelloMaven.java在 以下目录中
D:\Test\MavenTest\maven-ch01\src\main\java\com\model\maven
\src\main\java (maven识别的固定格式)
\com\model\maven (可以理解为包名)
package com.model.maven;
public class HelloMaven{
public String sayHello(String name){
return "hello "+name;
}
}
4.打开命令提示符窗口 切到D:\Test\MavenTest\maven-ch01>
输入maven命令
mvn clean compile
看到[INFO]BUILD SUCCESS 表示编译成功
看到[INFO]BUILD FAILTUTE 失败,检查pom.xml,项目的文件结构或者java文件是否正确。
这时你会发现maven-ch01项目下多了一个target文件夹。这里面存有编译后的class文件
到此maven第一项目例子就搭建成功
5.对HelloMaven进行测试
i.在D:\Test\MavenTest\maven-ch01\src\test\java\com\model\maven
新建TestHelloMaven.java
\src\test\java 固定写法
\com\model\maven 包名
package com.model.maven;
import org.junit.*;
import static org.junit.Assert.*;
public class TestHelloMaven{
@Test
public void testSayHello(){
HelloMaven hm = new HelloMaven();
String str = hm.sayHello("maven");
assertEquals(str,"hello:maven");
}
}
ii.打开命令提示符窗口 切到D:\Test\MavenTest\maven-ch01>
输入maven命令
mvn clean test
测试失败
原因:你没有导入org.junit包,当然无法正常运行
解决办法:用maven导包
iii.修改你的pom.xml配置文件。新加dependencies标签
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.model.maven</groupId>
<artifactId>maven-ch01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
iv.再次输入maven命令
mvn clean test
会到 Apache的Maven仓库中 download 你所需要的jar文件,然后放入本地上。默认存放路径 C:\Users\lenovo\.m2\repository (lenovo是用户名) 可以手动指定存放位置。
v.命令窗口中看到 [INFO]BUILD SUCCESS 表示测试成功
vi.看到这里你应该感觉到了maven的用处之一了,jar包的集中管理。通过pom.xml可以从本地仓库(C:\Users\lenovo\.m2\repository)中引用你所需要的各种jar。(本地仓库中没有会先从网上load,不过因为是外网下载速度很慢)。所有pom.xml的配置尤为关键。
6.手动打包maven项目到本地仓库
1.打开命令提示符窗口
转到D:\Test\MavenTest\maven-ch01-> mvn clean package
打包后的jar文件在 \maven-ch01\target 目录下
jar文件的命令规则是根据pom.xml生成的。
[artifactId]-[version].jar
观察jar文件,你会发现测试类并未打包进去,这是因为你在pom.xml中设置了依赖范围scope
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
scope:
compile(编译范围)
compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范
围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
provided(已提供范围)
provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果
你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编
译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个
Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在
编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
runtime(运行时范围)
runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你
可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实
现。
test(测试范围)
test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运
行阶段可用。
system(系统范围)
system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中
JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库
的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。。如
果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注
意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用
依赖)。
2.打包完成后 ,将jar包放入到本地仓库
在命令提示窗口
转到 D:\Test\MavenTest\maven-ch01->mvn clean install
命令窗口中看到 [INFO]BUILD SUCCESS 表示install成功
到本地仓库(C:\Users\lenovo.m2\repository)中去寻找我们的jar
可以从目录结构中看到,目录结构生成规则也是依赖pom.xml
[groupId] \[artifactId]\[version]\xxx.jar
这样你就可以在其他的项目中使用这个jar文件只需要在pom.xml中配置
<dependencies>
<dependency>
<groupId>com.model.maven</groupId>
<artifactId>maven-ch01</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
补充
关于maven的详细学习,可以参考以下网站
Maven Tutorial
Maven in 5 Minutes
Maven Users Centre