1.Maven是做什么的
Maven是一个项目管理和构建自动化的工具。但对于我们编码来说,我们更关心它的项目构建功能。
1.1 Maven的项目结构
src
-main
–bin 脚本库
–java java源代码文件
–resources 资源库,会自动复制到classes目录里
–filters 资源过滤文件
–assembly 组件的描述配置(如何打包)
–config 配置文件
–webapp web应用的目录。WEB-INF、css、js等
-test
–java 单元测试java源代码文件,项目的测试类,比如jUint代码
–resources 测试需要用的资源库
–filters 测试资源过滤库
-site Site(一些文档)
target
LICENSE.txt Project’s license
README.txt Project’s readme
工程根目录下就只有src和target两个目录
target是有存放项目构建后的文件和目录,jar包、war包、编译的class文件等。
target里的所有内容都是maven构建的时候生成的
1.2 pom.xml
pom.xml文件是Maven的核心
pom意思就是project object model。pom.xml包含了项目构建的信息,包括项目的信息、项目的依赖等。pom.xml文件是可以继承的,大型项目中,子模块的pom.xml一般都会继承于父模块的pom.xml
刚构建的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>
<groupId>cn.luxh.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>my-app</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>
</project>
http://maven.aliyun.com/nexus/content/groups/public/
http://central.maven.org/maven2/
<project> pom文件的顶级节点
<modelVersion> object model版本,对Maven2和Maven3来说,只能是4.0.0
<groupId> 项目创建组织的标识符,一般是域名的倒写
<artifactId> 定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目
<packaging> 打包的方式,有jar、war、ear等
<version> 当前项目的版本,SNAPSHOT,表示是快照版本,在开发中
<name> 项目的名称
<url> 项目的地址
<dependencies> 构建项目依赖的jar
<description> 项目的描述
其中由groupId、artifactId和version唯一的确定了一个项目坐标
2. 构建Maven工程
2.1 简单的项目构建
使用Maven命令行构建工程很重要,最简单的就是根据标准模板创建,有时还需根据不同的项目,添加不同的命令。
关于maven项目的生成命令:
create is deprecated in maven 3.0.5 and beyond,在maven3.0.5以上版本舍弃了create,使用generate生成项目
标准创建模板
mvn archetype:create
-DgroupId=com.codeline.commons \
-DartifactId=codelineCommons
第一次创建时,还需下载对应插件
如第一次构建scala工程。
mvn archetype:generate
-DarchetypeGroupId=org.scala-tools.archetypes \
-DarchetypeArtifactId=scala-archetype-simple \
-DremoteRepositories=http://scala-tools.org/repo-releases \
-DgroupId=com.xxxx.bigdata.spark.app \
-DartifactId=logs-analyzer \
-Dversion=1.0
2.2 构建多模块项目
关于通过maven构建多模块项目参考此篇博客:
http://www.cnblogs.com/xdp-gacl/p/4242221.html
3. Maven资源仓库
3.1 maven仓库收集
<mirror>
<id>mirrors.ibiblio.org</id>
<name>mirrors.ibiblio.org</name>
<url>http://mirrors.ibiblio.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>nexus-tmatesoft</id>
<mirrorOf>central</mirrorOf>
<name>Nexus tmatesoft</name>
<url>http://maven.tmatesoft.com/content/groups/public/</url>
</mirror>
<mirror>
<id>Central</id>
<url>http://repo1.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>internal</id>
<mirrorOf>*</mirrorOf>
<name>local.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
3. Maven 的生命周期
在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:
- validate,验证工程是否正确,所有需要的资源是否可用。
- compile,编译项目的源代码。
- test-compile,编译项目测试代码。
- test,使用已编译的测试代码,测试已编译的源代码。
- package,已发布的格式,如jar,将已编译的源代码打包。
- integration-test,在集成测试可以运行的环境中处理和发布包。
- verify,运行任何检查,验证包是否有效且达到质量标准。
- install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
- deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的
- repository,使得其他的开发者或者工程可以共享。
- generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
如果要执行项目编译,那么直接输入:mvn compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系(dependency)的,如test依赖test-compile。在执行mvn test时,会先运行mvn test-compile,然后才是mvn test。
参考博客:
http://blog.csdn.net/edward0830ly/article/details/8748986
系统总结Maven的博客