Maven的初步使用

这里通过一个例子来说明如何使用Maven。

我的工作空间是F:/study/workspace。

在工作空间下新建工程maven_ch01,目录结构如下:

maven_ch01

-------------src

-----------------main

------------------------java

-----------------test

------------------------java

-------------pom.xml

这种结构式Maven推荐的工程结构。

在maven_ch01/src/main/java下新建Java文件HelloMaven.java,文件在包com.purple_river.itat.maven下。

就一个简单的sayHello方法,如下:

package com.purple_river.itat.maven;

public class HelloMaven {
	public String sayHello(String name) {
		return "Hello:" + name;
	}
}

 在src/test/java下建立与src/main/java下相同的包com.purple_river.iata.maven,并新建TestHelloMaven.java。

代码如下:

package com.purple_river.itat.maven;

import org.junit.*;
import static org.junit.Assert.*;

public class TestHelloMaven {
	
	@Test
	public void testSayHello() {
		HelloMaven hm = new HelloMaven();
		String result = hm.sayHello("maven");
		assertEquals(result,"Hello:maven");
	}
}

 如你所见,这个测试类中有一个测试方法,就是测试我们在src/main/java下新建的HelloMaven类的sayHello方法。

可能你也发现了,测试类TestHelloMaven是需要junit.jar的,但是我们的工程中病没有,那么我们怎么运行呢?

刚刚忘了说pom.xml文件的内容,pom.xml文件的内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="htp://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>com.purple_river.itat.maven</groupId>
	<artifactId>maven_ch01</artifactId>
	<version>0.0.1-SWAPSHOT</version>
	
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>	
			<version>4.8</version>
		</dependency>
	</dependencies>
</project>	

 pom.xml文件基本节点介绍:
<project>:文件的根节点.
<modelversion>:pom.xml使用的对象模型版本.
<groupId>:创建项目的组织或团体的唯一Id.
<artifactId>:项目的唯一Id,可视为项目名.
<packaging>:打包物的扩展名,一般有JAR,WAR,EAR等
<version>:产品的版本号.
<name>:项目的显示名,常用于Maven生成的文档。
<url>:组织的站点,常用于Maven生成的文档。
<description>:项目的描述,常用于Maven生成的文档。

<dependencies>节点定义工程中的依赖,一个<dependency>标签定义一个依赖,比如上面的<dependecies>节点定义我们工程使用了junit,使用的junit版本是4.8。

下面使用mvn compile命令来编译java源文件:

1.在cmd中将位置切换到F:studyworkspacemaven_ch01>;

2.输入mvn compile命令;

看到没有?maven会自动下载它所需的依赖文件,最后看到BUILD SUCCESS。

回到工程maven_ch01下,会发现生成了一个target目录。如下:

可以看到已经变异了HelloMaven类。

到我们自定义的本地仓库看看,Maven所需的文件都下载在这里,如图:

我们工程所需的junit也下载在这里

Ok,咱们在编译一次看看Maven还会不会从网络下载所依赖的文件呢

看到没有,这次Maven并没有从网络下载依赖的文件了吧!只有在第一次编译的时候才会下载它依赖的文件,下载到本地后再次运行就会使用本地仓库中的依赖文件。

使用mvn test命令还运行单元测试。如图:

此时target目录中多生成了3个目录,如下图:

test-classes:存放编译的测试类

surefire-reports:存放测试报告。包括成功的和失败的详细信息。

将测试类修改一下:

package com.purple_river.itat.maven;

import org.junit.*;
import static org.junit.Assert.*;

public class TestHelloMaven {
	
	@Test
	public void testSayHello() {
		HelloMaven hm = new HelloMaven();
		String result = hm.sayHello("maven");
		assertEquals(result,"Hello:maven1");
	}
}

 将assertEquals(result,"Hello:maven")改成了assertEquals(result,"Hello:maven1"),那么运行测试是会失败的。

重新只需mvn test命令来执行测试:

首先呢,命令行中显示运行的结果是失败的。我们到测试报告中看看。

看到没有,maven记录了详细的错误信息。

使用mvn package命令打包。

如图:

在target目录中生成了maven_ch01_0.0.1_SWAPSHOT.jar,如图:

在实际开发中,可能是分模块开发,那每个模块之间的依赖呢?

新建工程maven_ch02,与maven_ch01下有一个HelloMaven02.java文件,

代码如下:

package com.purple_river.itat.maven;

public class HelloMaven02 {
	public static void main(String[] args) {
		HelloMaven hm = new HelloMaven();
		String str = hm.sayHello("maven");
		System.out.println(str);
	}
}

 这个文件中要使用maven_ch01中的HelloMaven类,那怎么使用maven来管理依赖呢?

maven_ch02下的pom.xml文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="htp://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>com.purple_river.itat.maven</groupId>
	<artifactId>maven_ch02</artifactId>
	<version>0.0.1-SWAPSHOT</version>
	
	<dependencies>
		<dependency>
			<groupId>com.purple_river.itat.maven</groupId>
			<artifactId>maven_ch01</artifactId>	
			<version>0.0.1-SWAPSHOT</version>
		</dependency>
	</dependencies>
</project>	

 关键看<dependencies/>标签,这里定义的就是对maven_ch01的依赖。groupId,artifactId,version都是在maven_ch01中的pom.xml中定义的。

在cmd中切换到maven_ch02,执行mvn compile命令,如图:

看到上面的Downloading:http://repo.maven.apache.org/maven2/com/purple_river/itat/maven/maven_ch01/0.0.1_SWAPSHOT/maven_ch01-0.0.1-SWAPSHOT.pom和Downloading:http://repo.maven.apache.org/maven2/com/purple_river/itat/maven/maven_ch01/0.0.1_SWAPSHOT/maven_ch01-0.0.1-SWAPSHOT.jar这2行了吗?因为我们在maven_ch02的pom.xml中定义了对maven_ch01的依赖,那么在执行命令时maven会从仓库去找依赖的文件,但是很显然我们的本地仓库中是没有maven_ch01-0.0.1-SWAPSHOT.pom和maven_ch01-0.0.1-SWAPSHOT.jar的,所以最后构建就失败了。

那应该怎么做才能让maven_ch02编译成功呢?

切换到maven_ch01,然后执行maven install命令,如图:

到我们的本地仓库,你会发现maven已经帮我们生成了maven_ch01-0.0.1-SWAPSHOT.jar和maven_ch01-0.0.01-SWAPSHOP.jar,如图:

Ok,再次切换到maven_ch02,并执行mvn compile命令,如图:

看到没有,这次就编译成功了。

maven的install命令真是一个牛逼的命令。

原文地址:https://www.cnblogs.com/luckystar2010/p/3439119.html