您的位置:首页 > 其它

《Maven权威指南》学习笔记(一)

2011-08-10 13:40 225 查看


《Maven权威指南》学习笔记(一)

Posted by Ryan on 2010/04/29Leave
a comment (0)Go
to comments

Maven的生命周期怎么理解?

一个阶段是“构建生命周期”中的一个步骤。生命周期是指包含在一个项目构建中的一系列有序的阶段

插件目标可以附着在生命周期阶段上。随着Maven沿着生命周期的阶段移动,它会执行附着在特定阶段上的目标

生命周期:第10章

学习使用Help插件

help:active-profiles

列出当前构建中活动的Profile(项目的,用户的,全局的)。

help:effective-pom

显示当前构建的实际POM,包含活动的Profile。

help:effective-settings

打印出项目的实际settings, 包括从全局的settings和用户级别settings继承的配置。

help:describe

描述插件的属性。它不需要在项目目录下运行,但是你必须提供你想要描述插件的 groupId 和 artifactId。也可以传入插件的前缀(如help)如: mvn
help:describe -Dplugin=help -Ddetail(书上用-Dfull)

运行mvn的方式

mvn archetype:create 这里archetype是一个插件标识而create是目标标识,一个Maven插件是一个单个或者多个目标的集合.该命令没有创建 src/main/resources目录

create目标定义了一个配置属性archetypeArtifactId,不指定时它有一个默认值为maven-archetype-quickstart,生成的目录名与artifactId匹配.指定 archetypeArtifactId 为 maven-archetype-webapp,将创建一个web项目.

mvn package 命令行并没有指定一个插件目标,而是指定了一个Maven生命周期阶段.生命周期是包含在一个项目构建中的一系列有序的阶段

插件

Maven Surefire 插件是负责运行单元测试的插件.测试报告:target\surefire-reports

Maven Archetype 插件

Maven Exec 插件.它不是 Maven 核心插件,但它可以从Codehaus 的 Mojo 项目得到.虽然 Exec 插件很有用,你不应该依赖它来运行你的应用程序.

Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序。Exec 能做这样的工作是因为 Maven 已经知道如何创建和管理你的 classpath 和你的依赖.

Maven Dependency 插件.

打印已解决依赖的列表: mvn dependency:resolve

如果你想知道你项目的整个依赖树,你可以运行 dependency:tree 目标

Maven Assembly 插件:是一个用来创建你应用程序特有分发包的插件.需要在 pom.xml 中的build 配置中添加plugin 配置,再运行 mvn assembly:assembly 来构建这个装配

项目坐标

groupId, artifactId, version和packaging。这些组合的标识符拼成了一个项目的坐标.

groupId以创建这个项目的组织名称的逆向域名(reverse domain name)开头

version:正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个“SNAPSHOT”的标记

packaging:也是Maven坐标的重要组成部分(不过在书上的后半部分又把它排除在坐标之外),但是它不是项目唯一标识符的一个部分.你不能同时有一个拥有同样的groupId, artifactId和version标识的项目

依赖范围

当一个依赖的范围是test的时候,说明它在Compiler插件运行compile目标的时候是不可用的。它只有在运行compiler:testCompile和surefire:test目标的时候才会被加入到classpath中.测试范围依赖是一个只在测试编译和测试运行时在 classpath 中有效的依赖。如果你的项目是以 war 或者 ear 形式打包的,测试范围依赖就不会被包含在项目的打包输出中。

单元测试

忽略单元测试失败:1)设置 Surefire 的testFailureIgnore 这个配置属性为 true;2) mvn test -Dmaven.test.failure.ignore=true

跳过单元测试:1)设置 Surefire 的skip这个配置属性为 true;2) mvn install -Dmaven.test.skip=true

web应用

可以通过mvn tomcat:run来启动web,并且不需要在pom.xml配置相应的插件.

跳过测试:-Dmaven.test.skip(=true)

指定端口:-Dmaven.tomcat.port=9090

忽略测试失败:-Dmaven.test.failure.ignore=true

也可以通过mvn jetty:run来实现相同的目的,不过需要在pom.xml中做相应的插件配置.

POM优化

优化依赖

依赖重复声明:找出所有被用于一个以上模块的依赖,然后将其向上移到父POM的dependencyManagement片段,在这些依赖配置被上移之后,我们需要为每个POM移除这些依赖的版本,否则它们会覆盖定义在父项目中的dependencyManagement.父POM包含一个版本和一组排除配置,所有的子POM需要使用groupId和artifactId引用这个依赖。

版本重复问题:创建<properties><hibernate.annotations.version>3.3.0.ga</hibernate.annotations.version></properties>属性,然后在<dependency>配置节里加入<version>${hibernate.annotations.version}</version>

兄弟依赖不匹配:为兄弟项目使用内置的项目version和groupId

优化插件

使用元素顶层POM build元素下的pluginManagement元素

通过属性来解决插件里的依赖的版本重复问题.

使用Maven Dependency插件进行优化

总是为你代码引用的类显式声明依赖

运行dependency:analyze,该目标分析这个项目,查看是否有直接依赖,或者一些引用了但不是直接声明的依赖。

为了进一步调查,运行dependency:tree目标,该目标会列出项目中所有的直接和传递性依赖。

大部分复杂的Maven多模块项目倾向于在顶层POM中定义所有的版本

原创文章,转载请注明: 转载自Ryan's
note
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: