1、编写POM
Maven项目的核心是pom.xml,POM(Project Object Model项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等 。
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>com.test.maven</groupId>
<artifactId>maven-test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>TEST MAVEN</name>
</project>
modelVersion指定了当前POM模型的版本,对于Maven2和Maven3来说,它只能是4.0.0。
groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联,譬如在googlecode上建立了一个名为myapp的项目 ,那么groupId就应该是com.googlecode.myapp,如果你的公司是mycom,有一个项目是myapp,那么groupId就应该是com.mycom.myapp。
artifactId定义了当前Maven项目在组中唯一的ID。而在相同的groupId中可能会为不同的子项目分配不同的artifactId。
version指定了项目当前的版本——1.0.SNAPSHOT。
2、编写主代码
Maven约定,maven的主代码位于src/main/java下。
package com.test.maven.helloworld;
public class HelloWorld{
public String sayHello(){
return "Hello Maven";
}
public static void main(String []args){
System.out.println(new HelloWorld().sayHello());
}
}
Maven命令:
mvn clean:告诉Maven清理输出目录target/。target下存放的是项目主代码编译好的类Class。
mvn compile:告诉Maven编译项目主代码。
mvn clean compile:先清理会编译。
3、自动化测试
测试代码应该放在src/test/java下。
JUit是java的单元测试标准,要使用JUit,首先需要为HelloWorld项目 添加一个JUnit依赖,修改项目的POM如下所示:
<?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>com.test.maven</groupId>
<artifactId>maven-test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>TEST MAVEN</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
有了这个依赖,它会自动去访问中央仓库(http://repo1.maven.org/maven2),下载需要的文件。
scope标签表示以来范围,若依赖范围为test,则表示该依赖只对测试有效,也就是说测试代码中import JUit包是没有问题的,但是如果在主中用import Junit包,就会造成编译出错,如果不声明依赖范围,那么默认值是compile,表示该依赖对主代码和测试代码都有效。
现在测试HelloWorld中的sayHello方法,看是否是返回“Hello Maven”,在src/test/java中创建java:
package com.test.maven.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest
{
@Test
public void testSayHello(){
HelloWorld helloWorld = new HelloWorld();
String result = helloWorld.sayHello();
assertEquals("Hello Maven",result);
}
}
mvn clean test执行的任务有:clean:clean,resources:resources,compile:compile,resources:testResources以及compile:testCompile。
4、问题:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compile-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
5、maven打包和运行
mvn clean package:打包命令。
打包成功之后,就得到项目的jar文件,如果让其它的maven项目直接引用这个jar的话,还需要一个安装的步骤,执行mvn clean install: