1. 在windows上安装Maven.
设置环境变量:
c:\users\jeffrey>set M2_HOME=C:\Apache-Maven-2.2.1
c:\users\jeffrey>set PATH=%PATH%;%M2_HOME%\bin
2. Maven Help插件
help:active-profiles : 列出当前构建中活动的Profile(项目的,用户的,全局的)
help:effective-pom: 显示当前构件的实际pom,包含活动的profile
help:effective-settings: 打印出项目的实际setting,包括从全局的setting和用户级别settings继承的配置
help:describe:描述插件的属性。它不需要在项目目录下运行。但是你必须提供你想要描述插件的groupId和artifactId
3. 创建简单项目
$mvn archetype:create -DgroupId=com.trendmicro.demo -DartifactId=simple -DpackageName=com.trendmicro
4. pom.xml文件是Maven项目中最基础的POM.
--groupId,artifactId,packaging,version是Maven的坐标,他们唯一标识了项目。
5. 最简单的POM
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.trendmicro.demo</groupId>
<artifactId>simple-project</artifactId>
<version>1</version>
</project>
验证项目是否有效,在pom.xml文件所在的目录执行命令$mvn help:effective-pom
6. 项目的版本号构成
主版本.次版本.增量版本-限定版本(如: 1.0.0-beta-01,1.2.4-alpha-09)
SNAPSHOT版本:表示项目正处于活动的开发状态,Maven会在安装或发布这个组件的时候将该符号展开为一个日期和时间值
LATEST和RELEASE版本:LATEST是指某个特定构件最新的发布版或者快照版,最近被部署到某个特定仓库的构件。RELEASE是指仓库中最后的一个非快照版本。
7. 属性引用
一个POM可以通过一对大括号和前面一个美元符号来包含对属性的引用。
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysqlVersion}</version>
</dependency>
</dependencies>
<properties>
<mysqlVersion>(5.1,)</mysqlVersion>
</properties>
8. 项目依赖
<project>
...
<dependencies>
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-java5</artifactId>
<version>1.2.5</version>
<scope>compile</scope>
</dependency>
...
</dependencies>
...
</project>
依赖范围:
compile(编译范围):编译范围依赖在所有的classpath中可用,同时它们也会被打包
provided(以提供范围):provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。它们不是传递性的,也不会被打包。
runtime(运行时范围):runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
test(测试范围):test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system(系统范围):system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,
Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。
可选依赖:
在POM中用<option>true</option>表示。编译这个项目的时候你需要两个依赖类库,但是你不希望在使用你类库的项目中,这两个依赖类库同时作为传递性运行时依赖出现。
依赖版本界限:
(,)不包含量词。[,]包含量词 如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[3.8,4.0)</version>
<scope>test</scope>
</dependency>
依赖管理:
Maven在dependencyManagement元素中为你提供了一种方式来统一依赖版本号。你经常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素。
如定义MySQL-Driver,子项目没有显式的列出mysql-connector-java依赖的版本。由于这个依赖在顶层POM的dependencyManagement元素中定义了,该版本号就会传播到所有子项目的mysql-connector-java依赖中。
注意如果子项目定义了一个版本,它将覆盖顶层POM的dependencyManagement元素中的版本。那就是:只有在子项目没有直接声明一个版本的时候,dependencyManagement定义的版本才会被使用.
9. Maven坐标详解
groupId:一个归类了一组相关构件。组定义符基本上类似于一个java包名。
artifactId:是项目的主要定义符。当你生成一个构件,这个构件将由artifactId命名。当你引用一个项目,你就需要使用artifactId来引用它。artifactId和groupId的组合必须是唯一的。
versionId:当一个构件发布的时候,它是使用一个版本号发布的。该版本号是一个数字定义。
classifier:(最少使用的):如果你要发布同样的代码,但是由于技术原因需要生成两个单独的构件,你就要使用一个分类器。例如,你想要构建两个单独的构件成jar,一个使用java 1.4编译器,另一个使用java 1.6编译器。
10. Maven Surefire插件是负责运行单元测试的插件。
11. 如果想跳过整个测试后进行打包
$mvn install -Dmaven.test.skip=true
12. 通过Maven Profiles实现可移植性
Maven中的profile是一组可选的配置,可以用来设置或者覆盖默认值。有了profile,你就可以为不同的环境定制构建。profile可以在pom.xml中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命令告诉Maven运行特定profile中的目标。以下pom.xml使用production profile覆盖了默认的Compiler插件设置。
<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.sonatype.mavenbook</groupId>
<artifactId>simple</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>simple</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>
<profiles>#
<profile>
<id>production</id>#
<build>#
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<debug>false</debug>#
<optimize>true</optimize>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
激活profile配置
<profiles>
<profile>
<id>jdk16</id>
<activation>#
<jdk>1.6</jdk>
</activation>
<modules>#
<module>simple-script</module>
</modules>
</profile>
</profiles>
13. 使用Maven构建项目站点
$mvn site:run