maven还生成了一个重要的文件pom.xml,maven就是经过这个文件来来管理整个project,能够理解位相似于eclipse的.project文件。默认生成的pom.xml文件的内容以下:web
<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"> <!-- 这个XML文件所使用的POM格式的版本 --> <modelVersion>4.0.0</modelVersion> <!-- 表明组织和整个项目的惟一标志 --> <groupId>com.msc</groupId> <!-- 这个project最后所生成的文档(jar、war)的名字 --> <artifactId>first</artifactId> <!-- 这个项目的打包的类型 --> <packaging>war</packaging> <!-- 项目的版本 --> <version>0.0.1-SNAPSHOT</version> <!-- 项目的名字,生成文档等内容的时候会用的这个名字 --> <name>first Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>first</finalName> </build> </project>
以最终客户的角度来看,JAR文件就是一种封装,他们不须要知道jar文件中有多少个.class文件,每一个文件中的功能与做用,一样能够获得他们但愿的结果。除jar之外对于J2EE来讲还有war和ear。区别见下表:
apache
JAR | WAR | EAR | |
英文 | Java Archive file | Web Archive file | Enterprise Archive file |
包含内容 | class、properties文件,是文件封装的最小单元;包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)等 | Servlet、JSP页面、JSP标记库、JAR库文件、HTML/XML文档和其余公用资源文件,如图片、音频文件等 | 除了包含JAR、WAR之外,还包括EJB组件 |
部署文件 | application-client.xml | web.xml | application.xml |
容器 | 应用服务器(application servers) | 小型服务程序容器(servlet containers) | EJB容器(EJB containers) |
级别 | 小 | 中 | 大 |
archetype(原型)是一个Maven项目模板工具包。服务器
一个archetype指明了app
pom.xml文件的POM全称是Project Object Model,这个文件对于maven的使用者来讲是一个和maven交互的渠道,pom.xml包含了一个maven project的配置,一个project该如何编译打包,project有哪些依赖项等等。eclipse
仔细看一下咱们前面建立project的命令:mvn archetype:generate DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=myappmaven
使用方法:用命令行进入指定文件夹输入建立命令工具
1) archetype:generate, 这是一个maven的plugin,用来从一个archetype建立一个project,关于plugin后面再说。单元测试
2) DarchetypeGroupId,这个就是指的archetype的groupid,也就是说是用的哪一个archetype,或者说用哪一个项目模板。测试
3) 后面的两个参数,用来放大pom.xml文件里面,做为当前建立的project的描述信息。ui
Project建立好了,看如何去编译,直接进入的project的目录,在命令行下:
mvn compile
编译完后maven会建立一个target目录去保存编译结果。 咱们须要编译成一个什么样的内容,以及要输出到什么地方等等,都是能够在pom.xml文件里面配置的,可是由于咱们目前并无指定这些内容,因此maven会使用默认值。
咱们还能够用maven执行test:
mvn test
第一次执行时,maven会去下载一些依赖项。另外要注意的时,若是咱们更改了默认的目录结构,maven会由于找bu到test而没法去执行test。若是只须要编译test能够执行:
mvn test-compile
要把项目打包,执行:
mvn package
mvn会根据pom.xml里面的packaging选项打包成相应的文件。
maven里面有一个repository的概念,当咱们的项目依赖于某个jar时,maven会去repository里面去找。repository分两种,一种是远程的,一种是本地的。若是有几个project都用到junit,咱们能够把junit放在repository里面,几个project能够公用,节约存储空间并且方便管理,这个repository的位置能够在pom.xml里面设置。
本地的默认的路径是安装用户的目录下的 .m2\repository 文件夹。若是一个依赖项在本地的repository里面没有,那么maven会去他本身的远程的repository http://repo.maven.apache.org/maven2 去下载后放到本地的repository里面。
也就是说,咱们若是咱们的project须要要引用一个依赖项,咱们只须要在pom.xml文件中进行配置,maven会自动帮咱们去引用。 咱们以前的建立project里面须要写单元测试,引用到了junit,看pom中的配置:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
每个须要为每个 dependency 指明groupId,artifactId,version。scope很简单,意思是说咱们须要怎么引用,好比咱们上面的例子里面设置的是test,意思是说只在test里面引用junit。 可是咱们如何知道groupId,artifactId和version呢? 好比我如今想引用log4j,这个几个值怎么填? 能够去http://mirrors.ibiblio.org/maven2/ 上去查找。好比log4j,咱们就在上面这个地址加上log4j,也就是http://mirrors.ibiblio.org/maven2/junit/。进去后会有一个maven-metadata.xml,打开就能够知道这些值了而后添加这个dependency了。
若是要把一个project安装到本地的repository里面,能够执行下面的命令:
mvn install
到这里就说完了建立,编译,测试,打包以及安装,大部分的项目也就是作这些事情。
再介绍几个其它命令: