1、什么是 pom ?
Project Object Model,项目对象模型
将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。可以说学习Maven就是学习pom.xml文件中的配置
通过xml格式保存的pom.xml文件
作用类似ant的build.xml文件,功能更强大
该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等
2、快速浏览 pom
一个完整的pom.xml文件,放置在项目的根目录下
<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>
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
3、pom 协作关系
<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>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
<packaging>war</packaging>
</project>
groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录
artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录
version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录
packaging : 打包的格式,可以为:pom、jar、maven-plugin、ejb、war、ear、rar、par
4、pom 依赖关系
依赖关系列表(dependency list)是POM的重要部分
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
...
</dependencies>
groupId , artifactId , version
scope : compile(default),provided,runtime,test,system
exclusions
5、如何查到依赖的类库?
一般可以通过这个网站
http://www.mvnrepository.com
比如查询hibernate,可以找到结果列表中的hibernate类库条目
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>
到pom.xml文件中即可
6、是否还需要找到hibernate依赖的pom?
不需要,hibernate也会有pom,maven会通过它的pom自动找到它依赖的类库。
7、继承关系
继承其他pom.xml配置的内容。
maven提供了一个类似java.lang.Object的顶级父pom.xml文件。
可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响
mvn help:effective-pom
创建一个各种项目可复用的pom.xml文件
http://easymorse.googlecode.com/svn/trunk/pom/pom.xml
部署要复用的pom.xml文件
mvn install
在自己的pom文件中继承上述pom
<parent>
<groupId>com.easymorse</groupId>
<artifactId>pom</artifactId>
<version>0.1</version>
</parent>
8、聚合关系
用于将多个maven项目聚合为一个大的项目
比如目录结构如下
|-- pom.xml
|-- module-a
-- pom.xml
|-- module-b
-- pom.xml
|-- module-c
-- pom.xml
|-- foo-all
-- pom.xml
那么总的pom.xml文件类似
<modules>
<module>module-a</module>
<module>module-b</module>
<module>module-c</module>
<module>foo-all</module>
</modules>
参考文档:http://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html
9、其他配置
maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。
有以下分类:
env.X
操作系统环境变量,比如${env.PATH}
project.x
pom文件中的属性
<project><version>1.0</version></project>
引用方式
${project.version}
settings.x
settings.xml文件中的属性
<settings><offline>false</offline></settings>
引用方式
${settings.offline}
Java System Properties
java.lang.System.getProperties()中的属性,比如java.home
引用方式:${java.home}
自定义
在pom文件中可 以
<properties><installDir>c:/apps/cargo-installs< /installDir></properties>
引用方式
${installDir}
10、设置离线
在.m2目录下创建settings.xml文件(如果没有的话)
<settings 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/xsd/settings-1.0.0.xsd">
<offline>true</offline>
</settings>
11、安装第三方包
经常有第三方包,因为一些原因,在网上repository上没有,需要自己动手安装
比如sun某些版本的jar文件,比如oracle的驱动
已oracle驱动程序为例,比如驱动路径为c:/driver/ojdbc14.jar,是10.2.0.3.0版本
在该网址能够查到:http://www.mvnrepository.com/artifact/com.oracle/ojdbc14 artifactId和groupId。
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=c:/driver/ojdbc14.jar
这样就可以在pom中依赖引用了
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
</dependency>
12、部署到tomcat
tomcat配置有管理权限的用户:conf\tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<user username="marshal" password="password" roles="manager"/>
</tomcat-users>
在pom文件的tomcat插件中添加
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<url>http://localhost:8080/manager</url>
<server>myserver</server>
<path>/mycontext</path>
</configuration>
</plugin>
在.m2/settings.xml文件中增加
<settings 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/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>myserver</id>
<username>marshal</username>
<password>password</password>
</server>
</servers>
</settings>
运行打包部署,在maven项目目录下
mvn tomcat:deploy
然后访问:http://localhost:8080/mycontext/ 即可。
撤销部署
mvn tomcat:undeploy
启动web应用
mvn tomcat:start
停止web应用
mvn tomcat:stop
重新部署
mvn tomcat:redeploy
部署展开的war文件
mvn war:exploded tomcat:exploded