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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId>account-email</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>account-email</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
-
代码的第一行是XML头,指明了xml文档的版本和编码方式。
-
project是所有pom.xml的根元素
-
modelVersion:指明了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0
-
groupId:定义当前Maven项目隶属的实际项目,定义项目属于那个组,通常与域名反向一一对应
-
artifactId:该元素定义实际项目中的一个maven模块,当前项目在组中的唯一一个Id
-
version:该元素定义Maven项目当前所处的版本
-
packaging:该元素定义Maven项目的打包方式
-
name:该元素声明了一个对于用户更为友好的项目名称。
-
scope:该元素指定依赖的范围,默认是compile,表示该依赖对主代码和测试代码都有效。
-
maven默认的中央仓库地址:http://repo1.maven.org/maven2/ ,可以点击直接访问。
-
常见的还有 (http://download.java.net/maven/2/)
扫描二维码关注公众号,回复: 4755062 查看本文章 -
JBoss Maven库(http://repository.jboss.com/maven2/)
配置POM使用远程仓库
<project>
...
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2</url>
<release>
<enabled>true</enabled>
</relsease>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
...
</project>
- repository:声明一个或多个远程仓库
- 任何一个仓库的id是唯一的,maven自带的中央仓库的id是central
- url指向了仓库的地址,该地址基于http协议
- release:用来控制发布版构建的下载,snapshots:用来控制快照版构建的下载
- layout的值是default,表示仓库布局为maven2或maven3的默认布局,而不是maven1的布局
- updatePolicy用来检查仓库配置更新的频率;checksumPolicy用来配置maven检查检验和文件的策略
- 远程仓库:https://mvnrepository.com/
远程仓库的认证
- 在setting.xml中配置仓库认证信息
<settings>
<servers>
<server>
<id>my-proj</id>
<username>repo-user</username>
<password>repo-pwd</password>
</server>
</servers>
</settings>
生命周期
maven的声明周期包括:项目的清理,初始化,编译,测试,打包,集成测试,验证,部署,和站点生成。
- clean生命周期,清理项目
- default生命周期,构建项目
- site生命周期,建立项目站点
插件
- Maven的具体任务是又插件完成的,插件是以独立的构建形式存在的
- 每个插件有很多功能,每个功能就是一个插件目标
- 详细的插件列表地址:http://maven.apache.org/plugins/index.html
- 格式为: (插件前缀:插件目标)
- 自定义绑定插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<!-- 插件的执行配置 -->
<executions>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
<executions>
</plugin>
</plugins>
</build>
- 在build下的plugins中声明插件的使用
- executions下的executoin元素用来配置执行一些任务
- phase配置生命周期
- goals指定要执行的插件目标
依赖范围
- 依赖范围就是控制依赖与三种classPath的关系
- compile:编译范围依赖,该依赖为默认的依赖
- test:测试依赖范围
- provided:已提供依赖范围,对于编译和测试有效
- runtime:运行时依赖范围,对于测试和运行有效
- system:系统依赖范围,对于编译和测试有效
构建
- Maven的三大特性:属性,Profile和资源过滤
属性
- Maven属性默认只有在POM中才会解析
内置属性:
- 两个常用的属性: {version}表示项目版本
POM属性:
- 用户可以使用该属性引用POM文件中对应元素的值
- 常用的pom属性的值:
- ${project.artifactId}:项目的artifactId
- ${project.groupId}:项目的groupId
- ${project.build.finalName}:项目打包输出文件的名称
- ${project.build.directory}:项目构建输出目录,默认为target
自定义属性:
- 用户可以在pom文件的元素下自定义maven属性
setting属性:
- 用户可以使用setting.开头的属性应用setting.xml文件中xml元素的值
Java系统属性:
- 所有的java系统属性都可以使用Maven属性引用
环境属性:
- 所有的环境变量都可以用env.开头的Maven属性引用
资源过滤
- Maven属性只有在POM文件中才会被解析,要让Maven解析资源目录中的Maven属性,即开启资源过滤
- Maven默认的主资源目录(src/main/resources)和测试资源目录(src/test/resources)的定义在超级POM中
- 一般资源文件与web资源文件处理不同。前者通过maven-resources-plugin处理,后者通过maven-war-plugin处理。
- 配置主资源目录
<resources>
<resource>
<dircetory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering> <!--开启资源过滤-->
<resource>
<resources>
- 配置测试资源目录
<testResources>
<testResource>
<dircetory>${project.basedir}/src/test/resources</directory>
<filtering>true</filtering>
<testResource>
<testResources>
- 配置多个资源目录
<resources>
<resource>
<dircetory> src/main/resources</directory>
<filtering>true</filtering>
<resource>
<resource>
<dircetory> src/main/sql</directory>
<filtering>false</filtering>
<resource>
<resources>
Maven Profile
- 激活profile的方式
- 命令行激活:$ mvn clean install - P dev-x,dev-y 激活dev-x和dev-y两个profile
- settings文件显式激活:
<settings>
<activeProfiles>
<!--表示dev-x文件一直处于激活状态-->
<activeProfile>dev-x</activeProfile>
</activeProfiles>
</settings>
- 系统属性激活
- 操作系统环境激活
- 文件存在与否激活
- 默认激活:用户在定义profile的时候指定其默认激活,如果有任何一个profile通过其他任意一种方式激活了,所有的默认激活方式均会失效。
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault></activeByDefault>
</activation>
</profile>
</profiles>
- profile的种类:
- pom.xml:pom.xml中声明的profile只对当前项目有效。
- 用户settings.xml:用户目录下.m2/settings.xml中的profile对本机上该用户所有的Maven项目有效
- 全局settings.xml:安装目录下.conf/settings.xml中的profile对本机上该用户所有的Maven项目有效