Maven的初步使用
作者:luckystar
日期:
这里通过一个例子来说明如何使用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>节点定义工程中的依赖,一个
下面使用mvn compile命令来编译java源文件:
1.在cmd中将位置切换到F:\study\workspace\maven_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>
关键看
在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命令真是一个牛逼的命令。
出处:http://qincidong.github.io/blog/2013/11/23/maven-introduce.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。