本篇主要是对Maven项目结构介绍、POM文件常用内容介绍及日常开发中使用的技术点。
本文参考Maven官网Maven Getting Started Guide
http://maven.apache.org/guides/getting-started/index.html#What_is_a_SNAPSHOT_version
上一章,我们尝试了Maven命令创建项目、打Jar包、执行Jar包。首先我们先在看看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.0modelVersion>
<groupId>com.mycompany.appgroupId>
<artifactId>my-appartifactId>
<packaging>jarpackaging>
<version>1.0-SNAPSHOTversion>
<name>my-appname>
<url>http://maven.apache.orgurl>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
dependencies>
project>
元素 | 说明 |
---|---|
project | pom.xml文件顶级元素 |
modelVersion | POM版本,一般不怎么改动 |
groupId | 项目组织名称,公司名称.如com.mycompany.app |
artifactld | 项目名称,唯一。一般打包时作为包名前缀 |
packaging | 项目构件类型,如JAR、WAR、EAR、POM等。默认值为jar |
version | 项目版本,在打包时快照名称为${artifactld}-${version}.jar 格式为:主版本.次版本.增量版本-限定版本号 |
name | 项目显示名称,被用于Maven生成的文档 |
url | 项目主页URL,被用于Maven生成的文档 |
description | 项目基本描述,被用于Maven生成的文档 |
dependencies | 使用第三方依赖包 |
重点介绍一下使用第三方依赖包,在日常的项目开发中我们用到很多第三方jar包,在Ant我们需要自己讲jar包下载拷贝到项目中,容易产生jar冲突,版本不一致等问题,不便于管理。现在有Maven,会自动下载所需要的依赖包,依赖包之间版本管理。
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
可以在http://mvnrepository.com/中查询所需要的jar包,将依赖包信息复制到dependencies中。
我们在pom.xml中配置了dependency,那么Maven是如何下载这些依赖包?
在我们安装Maven时,要在默认路径${user.home}/.m2配置settings.xml(settings.xml具体配置及元素后面会有介绍),默认下载路径为
或者可以自己配置,现在国内比较好用的是阿里云
http://maven.aliyun.com/nexus/content/groups/public
下载的依赖包存放在${user.home}/.m2/repository
Maven本质上是一个插件框架,它的核心并不是执行任何具体的构建任务,所有的这些任务都是交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven-compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。
用户可以通过两种方式调用Maven插件目标。第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。
所有Maven提供很多插件已供大家使用,添加插件的方法是在pom.xml添加
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.3version>
<configuration>
<source>1.5source>
<target>1.5target>
configuration>
plugin>
plugins>
build>
介绍到这里,项目可以引入需要的第三方依赖包、插件等。再介绍常用的Maven命令来满足项目编译、测试编译、打包等。
命令 | 作用 |
---|---|
mvn compile | 编译,编译生成的文件在${basedir}/target/classes |
mvn test | 编译,编译生成的文件在${basedir}/target/test-classes |
mvn test-compile | 编译测试程序 |
mvn package | 打包,生成的文件在${basedir}/target |
mvn install | 安装当前工程的输出文件到本地仓库 |
mvn clean | 清空编译产生文件${basedir}/target |
mvn site | 生成站点目录 |
mvn site-deploy | 生成站点目录并发布 |
mvn help:effective-pom | 查看实际pom信息 |
mvn dependency:analyze 或 mvn dependency:tree | 分析项目的依赖信息 |
mvn -Dmaven.test.skip=true XXX | 跳过测试运行maven任务 |
mvn help:help | 查看帮助信息 |
mvn |
查看插件的帮助信息,如:mvn dependency:help 或 mvn ant:help |
mvn eclipse:eclipse | 当IDE使用Eclipse 生成eclipse项目文件 |
mvn idea:idea | 当IDE使用Intellj Idea 生成Idea项目文件 |
还有一些整合命令
创建一个简单的Java工程
mvn archetype:create -DgroupId=com.mycompany.example -DartifactId=Example
创建一个java的web工程
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.mycompany.app -DartifactId=my-webapp
安装指定文件到本地仓库
mvn install:install-file -DgroupId=
-DartifactId= -Dversion=1.0.0 -Dpackaging=jar -Dfile=
"http://maven.apache.org/POM/4.0.0"
...
...
my-app
...
1.0-SNAPSHOT
Maven Quick Start Archetype
...
项目版本可以分为开发版本和稳定版本,开发版本使用SNAPSHOT,稳定版本使用release表示。
SNAPSHOT版本格式:x.y-SNAPSHOT 。当前版本为1.0-SNAPSHOT,按照Maven规则x.(y+1)-SNAPSHOT,版本升级后为1.1-SNAPSHOT。
现有SNAPSHOT版本后又release版本。
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-site \
-DgroupId=com.mycompany.app \
-DartifactId=my-app-site
本篇主要介绍了Maven pom.xml文件基本结构使用、如何引入第三方依赖、如何加入插件、一些常用命令、如何创建项目文档,旨在快速用Maven完成日常的开发。
日常开发中项目服务器部署环境不一样需要出不同的包,这时就要考虑如何不改变代码情况下生成不同生产环境所需的war包,这将在下一章介绍。