《Maven权威指南中文版》学习笔记
Chapter 1. 介绍 Apache Maven
1.2. 约定优于配置(Convention Over Configuration)
约定优于配置是一个简单的概念。
系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置。
例如:
EJB3 持久化,将一个特殊的Bean 持久化,
你所需要做的只是将这个类标注为@Entity。
框架将会假定表名和列名是基于类名和属性名。
系统也提供了一些钩子,当有需要的时候你可以重写这些名字,
但是,在大部分情况下,
你会发现使用框架提供的默认值会让你的项目运行的更快。
Maven 的力量来自它的"武断",
它有一个定义好的生命周期和一组知道如何构建和装配软件的通用插件。
如果你遵循这些约定,Maven 只需要几乎为零的工作
——仅仅是将你的源代码放到正确的目录,Maven 将会帮你处理剩下的事情。
1.4. 基于Maven 插件的全局性重用
Chapter 2. 安装和运行Maven
2.6. 获得Maven 帮助
碰到一些
书没有涉及的问题,建议你在下面的地址去寻找答案:
http://maven.apache.org
2.7. 使用Maven Help 插件
help:active-profiles
列出当前构建中活动的Profile(项目的,用户的,全局的)。
help:effective-pom
显示当前构建的实际POM,包含活动的Profile。
help:effective-settings
打印出项目的实际settings,
包括从全局的settings 和用户级别settings 继承的配置。
help:describe
描述插件的属性。
它不需要在项目目录下运行。
但是你必须提供你想要描述插件的 groupId 和 artifactId。
Note:
Mojo ?在Maven 里面,一个插件目标也被认为是一个“Mojo”
Part I. Maven 实战
本书想要改变这种情况,通过提供,
第一:在Part I,“Maven 实战”中更新原本的Maven 开发者笔记,
第二:在Part II, “Maven Reference”中第一次尝试提供全面的参考。
在你手里的(或者屏幕上的)实际上是二书合一。
在本书的第一部分中我们“边做边介绍”,
然后在Part II, “Maven Reference”中我们填充空白,钻研细节,
介绍那些Maven 新手不感兴趣的高级话题。
读完Part I, “Maven 实战”后,
你将会拥有几个月内开始使用Maven 所需要的一切。
只有当你需要通过编写定制插件来开始自定义你的项目,
或者想了解特定插件细节的时候,
才可能需要回到Part II, “Maven Reference”。
3.5.1. Maven 插件和目标 (Plugins and Goals)
一个Maven 插件是一个单个或者多个目标的集合。
一个目标是一个明确的任务,它可以作为单独的目标运行,
或者作为一个大的构建的一部分和其它目标一起运行。
3.5.3. Maven 坐标 (Coordinates)
POM 为项目命名,提供了项目的一组唯一标识符(坐标),
并且通过依赖 (dependencies) ,父 (parents) 和先决条件 (prerequisite)
来定义和其它项目的关系
groupId, artifactId, version 和packaging。
这些组合的标识符拼成了一个项目的坐标
当一个项目通过依赖,插件或者父项目引用和另外一个项目关联的时候,
Maven 通过坐标来精确定位一个项目。
Maven 坐标通常用冒号来作为分隔符来书写,
像这样的格式:groupId:artifactId:packaging:version。
如:mavenbook:my-app:jar:1.0-SNAPSHOT
一个项目的groupId:artifactId:version 使之成为一个独一无二的项目;
你不能同时有一个拥有同样的groupId, artifactId 和version 标识的项目。
(打包格式是 Maven 坐标的重要组成部分,
但是它不是项目唯一标识符的一个部分。)
3.5.4. Maven 仓库(Repositories)
Maven 自带了一个用来下载Maven 核心插件和依赖的远程仓库地址
(http://repo1.maven.org/maven2)。
Maven 仓库的标准是按照下面的目录格式来存储构件,相对于仓库的根目录:
/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
Maven 仓库既是一个从远程仓库下载的构件的缓存,也允许你的项目相互依赖。
3.5.5. Maven 依赖管理 (Dependency Management)
Maven 最强大的特征之一,它支持了传递性依赖(transitive dependencies)
provided 范围告诉Maven 一个依赖在编译的时候需要,
但是它不应该被捆绑在构建的输出中。
当你开发web 应用的时候provided 范围变得十分有用,
例如:
需要通过Servlet API 来编译你的代码,
但是你不希望ServletAPI 的JAR 文件包含在你web 应用的WEB-INF/lib 目录中。
P33
3.5.6. 站点生成和报告 (Site Generation and Reporting)
mvn site
Chapter 4. 定制一个Maven 项目
http://www.mvnrepository.com (无法连接???)
该站点提供了针对 Maven 仓库的搜索接口,你可以用它来搜索依赖
Example 4.6. Simple Weather 的 YahooRetriever 类
(用于从Yahoo websie获取天气信息)
public InputStream retrieve(int zipcode) throws Exception {
log.info( "Retrieving Weather Data" );
String url = "http://weather.yahooapis.com/forecastrss?p=" + zipcode;
URLConnection conn = new URL(url).openConnection();
return conn.getInputStream();
}
(天气预报的例子中有不少优秀的样例代码,可以单独抽出来记录)
4.7. 添加资源
4.8. 运行Simple Weather 项目
虽然 Exec 插件很有用,在开发过程中用来运行测试之外,
你不应该依赖它来运行你的应用程序。
想要更健壮的解决方案,使用Maven Assembly 插件,
它在Section 4.13, “构建一个打包好的命令行应用程序”中被描述。
4.8.2. 浏览你的项目依赖
mvn dependency:resolve
使用 Maven Dependency 插件来打印出已解决依赖的列表。
mvn dependency:tree
打印项目的整个依赖
mvn install -X
想要查看完整的依赖踪迹,
包含那些因为冲突或者其它原因而被拒绝引入的构件
进一步解释:
从该输出你能看到 Maven 正在创建一个依赖图,排除重复,
解决不同版本之间的冲突。如果你的依赖有问题,
通常在dependency:tree 所生成的列表基础上更深入一点会有帮助;
开启调试输出允许你看到 Maven 工作时的依赖机制。
4.9. 编写单元测试
4.10. 添加测试范围依赖
4.11. 添加单元测试资源
4.12. 执行单元测试
4.12.1. 忽略测试失败
如果你希望继续构建项目,即使 Surefire 插件遇到了失败的单元测试,
你就需要设置 Surefire 的testFailureIgnore 这个配置属性为true。
或
$ mvn test -Dmaven.test.failure.ignore=true
4.12.2. 跳过单元测试
$ mvn install -Dmaven.test.skip=true
4.13. 构建一个打包好的命令行应用程序
P58
4.13. 构建一个打包好的命令行应用程序
下面的小节介绍了使用 Maven Assembly 插件的预定义装配描述符生成一个可分发的JAR 文件的过程,
该文件包含了项目的二进制文件和所有的依赖。
jar-with-dependencies 格式
mvn assembly:assembly
Chapter 5. 一个简单的Web 应用
5.4. 配置Jetty 插件
5.6. 添加J2EE 依赖
为了编写一个 servlet ,我们需要添加 Servlet API 作为项目依赖。
Apache Geronimo 的独立的开源实现
【【【
一种更简单的方法来下载所有这些类库(J2EE API,包括JNDI, JDBC,Servlet, JSP, JTA, 以及其它)并安
装到本地仓库
很多年以来,获取 Servlet 规格说明 JAR 文件的唯一方式是从 Sun Microsystems 下载。
你必须到 Sun 的 web 站点,同意并且点击它的许可证协议,这样才能访问 Servlet JAR。
这是必须的,因为 Sun 的规格说明 JAR 文件并没有使用一个允许再次分发的许可证。
这很乏味并且令人恼火,直到 Apache Geronimo 项目创建了很多通过 Sun 认证的企业级规格说明实现。
这些规格说明 JAR 是按照 Apache 软件许可证版本 2.0 发布的,
该许可证允许对源代码和二进制文件进行免费的再次分发。
现在,对你的程序来说,从 Sun Microsystems 下载的 Servlet API JAR
和从 Apache Geronimo 项目下载的 JAR 没什么大的差别。
它们同样都通过了 Sun Microsystems 的严格的一个测试兼容性工具箱(TCK)。
】】】
provided 范围告诉 Maven,jar文件已经由容器“提供”了,因此不再需要包含在 war 中。
Chapter 6. 一个多模块项目
6.2. simple-parent 项目
这个父项目不像之前的项目那样创建一个JAR 或者一个WAR,它仅仅是一个引用其它 Maven 项目的POM。
Chapter 7. 多模块企业级项目
simple-webapp
simple-command
simple-modol
simple-weather
simple-persist
7.3. simple-model 模块
大多数企业项目需要做的第一件事情是建立对象模型。
Maven Hibernate3 插件有不同的方法获取Hibernate 映射信息,
这些信息适用于Hibernate3 插件的不同用例。
如果你正在使用Hibernate 映射XML 文件(.hbm.xml),你会要使用hbm2java 目标生成模型类,你会将
implementation 设置成configuration。
如果你使用Hibernate3 插件逆向工程从一个数据库产生.hbm.xml 文件和模型类,你会需要一个
jdbcconfiguration 的implementation。
在本例中,我们使用现存的标注对象模型来生成一个数据库。
换句话说,我们有我们的Hibernate 映射,但我们还没有数据库。
在这种用例中,正确的implementation 值应该是annotationconfiguration。
Maven Hibernate3 插件在后面的一节Section 7.7, “运行这个Web 应用”中详细讨论。
7.7. 运行这个Web 应用
$ mvn hibernate3:hbm2ddl
$ mvn jetty:run
Jetty 启动之后,你可以载入
http://localhost:8080/simple-webapp/weather.x?zip=60202
7.8. simple-command 模块
7.9. 运行这个命令行程序
$ mvn assembly:assembly
创建一个带有依赖的JAR,它将所有依赖解压到一个临时目录,
然后将所有字节码收集到target/目录下一个名为simple-command-jar-with-dependencies.jar 的JAR 中。
这个“超级的”JAR 的体重为15MB。
$ mvn hibernate3:hbm2ddl
$ java -cp target/simple-command-jar-with-dependencies.jar org.sonatype.mavenbook.weather.Main
60202
7.10.1. 编写接口项目程序
当我们使用术语接口项目的时候,我们是指一个只包含了接口和常量的Maven 项目。
Chapter 8. 优化和重构POM
P122
Chapter 9. 项目对象模型
P149
Chapter 10. 构建生命周期
180
Chapter 11. 构建Profile
P196
Chapter 14. Maven 和Eclipse: m2eclipse
P215
Chapter 16. 仓库管理器
P237
参考:
Maven权威指南中文版.pdf
http://d.download.csdn.net/download/Ruzhefeng/3296471
浙公网安备 33010602011771号