project是pom的根元素,虽然不是必须的,但使用这些属性可以让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑pom。
根元素下的第一个元素modelVersion指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0.
groupId定义了项目属于哪个,这个组往往和项目所在的组织或公司存在关联。譬如在googlecode上建立一个myapp的项目,那么groupId应该是com.googlecode.myapp..
artifactId定义了当前Maven项目在组中唯一的ID,我们为这个Hello World项目定义artifactId为hello-world。
version指定了Hello World项目当前的版本——1.0-SNAPSHOT。
maven中引入JUnit如下:
这些jar包我们都可以去maven的官方地址:http://repo1.maven.org/maven2/中找到。
一般我们创建项目,根目录存放pom.xml,主项目路径都是src/main/java,非java代码(资源文件)放到java/main/resources中,测试路径都是src/test/java,后面包名可以在groupId的基础上继续添加。
之后我们可以执行maven clean test打包,但是会报错:
因为在maven clean test中还执行了clean:clean,resources:resources,compiler:compile,resources:testResources以及compiler:testCompile。
在构将compiler:testCompile的时候失败了,Maven提示我们要使用-source 5或更高版本来启动注释,就是JUnit4的@Test注解。我们只要配置该插件让其支持1.5就可以了,如下:
r如果此时我们使用maven clean package打包的时候,打的包是无法运行main方法的(打开jar文件中的META-INF/MANIFEST.MF文件),将无法看到Main-class一行。为了生成可执行的jar文件,需要借助maven-shade-plugin,配置如下:
plugin元素在<project><build><plugins>下面。
此时我们在通过maven clean package打包,会看到jar文件中的META-INF/MANIFEST.MF文件中包含了这样一行信息:
Main-class:com.juvenxu.mvnbook.helloworld.HelloWorld
后面就可以这样执行该jar文件:java -jar hello-world.jar.
在<version>标签的后面我们还能再加一个<packaging>jar<packaging>标签,该标签定义了打包的方式,可以是jar包或者war包。
下面一节,我们将一起介绍maven的依赖特性,这个是maven的难点之一。