maven2
起
步
相信maven1 大家都已
经
很熟悉了,具体maven能做什
么
,就不
详细说
了。个人
觉
得maven在
开
源
项
目中用的
还
是比
较
多的,公司内部,就不太清楚了。我以前的公司用
过
一段
时间
,不
过
后来就没有下文了。
与maven1 相比,maven2可算是几乎重写了,不 过 从速度来 说应该 更快。
主要的几个新特性包括:( 详细 参考 http://www.ibm.com/developerworks/cn/opensource/os-maven2/index.html )
1 . 更快、更 简单
速度方面可以比上 ant 了
2 . 更少的配置文件
现 在的配置文件只剩下了 settings.xml 和 pom.xml 了。
3. Plugin 语 言更 换
语 言 开 始支持java,BeanShell和ant
4. 提供了 预 定 义 的模版
这 点是最有帮助的,用 户 可以自己定 义 自己的 项 目模版了,就像用appfuse一 样 生成 项 目 结 构
5. 生命周期的引入
在Maven2中有了明确的生命周期概念,而且都提供与之 对应 的命令,使得 项 目构建更加清晰明了。
6. 新增 Dependency Scope
这 点也比 较 重要,有些用于 test 范 围 的包,可以不用加入依 赖 了
7. 传递 依 赖 , 简 化依 赖 管理
这 是最 为 方便的,可以省了很多配置。 如a 依 赖 b,b 依 赖 c 默 认 a 也会依 赖 c 。但是也会 带 来 隐 患,如版本冲突。不 过 maven 也已 经 考 虑 到了,可以使用exclusions来排除相 应 的重 复 依 赖
介 绍 了那 么 多, 现 在切入正 题 , 开 始maven2 之旅:
首些下 载 需要的工具:
maven2: http://maven.apache.org/download.html 最主要的
maven-proxy:用来代理repository,使用本地 库 代替maven2的 远 程 库
http://maven-proxy.codehaus.org/
continuum :一个不 错 的持 续 整合工具,用于自 动 build 。支持ant,maven
http://maven.apache.org/continuum/
svn:版本控制工具相信都已 经 配置了。
maven 用于 eclipse 的插件 , 在 maven 主站有下 载 ,不 错 的插件。当然 idea 也有相 应 的插件
最后, http ,服 务 器是必不可少的。用于内部 开发 使用。
可以使用 apache ,或者 jetty http://www.mortbay.org/
安装:
安装 maven2 很 简单 ,把下 载 来的 maven 包解 开 就行了。(目前我的配置都在 win2003 上, 还 没有 应 用于 linux ,所有所有的配置都 针对 windows). 增加相 应 的 环 境 变 量 m2_home=maven2 的安装目 录 ,不要忘了 设 置 java_home 的目 录 。另外在 path 中增加 % m2_home%\bin; 可以直接在命令行下面使用 mvn 。
其他工具的安装在后 续 的文章会介 绍 。
开 始第一个 mvean2 项 目:
mvn archetype:create -DgroupId=com.mycompany.app \
-DartifactId=my-app
简单 介 绍 一下 groupId 相当于你的 组织 ,如同 org.springframework ,会 转 化 为 相 应 得本地路径 artifactId ,你主要的 jar 包名称,也就是你要打成的 jar 名称。
编译应 用 资 源
mvn compile
编译 相 应 的 jave 文件
编译测试类 以及运行 测试类
mvn test
运行 测试类
如果只想 编译 test , 执 行
mvn test-compile
打包和安装你的本地 库
打包:
mvn package
安装:
mvn install
创 建 web site
mvn site
清除所有 输 出
mvn clean
创 建相 关 的 ide 文件
mvn idea:idea 或者 mvn eclipse:eclipse
顺 便 说 一下, maven2 是有生命周期 这 一概念的,也就是 说 如果你 执 行 package ,相 应 的以前 步骤 ,如 compile,test 等都会自 动执 行。
刚开 始 执 行会比 较 慢,需要从maven2 远 程 库 中下 载 所有的文件到本地。如果你的本地没有相 应 的依 赖 包, 则每 次maven都会去 远 程下 载 ,所以配置一个 镜 像 库 就比 较 重要了。
另外介 绍 一下主要的参考 资 料:
mavn2 主站:主要的 pom 和 settings.xml 参考 资 料
Better Builds with Maven http://www.mergere.com/m2book_download.jsp
不 错 的 书 ,主要通 过 例子介 绍 。 可惜都是E文的,花点 时间还 是 值 得的。
下一个主 题 ,会 说 一下maven2的主要配置。
与maven1 相比,maven2可算是几乎重写了,不 过 从速度来 说应该 更快。
主要的几个新特性包括:( 详细 参考 http://www.ibm.com/developerworks/cn/opensource/os-maven2/index.html )
1 . 更快、更 简单
速度方面可以比上 ant 了
2 . 更少的配置文件
现 在的配置文件只剩下了 settings.xml 和 pom.xml 了。
3. Plugin 语 言更 换
语 言 开 始支持java,BeanShell和ant
4. 提供了 预 定 义 的模版
这 点是最有帮助的,用 户 可以自己定 义 自己的 项 目模版了,就像用appfuse一 样 生成 项 目 结 构
5. 生命周期的引入
在Maven2中有了明确的生命周期概念,而且都提供与之 对应 的命令,使得 项 目构建更加清晰明了。
6. 新增 Dependency Scope
这 点也比 较 重要,有些用于 test 范 围 的包,可以不用加入依 赖 了
7. 传递 依 赖 , 简 化依 赖 管理
这 是最 为 方便的,可以省了很多配置。 如a 依 赖 b,b 依 赖 c 默 认 a 也会依 赖 c 。但是也会 带 来 隐 患,如版本冲突。不 过 maven 也已 经 考 虑 到了,可以使用exclusions来排除相 应 的重 复 依 赖
介 绍 了那 么 多, 现 在切入正 题 , 开 始maven2 之旅:
首些下 载 需要的工具:
maven2: http://maven.apache.org/download.html 最主要的
maven-proxy:用来代理repository,使用本地 库 代替maven2的 远 程 库
http://maven-proxy.codehaus.org/
continuum :一个不 错 的持 续 整合工具,用于自 动 build 。支持ant,maven
http://maven.apache.org/continuum/
svn:版本控制工具相信都已 经 配置了。
maven 用于 eclipse 的插件 , 在 maven 主站有下 载 ,不 错 的插件。当然 idea 也有相 应 的插件
最后, http ,服 务 器是必不可少的。用于内部 开发 使用。
可以使用 apache ,或者 jetty http://www.mortbay.org/
安装:
安装 maven2 很 简单 ,把下 载 来的 maven 包解 开 就行了。(目前我的配置都在 win2003 上, 还 没有 应 用于 linux ,所有所有的配置都 针对 windows). 增加相 应 的 环 境 变 量 m2_home=maven2 的安装目 录 ,不要忘了 设 置 java_home 的目 录 。另外在 path 中增加 % m2_home%\bin; 可以直接在命令行下面使用 mvn 。
其他工具的安装在后 续 的文章会介 绍 。
开 始第一个 mvean2 项 目:
mvn archetype:create -DgroupId=com.mycompany.app \
-DartifactId=my-app
简单 介 绍 一下 groupId 相当于你的 组织 ,如同 org.springframework ,会 转 化 为 相 应 得本地路径 artifactId ,你主要的 jar 包名称,也就是你要打成的 jar 名称。
编译应 用 资 源
mvn compile
编译 相 应 的 jave 文件
编译测试类 以及运行 测试类
mvn test
运行 测试类
如果只想 编译 test , 执 行
mvn test-compile
打包和安装你的本地 库
打包:
mvn package
安装:
mvn install
创 建 web site
mvn site
清除所有 输 出
mvn clean
创 建相 关 的 ide 文件
mvn idea:idea 或者 mvn eclipse:eclipse
顺 便 说 一下, maven2 是有生命周期 这 一概念的,也就是 说 如果你 执 行 package ,相 应 的以前 步骤 ,如 compile,test 等都会自 动执 行。
刚开 始 执 行会比 较 慢,需要从maven2 远 程 库 中下 载 所有的文件到本地。如果你的本地没有相 应 的依 赖 包, 则每 次maven都会去 远 程下 载 ,所以配置一个 镜 像 库 就比 较 重要了。
另外介 绍 一下主要的参考 资 料:
mavn2 主站:主要的 pom 和 settings.xml 参考 资 料
Better Builds with Maven http://www.mergere.com/m2book_download.jsp
不 错 的 书 ,主要通 过 例子介 绍 。 可惜都是E文的,花点 时间还 是 值 得的。
下一个主 题 ,会 说 一下maven2的主要配置。
maven
配置篇 之
settings.xml
maven2
比起
maven1
来
说
,需要配置的文件少多了,主要集中在
pom.xml
和
settings.xml
中。
先来 说说 settings.xml , settings.xml 对 于 maven 来 说 相当于全局性的配置,用于所有的 项 目。在 maven2 中存在两个 settings.xml ,一个位于 maven2 的安装目 录 conf 下面,作 为 全局性配置。 对 于 团队设 置,保持一致的定 义 是 关键 ,所以 maven2/conf下面的settings.xml就作 为团队 共同的配置文件。保 证 所有的 团队 成 员 都 拥 有相同的配置。当然 对 于 每 个成 员 ,都需要特殊的 自定 义设 置,如用 户 信息,所以另外一个settings.xml就作 为 本地配置。默 认 的位置 为 :${user.dir} /.m2/settings.xml目 录 中(${user.dir} 指windows 中的用 户 目 录 )。
settings.xml基本 结 构如下:
<settings 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/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
简单 介 绍 一下几个主要的配置因素:
localRepository:表示本地 库 的保存位置,也就是maven2主要的jar保存位置,默 认 在${user.dir}/.m2/repository,如果需要另外 设 置,就 换 成其他的路径。
offline:如果不想 每 次 编译 ,都去 查 找 远 程中心 库 ,那就 设 置 为 true 。当然前提是你已 经 下 载 了必 须 的依 赖 包。
Servers
在POM中的 distributionManagement元素定 义 了 开发库 。然而,特定的username和pwd不能使用于pom.xml,所以通 过 此配置来保存server信息
<servers>
<server>
<id>server001</id>
<username>my_login</username>
<password>my_password</password>
<privateKey>${usr.home}/.ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
</servers>
先来 说说 settings.xml , settings.xml 对 于 maven 来 说 相当于全局性的配置,用于所有的 项 目。在 maven2 中存在两个 settings.xml ,一个位于 maven2 的安装目 录 conf 下面,作 为 全局性配置。 对 于 团队设 置,保持一致的定 义 是 关键 ,所以 maven2/conf下面的settings.xml就作 为团队 共同的配置文件。保 证 所有的 团队 成 员 都 拥 有相同的配置。当然 对 于 每 个成 员 ,都需要特殊的 自定 义设 置,如用 户 信息,所以另外一个settings.xml就作 为 本地配置。默 认 的位置 为 :${user.dir} /.m2/settings.xml目 录 中(${user.dir} 指windows 中的用 户 目 录 )。
settings.xml基本 结 构如下:
<settings 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/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
简单 介 绍 一下几个主要的配置因素:
localRepository:表示本地 库 的保存位置,也就是maven2主要的jar保存位置,默 认 在${user.dir}/.m2/repository,如果需要另外 设 置,就 换 成其他的路径。
offline:如果不想 每 次 编译 ,都去 查 找 远 程中心 库 ,那就 设 置 为 true 。当然前提是你已 经 下 载 了必 须 的依 赖 包。
Servers
在POM中的 distributionManagement元素定 义 了 开发库 。然而,特定的username和pwd不能使用于pom.xml,所以通 过 此配置来保存server信息
<servers>
<server>
<id>server001</id>
<username>my_login</username>
<password>my_password</password>
<privateKey>${usr.home}/.ssh/id_dsa</privateKey>
<passphrase>some_passphrase</passphrase>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
<configuration></configuration>
</server>
</servers>
- id:server 的id,用于匹配distributionManagement库id,比较重要。
- username, password:用于登陆此服务器的用户名和密码
- privateKey, passphrase:设置private key,以及passphrase
- filePermissions, directoryPermissions:当库文件或者目录创建后,需要使用权限进行访问。参照unix文件许可,如664和775
Mirrors
表示 镜 像 库 ,指定 库 的 镜 像,用于增加其他 库
<mirrors>
<mirror>
<id>planetmirror.com</id>
<name>PlanetMirror Australia</name>
<url>http://downloads.planetmirror.com/pub/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
表示 镜 像 库 ,指定 库 的 镜 像,用于增加其他 库
<mirrors>
<mirror>
<id>planetmirror.com</id>
<name>PlanetMirror Australia</name>
<url>http://downloads.planetmirror.com/pub/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
- id,name:唯一的标志,用于区别镜像
- url:镜像的url
- mirrorOf:此镜像指向的服务id
Proxies
此 设 置,主要用于无法直接 访问 中心的 库 用 户 配置。
<proxies>
<proxy>
<id>myproxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
</proxy>
</proxies>
此 设 置,主要用于无法直接 访问 中心的 库 用 户 配置。
<proxies>
<proxy>
<id>myproxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
</proxy>
</proxies>
- id:代理的标志
- active:是否激活代理
- protocol, host, port:protocol://host:port 代理
- username, password:用户名和密码
- nonProxyHosts: 不需要代理的host
Profiles
类 似于 pom.xml 中的 profile 元素,主要包括 activation,repositories,pluginRepositories 和 properties 元素
刚开 始接触的 时 候,可能会比 较 迷惑,其 实这 是 maven2 中比 较强 大的功能。 从字面上来 说 ,就是个性配置。
单 独定 义 profile 后,并不会生效,需要通 过满 足条件来激活。
repositories 和 pluginRepositories
定 义 其他 开发库 和插件 开发库 。 对 于 团队 来 说 ,肯定有自己的 开发库 。可以通 过 此配置来定 义 。
如下的配置,定 义 了本地 开发库 ,用于 release 发 布。
<repositories>
<repository>
<id>repo-local</id>
<name>Internal 开发库 </name>
<url>http://192.168.0.2:8082/repo-local</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo-local</id>
<name>Internal 开发库 </name>
<url>http://192.168.0.2:8082/repo-local</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</pluginRepository>
</pluginRepositories>
releases, snapshots: 每 个 产 品的版本的 Release 或者 snapshot( 注: release 和 snapshot 的区 别 , release 一般是比 较稳 定的版本,而 snapshot 基本上不 稳 定,只是作 为 快照)
properties
maven 的 properties 作 为 placeholder 值 ,如 ant 的 properties 。
包括以下的 5 种类 型 值 :
类 似于 pom.xml 中的 profile 元素,主要包括 activation,repositories,pluginRepositories 和 properties 元素
刚开 始接触的 时 候,可能会比 较 迷惑,其 实这 是 maven2 中比 较强 大的功能。 从字面上来 说 ,就是个性配置。
单 独定 义 profile 后,并不会生效,需要通 过满 足条件来激活。
repositories 和 pluginRepositories
定 义 其他 开发库 和插件 开发库 。 对 于 团队 来 说 ,肯定有自己的 开发库 。可以通 过 此配置来定 义 。
如下的配置,定 义 了本地 开发库 ,用于 release 发 布。
<repositories>
<repository>
<id>repo-local</id>
<name>Internal 开发库 </name>
<url>http://192.168.0.2:8082/repo-local</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo-local</id>
<name>Internal 开发库 </name>
<url>http://192.168.0.2:8082/repo-local</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</pluginRepository>
</pluginRepositories>
releases, snapshots: 每 个 产 品的版本的 Release 或者 snapshot( 注: release 和 snapshot 的区 别 , release 一般是比 较稳 定的版本,而 snapshot 基本上不 稳 定,只是作 为 快照)
properties
maven 的 properties 作 为 placeholder 值 ,如 ant 的 properties 。
包括以下的 5 种类 型 值 :
1.
env.X
,返回当前的
环
境
变
量
2.
project.x:
返回
pom
中定
义
的元素
值
,如
project.version
3.
settings.x
:返回
settings.xml
中定
义
的元素
4.
java
系
统
属性:所有
经过
java.lang.System.getProperties()
返回的
值
5.
x
:用
户
自己
设
定的
值
Activation
用于激活此 profile
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.5</jdk>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
<property>
<name>mavenVersion</name>
<value>2.0.3</value>
</property>
<file>
<exists>${basedir}/file2.properties</exists>
<missing>${basedir}/file1.properties</missing>
</file>
</activation>
用于激活此 profile
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.5</jdk>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
<property>
<name>mavenVersion</name>
<value>2.0.3</value>
</property>
<file>
<exists>${basedir}/file2.properties</exists>
<missing>${basedir}/file1.properties</missing>
</file>
</activation>
- jdk:如果匹配指定的jdk版本,将会激活
- os:操作系统
- property:如果maven能检测到相应的属性
- file: 用于判断文件是否存在或者不存在
除了使用 activation 来激活 profile ,同 样 可以通 过 activeProfiles 来激活
Active Profiles
表示激活的 profile, 通 过 profile id 来指定。
<activeProfiles>
<activeProfile>env-test</activeProfile> 指定的 profile id
</activeProfiles>
maven
配置篇 之
pom.xml
说
完了
settings.xml
配置,下来
说
一下
maven2
的主要配置
pom.xml
什 么 是 pom?
pom 作 为项 目 对 象模型。通 过 xml 表示maven 项 目,使用pom.xml来 实现 。主要描述了 项 目:包括配置文件; 开发 者需要遵循的 规则 ,缺陷管理系 统 , 组织 和licenses, 项 目的url, 项 目的依 赖 性,以及其他所有的 项 目相 关 因素。
快速察看:
<project>
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
什 么 是 pom?
pom 作 为项 目 对 象模型。通 过 xml 表示maven 项 目,使用pom.xml来 实现 。主要描述了 项 目:包括配置文件; 开发 者需要遵循的 规则 ,缺陷管理系 统 , 组织 和licenses, 项 目的url, 项 目的依 赖 性,以及其他所有的 项 目相 关 因素。
快速察看:
<project>
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->