Maven2.0.10学习笔记

本文介绍Maven的基本使用方法,包括如何使用Maven Help插件查看插件信息,创建项目,理解项目对象模型(POM),以及如何管理和使用依赖。
2.7使用Maven Help插件:
在dos上输入:mvn help:describe -Dplugin=help -Dfull
会看到dos输出help插件的所有目标(golds),我使用的Maven版本是2.0.10,其有9个golds,分别为:
help:active-profiles
help:all-profiles
help:describe
help:effective-pom
help:effective-settings
help:evaluate
help:expressions
help:help
help:system
控制台中输出了其对应的描述和可用参数;

在mvn help:describe -Dplugin=help -Dfull命令中,help插件的describe目标描述了插件(Dplugin)为help的全部(Dfull)信息;

试用以下命令对compiler插件进行描述
mvn help:describe -Dplugin=compiler -Dfull
dos会输出compiler插件下所有的golds的详细信息;
我们可以使用以下命令来指定一个golds的详细信息,使用mojo参数即可:
mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull

创建一个简单的项目:
mvn archtype:create -DgroupId=org.sonatype.mavenbook.ch03
-DartifactId=Simple -DpackageName=org.sonatype.mavenbook
分析这个命令:
mvn help:dscribe -Dplugin=archtype -Dmojo=create -Dfull
根据dos上的信息,就可以知道create目标参数的含义和用法了;
执行完这个命令后,生成了一个项目,看一下Maven在simple目录下创建的目录结构:
simple/
simple/pom.xml
/src
/src/main
/main/java
/src/test
/test/java
这个目录结构就是Maven约定优于配置的表现;
通过这中方法创建的项目,只产生了一个简单的类org.sonatype.mavenbook.App,它仅仅有13行的java代码:
package org.sonatype.mavenbook;
/**
*Hello world!
*
*/
public class App
{
public static void main(String[] args)
{
System.out.println("Hello world!");
}
}

在simple目录下运行mvn install对项目进行编译,测试和打包;
在dos控制台输入如下命令运行此项目
java -cp target/simple-1.0-SNAPSHOT.jar org.sonatype.mavenbook.App
输出 Hello world!
3.4 简单的项目对象模型(project object model)
我们simple项目的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>
<parent>
<groupId>org.sonatype.mavenbook.ch03</groupId>
<artifactId>parent</artifactId>
<version>1-SNAPSHOT</version>
</parent>
<artifactId>simple</artifactId>
<packaging>jar</packaging>
<name>Chapter 3 Simple Project Example</name>
<url>http://sonatype.com/book</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

这是一个简单的pom文件,使用如下命令
mvn help:effective-pom
我们将看到一个大得多的POM,它暴露了Maven的默认设置;

3.5 核心概念
3.5.1 Maven插件和目标(plugins and golds)

9.2.1 超级POM
超级POM定义了一组被所有项目共享的默认设置。可以在${M2_HOME}/lib中的maven-2.0.10-uber.jar文件中的org.apache.maven.project中找到pom-4.0.0.xml;大致内容如下:

......
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<layout>default</layout>
<url>http://repo1.maven.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
......

repositories中定义了一个默认中央仓库Maven Repository Switchboard其仓库URL为http://repo1.maven.org/maven2,不使用snapshots构件(snapshots是一个正在进行的不够稳定的开发版本,这样的构件会随时更新);
pluginRepositories定义了一个默认的插件仓库,设置不使用snapshots构件,更新策略为从不;这就意味着不依赖snapshot构件并且插件库的更新策略为从来都不更新。即使插件库中有更新的插件都不会更新;

9.2.3 有效POM
在pom.xml目录下执行如下指令:
mvn help:effective-pom
控制台会打印出默认pom.xml和当前pom.xml文件的合并内容;

9.3 POM语法
9.3.1 项目版本
Maven中的版本包含以下内容:主版本,次版本,增量版本和限定版本,分别对应如下格式:
<major-version>.<minor-version>.<incremental-version>-<qualifier>
例如:版本1.5.3,主版本是1,次版本是5,增量版本是3
限定版本用来标识里程碑构件:alpha和beta
例如:版本1.5.3-beta-01,主版本1,次版本5,增量版本3,限定版本beta-01;
如果你的版本号没有符合这个标准,那么你的版本好号只会根据字符串被比较;
例如1.0.1b和1.2.1b会使用字符串比较;

9.4.1 依赖范围
compile(编译范围)
compile是默认的范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包;
provided(已提供范围)
provided依赖只有在由第三方已经有提供这个依赖时使用;比如说,tomcat有提供servlet编译的jar,所以在你的web项目里就不需要这个serlvet jar文件,而是直接引用tomcat提供的servlet jar,并且在打包时,provided范围内的jar不会打包到项目中。
runtime(运行时范围)
runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要;
test(测试范围)
test依赖在测试编译和测试运行阶段可用;
system(系统范围)
system范围依赖与provider依赖类似,system依赖需要用户自己指定一个本地系统的jar路径,有点类似eclipse里的user lib;如果你使用此依赖,你必须同时提供一个SystemPath元素,来制定这个jar库的路径;注意,此范围是不推荐使用的,应该尽量去依赖于公共的或者私有的仓库。

9.4.3 依赖版本界限
如下字符来围绕一个或多个版本号来实现版本界限:
(,) 不包含量词
[,] 包含量词
例如,如果你要依赖于JUnit的版本为大于等于3.8但是小于4.0的版本,你可以编写如下依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[3.8,4.0)</version>
<scope>test</scope>
</dependency>

其他:例如
[4.0,) 版本大于等于4.0
(,2.0) 版本小于2.0
[1.2] 版本为1.2

9.4.6 依赖管理
如果有一个200多个互相关联的Maven项目,如果每个项目中都有对Mysql数据库驱动程序的依赖,我就得在这200多个pom.xml中都写入对这个驱动程序的依赖;
也许有一天,我们得升级这个mysql驱动程序包,我们就得一一去对200多个pom.xml文件进行修改,把mysql驱动程序依赖更改;
幸运的是Maven在dependencyManagement提供了一个统一管理依赖的版本,介于以上情况,我们可以在顶层pom文件里定义dependencyManagement元素让子项目去引用这个依赖,而不显示的列出版本号。Maven会根据pom的层次关系,到父pom文件中查找dependencyManagement元素,然后使用这个dependencyManagement元素中指定的版本号,例如:
一个顶层pom.xml文件

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifacId>test</artifacId>
<version>1.0.0</version>
......
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
</dependencies>
</dependencyManagement>
......
</project>

子项目pom.xml

<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>test</groupId>
<artifacId>test</artifacId>
<version>1.0.0</version>
</parent>
......
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>5.1.2</version>-->
</dependency>
</dependencies>
......
</project>


9.5.1 坐标详解
Maven坐标由三个部分组成:
groupId:组织名称,例如org.apache
artifactId:项目名字,例如maven
version:版本号,例如2.0.10
共同组织成org.apache.maven-2.0.10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值