huhui的专栏

本文描述了如何使用maven构建一个简单的Hello World项目

1.编写POM

Maven项目的核心是pom.xml(Project Object Model),pom定义了项目的基本信息,用于描述项目如何构建,,声明项目依赖等等。先为Hello World项目编写一个简单的pom.xml。

首先创建一个hello-world的文件夹,在该目录下新建一个名为pom.xml的文件,并输入以下内容:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="" xmlns:xsi="" xsi:schemaLocation=" http://maven.apache.org/xsd/maven-4.0.0.xsd"> hello-worldMaven Hello World Project</name> </project>

modelVersion指定当前pom模型的版本,对于Maven2及Maven3来说,它只能是4.0.0。这段xml代码中最重要的是groupId、artifactId和version三行。这三个元素定义了一个项目基本的坐标。

groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。如果你的公司是mycom,有一个项目叫myapp,那么groupId就应该是com.mycom.myapp。

artifactId定义了当前Maven项目在组中唯一的ID,我们为这个Hello World项目定义artifactId为hello-world。

version制定了项目当前版本——1.0SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定版本。

最后一个name元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的。

2.编写主代码

默认情况下,Maven假设项目主代码位于src/main/java目录,于是我们在hello-world文件夹下创建文件com/juvenxu/mvnbook/helloworld/HelloWorld.java,其内容如下:

package com.juvenxu.mvnbook.helloworld;public class HelloWorld{public String sayHello(){return "Hello Maven";}public static void main(String [] args){System.out.println(new HelloWorld().sayHello());}}

代码编写完毕后,使用Maven进行编译,在hello-world文件夹下运行命令mvn clean compile。经过Maven编译,所有输出都在targer目录中。

3.编写测试代码

Maven项目中默认的主代码目录是src/main/java,对应的,Maven项目中默认的测试代码目录是src/test/java。因此需要创建该目录。

在编写测试代码之前,首先需要为Hello World项目添加一个JUnit依赖,修改项目的pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="" xmlns:xsi="" xsi:schemaLocation=" http://maven.apache.org/xsd/maven-4.0.0.xsd"> hello-worldMaven Hello World Projectjunit4.7

代码中添加了dependencies元素,该元素下可以包含多个dependency元素以声明项目的依赖,这里添加了一个junit依赖。有了这段声明,Maven就能自动从中央仓库下载junit-4.7.jar。scope为依赖范围,值为test表明该依赖只对测试有效。也就是说,在测试代码中使用import junit代码没有问题,如果在主代码中使用import junit代码,则会造成编译错误。如果不声明依赖范围,默认为compile,表示该依赖对主代码和测试代码都有效。

配置了测试依赖,下面在src/test/java目录下创建测试类:

package com.juvenxu.mvnbook.helloworld;import static org.junit.Assert.assertEquals;import org.junit.Test;public class HelloWorldTest{@Testpublic void testSayHello(){HelloWorld helloWorld = new HelloWorld();String result = helloWorld.sayHello();assertEquals("Hello Maven", result);}}

编写完代码,使用mvn clean test命令执行测试,检查其返回值是否正确。

4.打包

在编译、测试之后,下一个重要步骤就是打包(package)。Hello World的pom中没有指定打包类型,默认的打包类型为jar。执行命令mvn clean package进行打包,在项目的target目录中将会生成一个名为hello-world-1.0-SNAPSHOT.jar的文件。至此,可以复制这个jar文件到其它项目的classpath中从而使用HelloWorld类。

5.依赖范围

上面提到,JUnit依赖的范围是test,实际上,Maven在编译项目主代码的时候使用一套classpath,在执行测试的时候会使用另一套classpath。依赖范围就是用来控制依赖与三种classpath(编译classpath、测试classpath、运行classpath)的关系,Maven有以下几种依赖范围: ①compile:编译依赖范围,如果没有指定,将默认使用该依赖范围,它对于编译、测试、运行三种classpath都有效。 ②test:测试依赖范围,只对于测试classpath有效,在编译主代码或者运行项目时将无法使用此类依赖。 ③provided:已提供依赖范围,对于编译和测试classpath有效,但在运行时无效。 ④runtime:运行时依赖范围,对于测试和运行classpath有效,但编译时无效。 ⑤system:系统依赖范围,对于编译和测试classpath有效,但在运行时无效。

下表表示了各种依赖范围与三种classpath的关系:

作用域编译时有效测试时有效运行时有效实例

compilespring-core.jar

test√junit.jar

runtime√√mysql-connector-java.jar

provided√√servlet-api.jar

system√√JDK的rt.jar

6.传递依赖

时间慢慢的流淌,人生有风雨阳光,

huhui的专栏

相关文章:

你感兴趣的文章:

标签云: